From d6552a5c453fd4463ec12abb019ea8e201632f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sat, 17 Nov 2018 19:51:02 +0100 Subject: [PATCH 01/36] added cytoscape dependency --- client/package-lock.json | 22 ++++++++++++++++++++-- client/package.json | 2 ++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index cc9fc46a..c844dc9b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -869,6 +869,11 @@ } } }, + "@types/cytoscape": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@types/cytoscape/-/cytoscape-3.2.8.tgz", + "integrity": "sha512-GBDjUq9LyEBRo5DbfBgB7F1bulXmW17wiBIt/0GykSnR8zzbDHsNyUMEHhOpTVDzqVEZqld9QS5kZHysBbpNqg==" + }, "@types/jasmine": { "version": "2.8.11", "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.11.tgz", @@ -2749,6 +2754,15 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, + "cytoscape": { + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.20.tgz", + "integrity": "sha512-EtbydFDTa7TTWPulEdefCnI8IvlmyEzP21kCguH194GSdWA5HrWQPjiX66aJoOl6xqU2QCbVks2J7ydKJEbYRg==", + "requires": { + "heap": "^0.2.6", + "lodash.debounce": "^4.0.8" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4835,6 +4849,11 @@ "minimalistic-assert": "^1.0.1" } }, + "heap": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", + "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -6211,8 +6230,7 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, "lodash.mergewith": { "version": "4.6.1", diff --git a/client/package.json b/client/package.json index 374ec1ec..0d1dfa6a 100644 --- a/client/package.json +++ b/client/package.json @@ -23,8 +23,10 @@ "@angular/platform-browser-dynamic": "^7.0.4", "@angular/router": "^7.0.4", "@ng-bootstrap/ng-bootstrap": "^4.0.0", + "@types/cytoscape": "^3.2.8", "bootstrap": "^4.1.3", "core-js": "^2.5.7", + "cytoscape": "^3.2.20", "font-awesome": "^4.7.0", "jquery": "^3.3.1", "material-design-icons": "^3.0.1", From 7c4809f56adeabec21b84da7594b62b091f838f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 22 Nov 2018 12:44:00 +0100 Subject: [PATCH 02/36] created model service and dummy graph view --- client/src/app/api/api/api.service.ts | 21 ++++--- client/src/app/api/api/socket.service.ts | 18 +++--- client/src/app/api/model/instanceNetwork.ts | 9 --- client/src/app/api/variables.ts | 3 +- .../dashboard/crawler/crawler.component.ts | 4 +- .../dashboard-card.component.ts | 6 +- .../dashboard-overview.component.ts | 4 +- .../app/dashboard/dashboard.component.html | 3 +- client/src/app/dashboard/dashboard.module.ts | 4 +- .../dashboard/graph-view/graph-view.module.ts | 17 ++++++ .../graph-view/graph-view.service.spec.ts | 12 ++++ .../graph-view/graph-view.service.ts | 12 ++++ .../graph-view/graph-view.component.css | 5 ++ .../graph-view/graph-view.component.html | 1 + .../graph-view/graph-view.component.spec.ts | 25 ++++++++ .../graph-view/graph-view.component.ts | 25 ++++++++ .../status-card/status-card.component.ts | 4 +- .../table-all/table-all.component.ts | 8 +-- .../app/dashboard/webapi/web-api.component.ts | 6 +- .../app/dashboard/webapp/webapp.component.ts | 6 +- client/src/app/model/model.module.ts | 15 +++++ client/src/app/model/model.service.spec.ts | 12 ++++ client/src/app/model/model.service.ts | 52 ++++++++++++++++ .../{api/model => model/models}/instance.ts | 4 ++ .../model => model/models}/instanceLink.ts | 0 .../model => model/models}/socketMessage.ts | 15 +++-- .../{api/model => model/models}/sysInfo.ts | 0 client/src/app/model/store.service.spec.ts | 12 ++++ client/src/app/model/store.service.ts | 60 +++++++++++++++++++ 29 files changed, 311 insertions(+), 52 deletions(-) delete mode 100644 client/src/app/api/model/instanceNetwork.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view.module.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view.service.spec.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view.service.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.css create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.html create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts create mode 100644 client/src/app/model/model.module.ts create mode 100644 client/src/app/model/model.service.spec.ts create mode 100644 client/src/app/model/model.service.ts rename client/src/app/{api/model => model/models}/instance.ts (94%) rename client/src/app/{api/model => model/models}/instanceLink.ts (100%) rename client/src/app/{api/model => model/models}/socketMessage.ts (89%) rename client/src/app/{api/model => model/models}/sysInfo.ts (100%) create mode 100644 client/src/app/model/store.service.spec.ts create mode 100644 client/src/app/model/store.service.ts diff --git a/client/src/app/api/api/api.service.ts b/client/src/app/api/api/api.service.ts index 317ab16e..99117f17 100644 --- a/client/src/app/api/api/api.service.ts +++ b/client/src/app/api/api/api.service.ts @@ -20,10 +20,10 @@ import {Inject, Injectable, Optional} from '@angular/core'; import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http'; import {Observable} from 'rxjs'; import {Configuration} from '../configuration'; -import {BASE_PATH, INSTANCES, NUMBER_OF_INSTANCES, SYS_INFO} from '../variables'; +import {BASE_PATH, INSTANCE_NETWORK, INSTANCES, NUMBER_OF_INSTANCES, SYS_INFO} from '../variables'; import {CustomHttpUrlEncodingCodec} from '../encoder'; -import {Instance} from '../model/instance'; -import {SysInfo} from '../model/sysInfo'; +import {Instance} from '../../model/models/instance'; +import {SysInfo} from '../../model/models/sysInfo'; @Injectable({ @@ -47,7 +47,15 @@ export class ApiService { } } - public getSysInfo(reportProgress: boolean = false): Observable { + public getSysInfo(): Observable { + return this.get(SYS_INFO); + } + + public getInstanceNetwork(): Observable> { + return this.get>(INSTANCE_NETWORK); + } + + private get(path: String) { let headers = this.defaultHeaders; // to determine the Accept header @@ -58,10 +66,9 @@ export class ApiService { if (httpHeaderAcceptSelected !== undefined) { headers = headers.set('Accept', httpHeaderAcceptSelected); } - return this.httpClient.get(`${this.basePath}${SYS_INFO}`, - {headers: headers, observe: 'body', reportProgress: reportProgress}); + return this.httpClient.get(`${this.basePath}${path}`, + {headers: headers, observe: 'body'}); } - /** * Find number of running instances * How many instances per type are running diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 90ae4234..3f266b9a 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -19,16 +19,18 @@ import {Injectable} from '@angular/core'; import {Observable, Observer, Subject} from 'rxjs'; import { - EventType, EventTypeEnum, + DockerOperationError, + EventType, + EventTypeEnum, NumbersChanged, - objectIsMessage, payloadIsInstanceLink, + objectIsMessage, + payloadIsDockerOperationError, + payloadIsInstanceLink, payloadIsNumbersChanged, - RegistryEvent, - DockerOperationError, - payloadIsDockerOperationError -} from '../model/socketMessage'; -import {ComponentTypeEnum, objIsInstance, Instance } from '../model/instance'; -import {InstanceLink} from '../model/instanceLink'; + RegistryEvent +} from '../../model/models/socketMessage'; +import {ComponentTypeEnum, Instance, objIsInstance} from '../../model/models/instance'; +import {InstanceLink} from '../../model/models/instanceLink'; interface ObserverMap { diff --git a/client/src/app/api/model/instanceNetwork.ts b/client/src/app/api/model/instanceNetwork.ts deleted file mode 100644 index 8b4c4a43..00000000 --- a/client/src/app/api/model/instanceNetwork.ts +++ /dev/null @@ -1,9 +0,0 @@ - -import { Instance } from './instance'; -import { InstanceLink } from './instanceLink'; - - -export interface InstanceNetwork { - instances: Array; - links: Array; -} diff --git a/client/src/app/api/variables.ts b/client/src/app/api/variables.ts index f1dcc6bf..5733b38c 100644 --- a/client/src/app/api/variables.ts +++ b/client/src/app/api/variables.ts @@ -16,10 +16,11 @@ * limitations under the License. */ -import { InjectionToken } from '@angular/core'; +import {InjectionToken} from '@angular/core'; export const BASE_PATH = new InjectionToken('basePath'); export const INSTANCES = '/api/instances'; +export const INSTANCE_NETWORK = 'api/network'; export const SYS_INFO = '/api/systemInfo'; export const NUMBER_OF_INSTANCES = '/api/numberOfInstances'; export const COLLECTION_FORMATS = { diff --git a/client/src/app/dashboard/crawler/crawler.component.ts b/client/src/app/dashboard/crawler/crawler.component.ts index c44695d2..8c8c18c8 100644 --- a/client/src/app/dashboard/crawler/crawler.component.ts +++ b/client/src/app/dashboard/crawler/crawler.component.ts @@ -17,7 +17,7 @@ */ import {Component, OnInit} from '@angular/core'; -import {ComponentTypeEnum, Instance} from '../../api/model/instance'; +import {ComponentTypeEnum, Instance} from '../../model/models/instance'; import {ApiService} from '../../api/api/api.service'; @Component({ @@ -40,7 +40,7 @@ export class CrawlerComponent implements OnInit { this.apiService.getInstances(ComponentTypeEnum.Crawler).subscribe((result: Array) => { this.table_data = result; }, err => { - console.log('error receiving data for crawler'); + console.log('error receiving data for crawler', err); }); } diff --git a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts index 928cc96c..d741906c 100644 --- a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts +++ b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts @@ -17,14 +17,12 @@ */ import {Component, Input, OnInit} from '@angular/core'; -import {EventType, EventTypeEnum} from '../../api/model/socketMessage'; -import {ComponentType, ComponentTypeEnum} from '../../api/model/instance'; +import {EventType, EventTypeEnum} from '../../model/models/socketMessage'; +import {ComponentType, ComponentTypeEnum} from '../../model/models/instance'; import {ApiService} from '../../api/api/api.service'; import {SocketService} from '../../api/api/socket.service'; - - @Component({ selector: 'app-dashboard-card', templateUrl: './dashboard-card.component.html', diff --git a/client/src/app/dashboard/dashboard-overview/dashboard-overview.component.ts b/client/src/app/dashboard/dashboard-overview/dashboard-overview.component.ts index 7a579817..feae9c45 100644 --- a/client/src/app/dashboard/dashboard-overview/dashboard-overview.component.ts +++ b/client/src/app/dashboard/dashboard-overview/dashboard-overview.component.ts @@ -16,8 +16,8 @@ * limitations under the License. */ -import { Component, OnInit } from '@angular/core'; -import {ComponentTypeEnum} from '../../api/model/instance'; +import {Component, OnInit} from '@angular/core'; +import {ComponentTypeEnum} from '../../model/models/instance'; @Component({ diff --git a/client/src/app/dashboard/dashboard.component.html b/client/src/app/dashboard/dashboard.component.html index f21fd1a8..f6921bbc 100644 --- a/client/src/app/dashboard/dashboard.component.html +++ b/client/src/app/dashboard/dashboard.component.html @@ -17,4 +17,5 @@ --> route="header" componentType="dashboard-overview" - + + diff --git a/client/src/app/dashboard/dashboard.module.ts b/client/src/app/dashboard/dashboard.module.ts index d50e9cd5..a7e85384 100644 --- a/client/src/app/dashboard/dashboard.module.ts +++ b/client/src/app/dashboard/dashboard.module.ts @@ -39,6 +39,7 @@ import {StatusCardComponent} from './status-card/status-card.component'; import {UserManagementComponent} from './user-management/user-management.component'; import {UserProfileComponent} from './user-profile/user-profile.component'; import {ApiModule} from '../api/api.module'; +import {GraphViewModule} from './graph-view/graph-view.module'; @NgModule({ @@ -56,7 +57,8 @@ import {ApiModule} from '../api/api.module'; MatInputModule, DashboardRoutingModule, DashboardRoutingModule, - ApiModule + ApiModule, + GraphViewModule ], declarations: [ DashboardCardComponent, diff --git a/client/src/app/dashboard/graph-view/graph-view.module.ts b/client/src/app/dashboard/graph-view/graph-view.module.ts new file mode 100644 index 00000000..781bc2b6 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.module.ts @@ -0,0 +1,17 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {GraphViewComponent} from './graph-view/graph-view.component'; +import {GraphViewService} from './graph-view.service'; +import {ApiModule} from '../../api/api.module'; + +@NgModule({ + declarations: [GraphViewComponent], + imports: [ + CommonModule, + ApiModule + ], + exports: [GraphViewComponent], + providers: [GraphViewService] +}) +export class GraphViewModule { +} diff --git a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts new file mode 100644 index 00000000..dc774f2c --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts @@ -0,0 +1,12 @@ +import {TestBed} from '@angular/core/testing'; + +import {GraphViewService} from './graph-view.service'; + +describe('GraphViewService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: GraphViewService = TestBed.get(GraphViewService); + expect(service).toBeTruthy(); + }); +}); diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts new file mode 100644 index 00000000..61b46127 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -0,0 +1,12 @@ +import {Injectable} from '@angular/core'; +import {SocketService} from '../../api/api/socket.service'; +import {ApiService} from '../../api/api/api.service'; + +@Injectable({ + providedIn: 'root' +}) +export class GraphViewService { + + constructor(private socketService: SocketService, private apiService: ApiService) { + } +} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css new file mode 100644 index 00000000..87666c95 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css @@ -0,0 +1,5 @@ +#cy { + width: 500px; + height: 500px; + display: block; +} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html new file mode 100644 index 00000000..463b39ea --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html @@ -0,0 +1 @@ +
diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts new file mode 100644 index 00000000..29811a65 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {GraphViewComponent} from './graph-view.component'; + +describe('GraphViewComponent', () => { + let component: GraphViewComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [GraphViewComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(GraphViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts new file mode 100644 index 00000000..096c0ff6 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts @@ -0,0 +1,25 @@ +import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import * as cytoscape from 'cytoscape'; + +@Component({ + selector: 'app-graph-view', + templateUrl: './graph-view.component.html', + styleUrls: ['./graph-view.component.css'] +}) +export class GraphViewComponent implements OnInit { + @ViewChild('cy') cyDiv: ElementRef; + private cy: cytoscape.Core; + + constructor() { + } + + ngOnInit() { + + this.cy = cytoscape({ + container: this.cyDiv.nativeElement, // container to render in + elements: [ // list of graph elements to start with + ], + }); + } + +} diff --git a/client/src/app/dashboard/status-card/status-card.component.ts b/client/src/app/dashboard/status-card/status-card.component.ts index 0f2fbc29..07b42f95 100644 --- a/client/src/app/dashboard/status-card/status-card.component.ts +++ b/client/src/app/dashboard/status-card/status-card.component.ts @@ -16,8 +16,8 @@ * limitations under the License. */ -import { Component, OnInit } from '@angular/core'; -import {SysInfo} from '../../api/model/sysInfo'; +import {Component, OnInit} from '@angular/core'; +import {SysInfo} from '../../model/models/sysInfo'; import {ApiService} from '../../api/api/api.service'; @Component({ diff --git a/client/src/app/dashboard/table-all/table-all.component.ts b/client/src/app/dashboard/table-all/table-all.component.ts index 4e91176c..c4ad69af 100644 --- a/client/src/app/dashboard/table-all/table-all.component.ts +++ b/client/src/app/dashboard/table-all/table-all.component.ts @@ -16,10 +16,10 @@ * limitations under the License. */ -import { Component, OnInit, Input } from '@angular/core'; -import {Instance} from '../../api/model/instance'; -import { SelectionModel} from '@angular/cdk/collections'; -import { MatDialog, MatTableDataSource} from '@angular/material'; +import {Component, Input, OnInit} from '@angular/core'; +import {Instance} from '../../model/models/instance'; +import {SelectionModel} from '@angular/cdk/collections'; +import {MatDialog, MatTableDataSource} from '@angular/material'; @Component({ diff --git a/client/src/app/dashboard/webapi/web-api.component.ts b/client/src/app/dashboard/webapi/web-api.component.ts index 780c7d44..ddb44632 100644 --- a/client/src/app/dashboard/webapi/web-api.component.ts +++ b/client/src/app/dashboard/webapi/web-api.component.ts @@ -16,8 +16,8 @@ * limitations under the License. */ -import { Component, OnInit } from '@angular/core'; -import {ComponentTypeEnum, Instance} from '../../api/model/instance'; +import {Component, OnInit} from '@angular/core'; +import {ComponentTypeEnum, Instance} from '../../model/models/instance'; import {ApiService} from '../../api/api/api.service'; @@ -39,7 +39,7 @@ export class WebApiComponent implements OnInit { this.apiService.getInstances(ComponentTypeEnum.WebApi).subscribe((result: Array) => { this.table_data = result; }, (err) => { - console.log('error during get instances for Web Api'); + console.log('error during get instances for Web Api', err); }); } diff --git a/client/src/app/dashboard/webapp/webapp.component.ts b/client/src/app/dashboard/webapp/webapp.component.ts index d017d5e2..93627dce 100644 --- a/client/src/app/dashboard/webapp/webapp.component.ts +++ b/client/src/app/dashboard/webapp/webapp.component.ts @@ -16,8 +16,8 @@ * limitations under the License. */ -import { Component, OnInit } from '@angular/core'; -import {ComponentTypeEnum, Instance} from '../../api/model/instance'; +import {Component, OnInit} from '@angular/core'; +import {ComponentTypeEnum, Instance} from '../../model/models/instance'; import {ApiService} from '../../api/api/api.service'; @@ -39,7 +39,7 @@ export class WebappComponent implements OnInit { this.table_data = result; }, err => { - console.log('error during get instances for web app'); + console.log('error during get instances for web app', err); }); } diff --git a/client/src/app/model/model.module.ts b/client/src/app/model/model.module.ts new file mode 100644 index 00000000..0029abbb --- /dev/null +++ b/client/src/app/model/model.module.ts @@ -0,0 +1,15 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {ModelService} from './model.service'; +import {StoreService} from './store.service'; + +@NgModule({ + declarations: [], + imports: [ + CommonModule + ], + exports: [], + providers: [ModelService, StoreService] +}) +export class ModelModule { +} diff --git a/client/src/app/model/model.service.spec.ts b/client/src/app/model/model.service.spec.ts new file mode 100644 index 00000000..a969d8a8 --- /dev/null +++ b/client/src/app/model/model.service.spec.ts @@ -0,0 +1,12 @@ +import {TestBed} from '@angular/core/testing'; + +import {ModelService} from './model.service'; + +describe('ModelService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: ModelService = TestBed.get(ModelService); + expect(service).toBeTruthy(); + }); +}); diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts new file mode 100644 index 00000000..f24558e1 --- /dev/null +++ b/client/src/app/model/model.service.ts @@ -0,0 +1,52 @@ +import {Injectable} from '@angular/core'; +import {SocketService} from '../api/api/socket.service'; +import {ApiService} from '../api/api/api.service'; +import {Instance} from './models/instance'; + +import {EventTypeEnum} from './models/socketMessage'; +import {StoreService} from './store.service'; + + +@Injectable({ + providedIn: 'root' +}) +export class ModelService { + + + constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { + + } + + public initInstances() { + // get current instances and update the current state + this.apiService.getInstanceNetwork().subscribe((network: Array) => { + // parse network to state and update after diff + this.storeService.addToState(network); + }, (error) => { + console.log('get network error', error); + }); + // register for event updates + this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { + this.storeService.addToState(newInstance); + }); + + this.socketService.subscribeForEvent(EventTypeEnum.InstanceRemovedEvent).subscribe((removedInstance: Instance) => { + this.storeService.removeFromState(removedInstance); + }); + } + + public subscribeForInstances() { + + } + + public subscribeForCrawler() { + + } + + public subscribeForWebApp() { + } + + public subscribeForWebApi() { + + } +} diff --git a/client/src/app/api/model/instance.ts b/client/src/app/model/models/instance.ts similarity index 94% rename from client/src/app/api/model/instance.ts rename to client/src/app/model/models/instance.ts index 5ee645fd..9890d368 100644 --- a/client/src/app/api/model/instance.ts +++ b/client/src/app/model/models/instance.ts @@ -17,6 +17,8 @@ */ +import {InstanceLink} from './instanceLink'; + export type ComponentType= 'Crawler' | 'WebApi' | 'WebApp' | 'DelphiManagement'; export const ComponentTypeEnum = { Crawler: 'Crawler' as ComponentType, @@ -31,6 +33,8 @@ export interface Instance { host: string; portNumber: number; name: string; + linksTo: Array; + linksFrom: Array; /** * Component Type */ diff --git a/client/src/app/api/model/instanceLink.ts b/client/src/app/model/models/instanceLink.ts similarity index 100% rename from client/src/app/api/model/instanceLink.ts rename to client/src/app/model/models/instanceLink.ts diff --git a/client/src/app/api/model/socketMessage.ts b/client/src/app/model/models/socketMessage.ts similarity index 89% rename from client/src/app/api/model/socketMessage.ts rename to client/src/app/model/models/socketMessage.ts index 8ad8b8ea..ead5cce6 100644 --- a/client/src/app/api/model/socketMessage.ts +++ b/client/src/app/model/models/socketMessage.ts @@ -17,10 +17,6 @@ */ - - - - import {ComponentType, ComponentTypeEnum, Instance} from './instance'; import {InstanceLink, LinkStateEnum} from './instanceLink'; @@ -34,7 +30,14 @@ export interface RegistryEvent { export type EventType = 'NumbersChangedEvent' | 'InstanceAddedEvent' | 'InstanceRemovedEvent' | 'StateChangedEvent' | - 'InstanceNumbersCrawler'| 'InstanceNumbersWebApi' | 'InstanceNumbersWebApp' | 'InstanceDetails' | 'Heartbeat'; + 'InstanceNumbersCrawler' + | 'InstanceNumbersWebApi' + | 'InstanceNumbersWebApp' + | 'InstanceDetails' + | 'Heartbeat' + | 'LinkAddedEvent' + | + 'LinkStateChangedEvent'; export const EventTypeEnum = { NumbersChangedEvent: 'NumbersChangedEvent' as EventType, InstanceAddedEvent: 'InstanceAddedEvent' as EventType, @@ -44,6 +47,8 @@ export interface RegistryEvent { InstanceNumbersWebApi: 'InstanceNumbersWebApi' as EventType, InstanceNumbersWebApp: 'InstanceNumbersWebApp' as EventType, InstanceDetails: 'InstanceDetails' as EventType, + LinkAddedEvent: 'LinkAddedEvent' as EventType, + LinkStateChangedEvent: 'LinkStateChangedEvent' as EventType, Heartbeat: 'Heartbeat' as EventType }; diff --git a/client/src/app/api/model/sysInfo.ts b/client/src/app/model/models/sysInfo.ts similarity index 100% rename from client/src/app/api/model/sysInfo.ts rename to client/src/app/model/models/sysInfo.ts diff --git a/client/src/app/model/store.service.spec.ts b/client/src/app/model/store.service.spec.ts new file mode 100644 index 00000000..16976112 --- /dev/null +++ b/client/src/app/model/store.service.spec.ts @@ -0,0 +1,12 @@ +import {TestBed} from '@angular/core/testing'; + +import {StoreService} from './store.service'; + +describe('StoreService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: StoreService = TestBed.get(StoreService); + expect(service).toBeTruthy(); + }); +}); diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts new file mode 100644 index 00000000..870096c5 --- /dev/null +++ b/client/src/app/model/store.service.ts @@ -0,0 +1,60 @@ +import {Injectable} from '@angular/core'; +import {Instance} from './models/instance'; +import {BehaviorSubject} from 'rxjs'; + + +export interface State { + instances: { [id: number]: Instance }; + instancesByType: { [compType: string]: Array }; +} + +export const EMPTY_STATE = {instances: {}, instancesByType: {'Crawler': [], 'WebApi': [], 'WebApp': []}}; + +@Injectable({ + providedIn: 'root' +}) +export class StoreService { + + private stateSubject: BehaviorSubject; + + private static addNewInstanceToState(state: State, instance: Instance) { + state.instances[instance.id] = instance; + state.instancesByType[instance.componentType].push(instance.id); + return state; + } + + private static removeInstanceFromState(state: State, instance: Instance) { + delete state.instances[instance.id]; + state.instancesByType[instance.componentType] = state.instancesByType[instance.componentType].filter(e => e !== instance.id); + + return state; + } + + constructor() { + this.stateSubject = new BehaviorSubject(EMPTY_STATE); + } + + public getState() { + return this.stateSubject.value; + } + + public addToState(instances: Array) { + const newState: State = instances.reduce((accumulator: State, currentValue: Instance) => { + return StoreService.addNewInstanceToState(accumulator, currentValue); + }, EMPTY_STATE); + // maybe calculate diff before + this.stateSubject.next(newState); + } + + public addToState(instance: Instance) { + const newState = StoreService.addNewInstanceToState(this.stateSubject.getValue(), instance); + // maybe calculate diff before + this.stateSubject.next(newState); + } + + public removeFromState(instance: Instance) { + + } + + +} From 3a455a944051bbfd2e77690a1e2d160696621520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 22 Nov 2018 12:54:48 +0100 Subject: [PATCH 03/36] fixed duplicate method name in store service --- client/src/app/model/model.service.ts | 10 +++++++--- client/src/app/model/store.service.ts | 14 +++++++++++--- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index f24558e1..f8fbecb0 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -4,7 +4,8 @@ import {ApiService} from '../api/api/api.service'; import {Instance} from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; -import {StoreService} from './store.service'; +import {State, StoreService} from './store.service'; +import {BehaviorSubject} from 'rxjs'; @Injectable({ @@ -12,22 +13,25 @@ import {StoreService} from './store.service'; }) export class ModelService { + private instanceSubject: BehaviorSubject; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { + this.storeService.getStoreObservable().subscribe((state: State) => { + }); } public initInstances() { // get current instances and update the current state this.apiService.getInstanceNetwork().subscribe((network: Array) => { // parse network to state and update after diff - this.storeService.addToState(network); + this.storeService.addInstancesToState(network); }, (error) => { console.log('get network error', error); }); // register for event updates this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { - this.storeService.addToState(newInstance); + this.storeService.addInstanceToState(newInstance); }); this.socketService.subscribeForEvent(EventTypeEnum.InstanceRemovedEvent).subscribe((removedInstance: Instance) => { diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 870096c5..bdf63527 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -1,6 +1,6 @@ import {Injectable} from '@angular/core'; import {Instance} from './models/instance'; -import {BehaviorSubject} from 'rxjs'; +import {BehaviorSubject, Observable} from 'rxjs'; export interface State { @@ -34,11 +34,19 @@ export class StoreService { this.stateSubject = new BehaviorSubject(EMPTY_STATE); } + public getStoreObservable(): Observable { + return new Observable ((observer) => { + this.stateSubject.subscribe(observer); + observer.next(this.stateSubject.value); + }); + + } + public getState() { return this.stateSubject.value; } - public addToState(instances: Array) { + public addInstancesToState(instances: Array) { const newState: State = instances.reduce((accumulator: State, currentValue: Instance) => { return StoreService.addNewInstanceToState(accumulator, currentValue); }, EMPTY_STATE); @@ -46,7 +54,7 @@ export class StoreService { this.stateSubject.next(newState); } - public addToState(instance: Instance) { + public addInstanceToState(instance: Instance) { const newState = StoreService.addNewInstanceToState(this.stateSubject.getValue(), instance); // maybe calculate diff before this.stateSubject.next(newState); From 7721987c48ad930e886215b6c00f34565253aeef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 09:14:13 +0100 Subject: [PATCH 04/36] added networks endpoint to scala play server to query an array of all instances from the ir --- app/controllers/ApiRouter.scala | 1 + .../InstanceRegistryController.scala | 13 +++++++++- app/models/Event.scala | 7 +++--- app/models/Instance.scala | 24 ++++++++++--------- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/controllers/ApiRouter.scala b/app/controllers/ApiRouter.scala index 5fac11a9..63b65176 100644 --- a/app/controllers/ApiRouter.scala +++ b/app/controllers/ApiRouter.scala @@ -36,5 +36,6 @@ class ApiRouter @Inject()(irController: InstanceRegistryController, sysControlle case GET(p"/numberOfInstances" ? q"componentType=$componentType") => irController.numberOfInstances(componentType) case GET(p"/instances" ? q"componentType=$componentType") => irController.instances(componentType) case GET(p"/systemInfo") => sysController.getInfo() + case GET(p"/network") => irController.getNetwork() } } \ No newline at end of file diff --git a/app/controllers/InstanceRegistryController.scala b/app/controllers/InstanceRegistryController.scala index 26661ea2..75dbc9ca 100644 --- a/app/controllers/InstanceRegistryController.scala +++ b/app/controllers/InstanceRegistryController.scala @@ -20,7 +20,7 @@ package controllers import akka.actor.{ActorRef, ActorSystem} import javax.inject.Inject -import play.api.Configuration +import play.api.{Configuration, Logger} import scala.concurrent.ExecutionContext import play.api.libs.concurrent.CustomExecutionContext @@ -77,6 +77,17 @@ class InstanceRegistryController @Inject()(implicit system: ActorSystem, mat: Ma } } + def getNetwork(): Action[AnyContent] = Action.async { + ws.url(instanceRegistryUri + "/network").get().map { response => + // TODO: possible handling of parsing the data can be done here + Logger.debug(response.body) + if (response.status == 200) { + Ok(response.body) + } else { + new Status(response.status) + } + }(myExecutionContext) + } def numberOfInstances(componentType: String) : Action[AnyContent] = Action.async { // TODO: handle what should happen if the instance registry is not reachable. diff --git a/app/models/Event.scala b/app/models/Event.scala index db50bf22..3370ae51 100644 --- a/app/models/Event.scala +++ b/app/models/Event.scala @@ -106,9 +106,9 @@ trait EventJsonSupport extends SprayJsonSupport with DefaultJsonProtocol with In * @param payload Payload of the event, depends on the type */ final case class RegistryEvent ( - eventType: EventType.Value, - payload: RegistryEventPayload -) + eventType: EventType.Value, + payload: RegistryEventPayload + ) /** * Factory object for creating different types of events @@ -237,3 +237,4 @@ object EventEnums { implicit val EventTypeWrites: Writes[EventType] = Writes.enumNameWrites } } + diff --git a/app/models/Instance.scala b/app/models/Instance.scala index fcac9fc2..bf725cec 100644 --- a/app/models/Instance.scala +++ b/app/models/Instance.scala @@ -7,7 +7,7 @@ import spray.json.{DefaultJsonProtocol, DeserializationException, JsString, JsVa /** * Trait defining the implicit JSON formats needed to work with Instances */ -trait InstanceJsonSupport extends SprayJsonSupport with DefaultJsonProtocol { +trait InstanceJsonSupport extends SprayJsonSupport with DefaultJsonProtocol with InstanceLinkJsonSupport { //Custom JSON format for an ComponentType implicit val componentTypeFormat : JsonFormat[ComponentType] = new JsonFormat[ComponentType] { @@ -69,7 +69,7 @@ trait InstanceJsonSupport extends SprayJsonSupport with DefaultJsonProtocol { } //JSON format for Instances - implicit val instanceFormat : JsonFormat[Instance] = jsonFormat8(Instance) + implicit val instanceFormat : JsonFormat[Instance] = jsonFormat10(Instance) } /** @@ -83,15 +83,17 @@ trait InstanceJsonSupport extends SprayJsonSupport with DefaultJsonProtocol { * @param instanceState State of the instance */ final case class Instance ( - id: Option[Long], - host: String, - portNumber: Long, - name: String, - componentType: ComponentType, - dockerId: Option[String], - instanceState: InstanceState, - labels: List[String] -) + id: Option[Long], + host: String, + portNumber: Long, + name: String, + componentType: ComponentType, + dockerId: Option[String], + instanceState: InstanceState, + labels: List[String], + linksTo: List[InstanceLink], + linksFrom: List[InstanceLink] + ) /** * Enumerations concerning instances From e44ebbb958b29c7f1517e0d5b3a9e67a8e50f16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 09:16:00 +0100 Subject: [PATCH 05/36] fixed a bug regarding a duplicate method name --- client/src/app/api/api/api.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/app/api/api/api.service.ts b/client/src/app/api/api/api.service.ts index 99117f17..ca0b6253 100644 --- a/client/src/app/api/api/api.service.ts +++ b/client/src/app/api/api/api.service.ts @@ -77,7 +77,7 @@ export class ApiService { * @param reportProgress flag to report request and response progress. */ public getNumberOfInstances(componentType: string, observe: any = 'body', reportProgress: boolean = false ): Observable { - return this.get(NUMBER_OF_INSTANCES, componentType); + return this.genericGet(NUMBER_OF_INSTANCES, componentType); } /** @@ -88,10 +88,10 @@ export class ApiService { * @param reportProgress flag to report request and response progress. */ public getInstances(componentType: string, observe: any = 'body', reportProgress: boolean = false ): Observable> { - return this.get(INSTANCES, componentType); + return this.genericGet(INSTANCES, componentType); } - private get(endpoint: string, componentType: string, observe: any = 'body', reportProgress: boolean = false ): any { + private genericGet(endpoint: string, componentType: string, observe: any = 'body', reportProgress: boolean = false ): any { if (componentType === null || componentType === undefined) { throw new Error('Required parameter componentType was null or undefined when calling getInstanceNumber.'); } From f5a21d97cb753dc035b420531b662bb0bdcf29cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 09:16:46 +0100 Subject: [PATCH 06/36] fixed a bug where the publishEventName is not set if the eventtype is not in a certain set of events --- client/src/app/api/api/socket.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 3f266b9a..9edc476b 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -101,7 +101,7 @@ export class SocketService { */ const registeredEvents = Object.keys(this.observers); - let publishEventName; + let publishEventName = eventName; /** * Map all numbers changed event to global registry event */ From 762ecf192a6baf85d84cac0b8a665549c72fafea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 09:18:11 +0100 Subject: [PATCH 07/36] included the model service into the application's lifecycle. created a store service to manage the application's state. --- client/src/app/dashboard/dashboard.module.ts | 2 + .../dashboard/graph-view/graph-view.module.ts | 4 +- .../graph-view/graph-view.service.ts | 5 +- .../graph-view/graph-view.component.ts | 18 +++- client/src/app/model/model.service.ts | 99 ++++++++++++++++--- client/src/app/model/models/instance.ts | 3 +- client/src/app/model/models/socketMessage.ts | 4 +- client/src/app/model/store.service.ts | 74 +++++++++++--- 8 files changed, 172 insertions(+), 37 deletions(-) diff --git a/client/src/app/dashboard/dashboard.module.ts b/client/src/app/dashboard/dashboard.module.ts index a7e85384..fac4912e 100644 --- a/client/src/app/dashboard/dashboard.module.ts +++ b/client/src/app/dashboard/dashboard.module.ts @@ -40,6 +40,7 @@ import {UserManagementComponent} from './user-management/user-management.compone import {UserProfileComponent} from './user-profile/user-profile.component'; import {ApiModule} from '../api/api.module'; import {GraphViewModule} from './graph-view/graph-view.module'; +import {ModelModule} from '../model/model.module'; @NgModule({ @@ -58,6 +59,7 @@ import {GraphViewModule} from './graph-view/graph-view.module'; DashboardRoutingModule, DashboardRoutingModule, ApiModule, + ModelModule, GraphViewModule ], declarations: [ diff --git a/client/src/app/dashboard/graph-view/graph-view.module.ts b/client/src/app/dashboard/graph-view/graph-view.module.ts index 781bc2b6..2b52bf76 100644 --- a/client/src/app/dashboard/graph-view/graph-view.module.ts +++ b/client/src/app/dashboard/graph-view/graph-view.module.ts @@ -2,13 +2,13 @@ import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; import {GraphViewComponent} from './graph-view/graph-view.component'; import {GraphViewService} from './graph-view.service'; -import {ApiModule} from '../../api/api.module'; +import {ModelModule} from '../../model/model.module'; @NgModule({ declarations: [GraphViewComponent], imports: [ CommonModule, - ApiModule + ModelModule ], exports: [GraphViewComponent], providers: [GraphViewService] diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts index 61b46127..c6f1a8d0 100644 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -1,12 +1,11 @@ import {Injectable} from '@angular/core'; -import {SocketService} from '../../api/api/socket.service'; -import {ApiService} from '../../api/api/api.service'; +import {ModelService} from '../../model/model.service'; @Injectable({ providedIn: 'root' }) export class GraphViewService { - constructor(private socketService: SocketService, private apiService: ApiService) { + constructor(private modelService: ModelService) { } } diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts index 096c0ff6..ba10f687 100644 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts @@ -1,5 +1,8 @@ import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; import * as cytoscape from 'cytoscape'; +import {ModelService} from '../../../model/model.service'; +import {GraphViewService} from '../graph-view.service'; +import {Instance} from '../../../model/models/instance'; @Component({ selector: 'app-graph-view', @@ -10,9 +13,11 @@ export class GraphViewComponent implements OnInit { @ViewChild('cy') cyDiv: ElementRef; private cy: cytoscape.Core; - constructor() { + constructor(private graphViewService: GraphViewService, private modelService: ModelService) { + } + ngOnInit() { this.cy = cytoscape({ @@ -20,6 +25,17 @@ export class GraphViewComponent implements OnInit { elements: [ // list of graph elements to start with ], }); + this.modelService.getObservableForInstances().subscribe((instances: Array) => { + if (instances !== undefined) { + console.log('received new instance', instances); + instances.forEach((instance) => { + // this.cy.add({group: 'nodes', data: {id: '' + instance.id}}); + const ele: cytoscape.ElementDefinition = {data: {id: '' + instance.id}}; + console.log('trying to add element', ele); + this.cy.add(ele); + }); + } + }); } } diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index f8fbecb0..fda3cb43 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -1,11 +1,11 @@ import {Injectable} from '@angular/core'; import {SocketService} from '../api/api/socket.service'; import {ApiService} from '../api/api/api.service'; -import {Instance} from './models/instance'; +import {ComponentType, Instance} from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; -import {State, StoreService} from './store.service'; -import {BehaviorSubject} from 'rxjs'; +import {StateUpdate, StoreService} from './store.service'; +import {BehaviorSubject, Observable} from 'rxjs'; @Injectable({ @@ -13,22 +13,72 @@ import {BehaviorSubject} from 'rxjs'; }) export class ModelService { - private instanceSubject: BehaviorSubject; + private readonly instanceSubject: BehaviorSubject>; + private readonly instanceIdSubjects: {[compType: string]: BehaviorSubject>}; + private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { - this.storeService.getStoreObservable().subscribe((state: State) => { + this.instanceSubject = new BehaviorSubject>([]); + this.instanceIdSubjects = { + 'Crawler': new BehaviorSubject>([]), + 'WebApp': new BehaviorSubject>([]), 'WebApi': new BehaviorSubject>([]) + }; + + this.instanceSubjects = { + 'Crawler': new BehaviorSubject>([]), + 'WebApp': new BehaviorSubject>([]), 'WebApi': new BehaviorSubject>([]) + }; + + this.storeService.getStoreObservable().subscribe((state: StateUpdate) => { + + // const changedCompTypes = []; + // state.change.elements.forEach((changedInstance) => { + // const compType = changedInstance.componentType; + // if (!compType in changedCompTypes) { + // changedCompTypes.push(compType); + // } + // if (changedCompTypes.length === 3) { + // return; + // } + // }); + // + // changedCompTypes.forEach((compType) => { + // this.instanceIdSubjects[compType].next(state.state.instancesByType[compType]); + // const comps: Array = []; + // state.state.instancesByType[compType].forEach((id) => { + // comps.push(state.state.instances[id]); + // }); + // this.instanceSubjects[compType].next(comps); + // }); + + this.instanceSubject.next(state.change.elements); + }); + + this.socketService.initSocket().then(() => { + + this.initInstances(); + + + setInterval(() => { + this.updateAllInstances(true); + }, 30000); }); } - public initInstances() { + private updateAllInstances(calculateDiff= false) { // get current instances and update the current state this.apiService.getInstanceNetwork().subscribe((network: Array) => { + console.log('received instacne response', network); // parse network to state and update after diff - this.storeService.addInstancesToState(network); + this.storeService.addInstancesToState(network, calculateDiff); }, (error) => { console.log('get network error', error); }); + } + + private initInstances() { + this.updateAllInstances(); // register for event updates this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { this.storeService.addInstanceToState(newInstance); @@ -39,18 +89,41 @@ export class ModelService { }); } - public subscribeForInstances() { + public getObservableForInstances() { + return new Observable>((observer) => { + this.instanceSubject.subscribe(observer); + observer.next(this.instanceSubject.value); + return () => { + // TODO: see console log + console.log('observer completed, implement unsubscribe logic !'); + }; + }); } - public subscribeForCrawler() { + public getObservableForComps(compType: ComponentType) { + return new Observable>((observer) => { + const compSubject = this.instanceSubjects[compType]; + compSubject.subscribe(observer); + observer.next(compSubject.value); + return () => { + // TODO: see console log + console.log('observer completed, implement unsubscribe logic !'); + }; + }); } - public subscribeForWebApp() { - } - - public subscribeForWebApi() { + public getObservableForCompIds(compType: ComponentType) { + return new Observable>((observer) => { + const compSubject = this.instanceIdSubjects[compType]; + compSubject.subscribe(observer); + observer.next(compSubject.value); + return () => { + // TODO: see console log + console.log('observer completed, implement unsubscribe logic !'); + }; + }); } } diff --git a/client/src/app/model/models/instance.ts b/client/src/app/model/models/instance.ts index 9890d368..d05ed9e3 100644 --- a/client/src/app/model/models/instance.ts +++ b/client/src/app/model/models/instance.ts @@ -19,11 +19,12 @@ import {InstanceLink} from './instanceLink'; -export type ComponentType= 'Crawler' | 'WebApi' | 'WebApp' | 'DelphiManagement'; +export type ComponentType= 'Crawler' | 'WebApi' | 'WebApp' | 'DelphiManagement' | 'ElasticSearch'; export const ComponentTypeEnum = { Crawler: 'Crawler' as ComponentType, WebApi: 'WebApi' as ComponentType, WebApp: 'WebApp' as ComponentType, + ElasticSearch: 'ElasticSearch' as ComponentType, DelphiManagement: 'DelphiManagement' as ComponentType }; diff --git a/client/src/app/model/models/socketMessage.ts b/client/src/app/model/models/socketMessage.ts index ead5cce6..99d01ab6 100644 --- a/client/src/app/model/models/socketMessage.ts +++ b/client/src/app/model/models/socketMessage.ts @@ -36,8 +36,8 @@ export interface RegistryEvent { | 'InstanceDetails' | 'Heartbeat' | 'LinkAddedEvent' - | - 'LinkStateChangedEvent'; + | 'LinkStateChangedEvent'; + export const EventTypeEnum = { NumbersChangedEvent: 'NumbersChangedEvent' as EventType, InstanceAddedEvent: 'InstanceAddedEvent' as EventType, diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index bdf63527..518e7253 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -2,23 +2,33 @@ import {Injectable} from '@angular/core'; import {Instance} from './models/instance'; import {BehaviorSubject, Observable} from 'rxjs'; - +export enum Actions { + ADD = 'ADD', + DELETE = 'DELETE', + CHANGE = 'CHANGE', + NONE = 'NONE' +} export interface State { instances: { [id: number]: Instance }; instancesByType: { [compType: string]: Array }; } +export interface StateUpdate { + state: State; + change: {type: Actions; elements?: Array}; +} -export const EMPTY_STATE = {instances: {}, instancesByType: {'Crawler': [], 'WebApi': [], 'WebApp': []}}; +export const EMPTY_STATE = {instances: {}, instancesByType: {'Crawler': [], 'WebApi': [], 'WebApp': [], 'ElasticSearch': []}}; @Injectable({ providedIn: 'root' }) export class StoreService { - private stateSubject: BehaviorSubject; + private readonly stateUpdateSubject: BehaviorSubject; private static addNewInstanceToState(state: State, instance: Instance) { state.instances[instance.id] = instance; + console.log('dding new instance to state', state, instance); state.instancesByType[instance.componentType].push(instance.id); return state; } @@ -30,39 +40,73 @@ export class StoreService { return state; } + private static stateHasChanged(currentState: State, instances: Array) { + const currentInstances = Object.values(currentState.instances); + if (currentInstances.length === instances.length) { + for (let i = 0; i < instances.length; i++) { + const currentInstance = instances[i]; + const currentInstanceState = currentState.instances[currentInstance.id]; + if (currentInstanceState !== undefined) { + if (currentInstanceState !== currentInstance) { + return true; + } + } else { + return true; + } + } + } else { + return true; + } + + return false; + } + constructor() { - this.stateSubject = new BehaviorSubject(EMPTY_STATE); + this.stateUpdateSubject = new BehaviorSubject({state: EMPTY_STATE, change: {type: Actions.NONE}}); } - public getStoreObservable(): Observable { + public getStoreObservable(): Observable { return new Observable ((observer) => { - this.stateSubject.subscribe(observer); - observer.next(this.stateSubject.value); + this.stateUpdateSubject.subscribe(observer); + observer.next(this.stateUpdateSubject.value); }); } public getState() { - return this.stateSubject.value; + return this.stateUpdateSubject.value.state; } - public addInstancesToState(instances: Array) { + public addInstancesToState(instances: Array, calculateDiff= false) { const newState: State = instances.reduce((accumulator: State, currentValue: Instance) => { return StoreService.addNewInstanceToState(accumulator, currentValue); }, EMPTY_STATE); - // maybe calculate diff before - this.stateSubject.next(newState); + + const changed = calculateDiff ? StoreService.stateHasChanged(this.stateUpdateSubject.value.state, instances) : true; + + if (changed) { + this.stateUpdateSubject.next({state: newState, change: {type: Actions.ADD, elements: instances}}); + } } + + public addInstanceToState(instance: Instance) { - const newState = StoreService.addNewInstanceToState(this.stateSubject.getValue(), instance); + const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); // maybe calculate diff before - this.stateSubject.next(newState); + this.stateUpdateSubject.next({state: newState, change: {type: Actions.ADD, elements: [instance]}}); } - public removeFromState(instance: Instance) { - + public changeInstanceState(instance: Instance) { + const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); + // maybe calculate diff before + this.stateUpdateSubject.next({state: newState, change: {type: Actions.CHANGE, elements: [instance]}}); } + public removeFromState(instance: Instance) { + const newState = StoreService.removeInstanceFromState(this.stateUpdateSubject.value.state, instance); + // maybe calculate diff before + this.stateUpdateSubject.next({state: newState, change: {type: Actions.DELETE, elements: [instance]}}); + } } From f2b4f1b8496557ad76d9740c09cdb792ff7b2354 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 11:45:39 +0100 Subject: [PATCH 08/36] fixed bug in socket service which permits handling of event payloads --- client/src/app/api/api/socket.service.ts | 15 ++++++++------- client/src/app/model/models/instance.ts | 8 ++++---- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 9edc476b..c7576814 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -139,13 +139,14 @@ export class SocketService { * @param e */ private socketOnMessage(e: MessageEvent) { + console.log('received socket message', e); try { const msg: RegistryEvent = JSON.parse(e.data); if (objectIsMessage(msg)) { - + console.log('received socket message is message', msg); const {event, toSend} = this.getEventAndPayload(msg); - + console.log('parsed event and payload', event, toSend); const relevantSubject: Subject = this.observers[event]; if (relevantSubject) { relevantSubject.next(toSend); @@ -170,9 +171,9 @@ export class SocketService { let toSend: any; let event: EventType; - if (msg.eventType === EventTypeEnum.NumbersChangedEvent) { + const payload: any = msg.payload; - const payload: NumbersChanged = msg.payload; + if (msg.eventType === EventTypeEnum.NumbersChangedEvent) { if (payloadIsNumbersChanged(payload)) { toSend = payload.newNumber; @@ -187,12 +188,12 @@ export class SocketService { event = EventTypeEnum.InstanceNumbersCrawler; break; } - } else { if (payloadIsInstanceLink(payload) || payloadIsDockerOperationError(payload) || objIsInstance(payload)) { - toSend = payload; + } } else { + if (objIsInstance(payload.instance)) { + toSend = payload.instance; event = msg.eventType; } } - } return {event, toSend}; } diff --git a/client/src/app/model/models/instance.ts b/client/src/app/model/models/instance.ts index d05ed9e3..250c763f 100644 --- a/client/src/app/model/models/instance.ts +++ b/client/src/app/model/models/instance.ts @@ -58,10 +58,10 @@ export const StateEnum = { }; export function objIsInstance(obj: any): obj is Instance { - return (obj.host !== undefined && typeof obj.host === 'string' && - obj.portNumber !== undefined && typeof obj.portNumber === 'number' && - obj.name !== undefined && typeof obj.name === 'string' && - obj.componentType !== undefined && obj.componentType in ComponentTypeEnum); + return (obj.host !== undefined && typeof obj.host === 'string' && + obj.portNumber !== undefined && typeof obj.portNumber === 'number' && + obj.name !== undefined && typeof obj.name === 'string' && + obj.componentType !== undefined && obj.linksFrom !== undefined && obj.linksTo !== undefined); } From 749a84f9327f70078420d4c711ea361419342164 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 14:05:43 +0100 Subject: [PATCH 09/36] alpha version of network visualization ( no edge remove) --- .../graph-view/graph-view.service.ts | 48 +++++++++++++++++++ .../graph-view/graph-view.component.ts | 35 +++++++++----- client/src/app/model/model.service.ts | 1 + 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts index c6f1a8d0..a66e12c8 100644 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -1,11 +1,59 @@ import {Injectable} from '@angular/core'; import {ModelService} from '../../model/model.service'; +import { Instance } from 'src/app/model/models/instance'; +import { BehaviorSubject, Observable} from 'rxjs'; +import * as cytoscape from 'cytoscape'; +import { InstanceLink } from 'src/app/model/models/instanceLink'; +interface NodeEdgeMap { + nodes: Array; + edges: Array; + } +const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', + 'WebApp': '../../../assets/images/webapp.png', + 'WebApi': '../../../assets/images/webapi.png', + 'ElasticSearch': '../../../assets/images/webapi.png'}; @Injectable({ providedIn: 'root' }) export class GraphViewService { + private elementProvider: BehaviorSubject>; constructor(private modelService: ModelService) { + this.elementProvider = new BehaviorSubject>([]); + + this.modelService.getObservableForInstances().subscribe((instances: Array) => { + console.log('received observable update in graph service', instances); + if (instances !== undefined) { + console.log('received new instance', instances); + const newElements: NodeEdgeMap = instances.reduce( + ( accumulator: NodeEdgeMap, value: Instance) => { + accumulator.nodes.push({group: 'nodes', data: {id: '' + value.id, name: value.name, image: TYPE_TO_IMG[value.componentType]}}); + const outEdges: Array = this.mapLinksToEdges(value.linksFrom); + const inEdges: Array = this.mapLinksToEdges(value.linksTo); + accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); + + return accumulator; + }, {nodes: [], edges: []} + ); + const eles: Array = newElements.nodes.concat(newElements.edges); + console.log('parsed instance to eles', eles); + this.elementProvider.next(eles); + } + }); + } + + private mapLinksToEdges(links: Array): Array { + const edges: Array = links.map((edgeVal) => { + return {data: {id: edgeVal.idFrom + '_' + edgeVal.idTo, source: edgeVal.idFrom, target: edgeVal.idTo}}; + }); + return edges; + } + + public getElementObservable(): Observable> { + return new Observable((observer) => { + this.elementProvider.subscribe(observer); + observer.next(this.elementProvider.value); + }); } } diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts index ba10f687..da3f2434 100644 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts @@ -1,8 +1,6 @@ import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; import * as cytoscape from 'cytoscape'; -import {ModelService} from '../../../model/model.service'; import {GraphViewService} from '../graph-view.service'; -import {Instance} from '../../../model/models/instance'; @Component({ selector: 'app-graph-view', @@ -13,7 +11,7 @@ export class GraphViewComponent implements OnInit { @ViewChild('cy') cyDiv: ElementRef; private cy: cytoscape.Core; - constructor(private graphViewService: GraphViewService, private modelService: ModelService) { + constructor(private graphViewService: GraphViewService) { } @@ -24,18 +22,31 @@ export class GraphViewComponent implements OnInit { container: this.cyDiv.nativeElement, // container to render in elements: [ // list of graph elements to start with ], + layout: { + name: 'preset' + }, + style: [{ + selector: 'node', + style: { + label: 'data(name)', + 'background-image': 'data(image)', + 'width': '70%', + 'height': '70%', + 'background-opacity': 0, + + 'background-fit': 'contain', + 'background-clip': 'none', + } + } + ] }); - this.modelService.getObservableForInstances().subscribe((instances: Array) => { - if (instances !== undefined) { - console.log('received new instance', instances); - instances.forEach((instance) => { - // this.cy.add({group: 'nodes', data: {id: '' + instance.id}}); - const ele: cytoscape.ElementDefinition = {data: {id: '' + instance.id}}; - console.log('trying to add element', ele); - this.cy.add(ele); - }); + + this.graphViewService.getElementObservable().subscribe((newElements: Array) => { + if (newElements) { + this.cy.add(newElements); } }); + } } diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index fda3cb43..9029de3e 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -81,6 +81,7 @@ export class ModelService { this.updateAllInstances(); // register for event updates this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { + console.log('received instance added event', newInstance); this.storeService.addInstanceToState(newInstance); }); From 14f258acb1f4771b3a540f079a727341f4bb313e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Fri, 23 Nov 2018 14:09:21 +0100 Subject: [PATCH 10/36] added elasticsearch logo --- .../dashboard/graph-view/graph-view.service.ts | 2 +- client/src/assets/images/Elasticsearch.png | Bin 0 -> 947 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 client/src/assets/images/Elasticsearch.png diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts index a66e12c8..167232e4 100644 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -12,7 +12,7 @@ interface NodeEdgeMap { const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', 'WebApp': '../../../assets/images/webapp.png', 'WebApi': '../../../assets/images/webapi.png', - 'ElasticSearch': '../../../assets/images/webapi.png'}; + 'ElasticSearch': '../../../assets/images/Elasticsearch.png'}; @Injectable({ providedIn: 'root' }) diff --git a/client/src/assets/images/Elasticsearch.png b/client/src/assets/images/Elasticsearch.png new file mode 100644 index 0000000000000000000000000000000000000000..a542d27054ac50d5ab8b289c48e8e997d15c496e GIT binary patch literal 947 zcmV;k15EshP)LVjZcyLAk+jgVGz& z6Et&zP9@ef-9$(%3Mc4v&8D2dmDA4*QZ?k;{!Z-lKZ#{x^YUZ9zikqw6bRROA%2<> zNd!a^0g*&NBoPov1Vj>nmtA*2RcQtQ`ZEH6R{-#);gSOYJOIER0Lo-~EPeN}^<+|2 zsTT1LKW~|C`xOB0^(UDge>2_lk=7)sDjfj866M@@Z0ZgG3eE`gF6lzfd#?@s%Xi%_ zhb(WB@U_x%ZoM=>M@QDe0A91-+>R3f%#-Qy-sWod6hKv}j-GD;2?87g zzo;rLY%XStBz(OJ#$PO7=oBI|dHq--2?doA2+|C7UsaWks24a#(uJU*(~a8agb}rG zYS}50A{GQVP8IkauHyQ-6_E-$GsK5{6>CZOD;C2TA~ z54KfFtPQq6UH;${MUgb<@*7)ngS9Re`WQ)PhU3X>&T%7(B%e#tzFBbGzwapkOKG|H zdD3_?bN+RfWRgJdCGEBw=UpXzmvrE`2}RP0qoIyiaWqSj)VK^BC!O3> z4;(yhm{3{ncf&+dt_PT0#$2tex8A5M_p^^1p90IIu|sa_b8_Xnao6n`n=xsH;TtnU z6H&&JFihDdj~zl5Ww-k_%k_NjV?;up!}C7wEMMZW&fepiC(XG^q#Z%p$L)5uD zMJlQ;%u!MS=Zrg2QFR2VEGHG_c+R^$iHc#2G7 Date: Fri, 30 Nov 2018 10:22:53 +0100 Subject: [PATCH 11/36] using parameterized types in socket service --- client/src/app/model/model.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index 9029de3e..7deb9fb2 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -80,12 +80,12 @@ export class ModelService { private initInstances() { this.updateAllInstances(); // register for event updates - this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { + this.socketService.subscribeForEvent(EventTypeEnum.InstanceAddedEvent).subscribe((newInstance: Instance) => { console.log('received instance added event', newInstance); this.storeService.addInstanceToState(newInstance); }); - this.socketService.subscribeForEvent(EventTypeEnum.InstanceRemovedEvent).subscribe((removedInstance: Instance) => { + this.socketService.subscribeForEvent(EventTypeEnum.InstanceRemovedEvent).subscribe((removedInstance: Instance) => { this.storeService.removeFromState(removedInstance); }); } From d34cb44275c946ee81340a3ea0d366a464e01827 Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer Date: Mon, 3 Dec 2018 14:49:07 +0100 Subject: [PATCH 12/36] publishing a change object instead of a plain array of changed objects to enable the consumer to destinct the different update kinds. --- client/src/app/model/model.service.ts | 14 +++++++++----- client/src/app/model/store.service.ts | 6 +++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index 7deb9fb2..8414a81d 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -4,7 +4,7 @@ import {ApiService} from '../api/api/api.service'; import {ComponentType, Instance} from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; -import {StateUpdate, StoreService} from './store.service'; +import {StateUpdate, Change, StoreService, Actions} from './store.service'; import {BehaviorSubject, Observable} from 'rxjs'; @@ -13,12 +13,12 @@ import {BehaviorSubject, Observable} from 'rxjs'; }) export class ModelService { - private readonly instanceSubject: BehaviorSubject>; + private readonly instanceSubject: BehaviorSubject; private readonly instanceIdSubjects: {[compType: string]: BehaviorSubject>}; private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { - this.instanceSubject = new BehaviorSubject>([]); + this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); this.instanceIdSubjects = { 'Crawler': new BehaviorSubject>([]), @@ -52,7 +52,7 @@ export class ModelService { // this.instanceSubjects[compType].next(comps); // }); - this.instanceSubject.next(state.change.elements); + this.instanceSubject.next(state.change); }); this.socketService.initSocket().then(() => { @@ -88,10 +88,14 @@ export class ModelService { this.socketService.subscribeForEvent(EventTypeEnum.InstanceRemovedEvent).subscribe((removedInstance: Instance) => { this.storeService.removeFromState(removedInstance); }); + // TODO: after interface changes in ir we will receive a tuple of instances which are now linked + this.socketService.subscribeForEvent<>(EventTypeEnum.LinkAddedEvent).subscribe(() => {}); + + this.socketService.subscribeForEvent<>(EventTypeEnum.LinkStateChangedEvent).subscribe(() => {}); } public getObservableForInstances() { - return new Observable>((observer) => { + return new Observable((observer) => { this.instanceSubject.subscribe(observer); observer.next(this.instanceSubject.value); diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 518e7253..363ee4c2 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -14,7 +14,11 @@ export interface State { } export interface StateUpdate { state: State; - change: {type: Actions; elements?: Array}; + change: Change; +} +export interface Change { + type: Actions; + elements?: Array; } export const EMPTY_STATE = {instances: {}, instancesByType: {'Crawler': [], 'WebApi': [], 'WebApp': [], 'ElasticSearch': []}}; From a17ba99efdaea9cc2b742b04b9781643ca549379 Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer Date: Mon, 3 Dec 2018 14:49:32 +0100 Subject: [PATCH 13/36] graph service and component are now able to handle remove of elements --- .../graph-view/graph-view.service.ts | 68 ++++++++++++++----- .../graph-view/graph-view.component.ts | 8 +++ 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts index 167232e4..1ab93d3b 100644 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -1,9 +1,10 @@ import {Injectable} from '@angular/core'; import {ModelService} from '../../model/model.service'; import { Instance } from 'src/app/model/models/instance'; -import { BehaviorSubject, Observable} from 'rxjs'; +import { BehaviorSubject, Observable, Subject} from 'rxjs'; import * as cytoscape from 'cytoscape'; import { InstanceLink } from 'src/app/model/models/instanceLink'; +import { Change, Actions } from 'src/app/model/store.service'; interface NodeEdgeMap { nodes: Array; @@ -18,31 +19,56 @@ const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', }) export class GraphViewService { private elementProvider: BehaviorSubject>; + private elementRemover: Subject>; constructor(private modelService: ModelService) { this.elementProvider = new BehaviorSubject>([]); + this.elementRemover = new BehaviorSubject>([]); - this.modelService.getObservableForInstances().subscribe((instances: Array) => { - console.log('received observable update in graph service', instances); - if (instances !== undefined) { - console.log('received new instance', instances); - const newElements: NodeEdgeMap = instances.reduce( - ( accumulator: NodeEdgeMap, value: Instance) => { - accumulator.nodes.push({group: 'nodes', data: {id: '' + value.id, name: value.name, image: TYPE_TO_IMG[value.componentType]}}); - const outEdges: Array = this.mapLinksToEdges(value.linksFrom); - const inEdges: Array = this.mapLinksToEdges(value.linksTo); - accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); - - return accumulator; - }, {nodes: [], edges: []} - ); - const eles: Array = newElements.nodes.concat(newElements.edges); - console.log('parsed instance to eles', eles); - this.elementProvider.next(eles); + this.modelService.getObservableForInstances().subscribe((change: Change) => { + if (change.elements !== undefined) { + switch (change.type) { + case Actions.ADD: + this.addElements(change.elements); + break; + case Actions.DELETE: + this.removeElements(change.elements); + } } }); } + private removeElements(instances: Array) { + const ids = instances.map((value: Instance) => '' + value.id); + this.elementRemover.next(ids); + } + + private addElements(instances: Array) { + console.log('received new instance', instances); + const newElements: NodeEdgeMap = instances.reduce( + ( accumulator: NodeEdgeMap, value: Instance) => { + + accumulator.nodes.push({ + group: 'nodes', + data: { + id: '' + value.id, + name: value.name, + image: TYPE_TO_IMG[value.componentType] + } + }); + + const outEdges: Array = this.mapLinksToEdges(value.linksFrom); + const inEdges: Array = this.mapLinksToEdges(value.linksTo); + accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); + + return accumulator; + }, {nodes: [], edges: []} + ); + const eles: Array = newElements.nodes.concat(newElements.edges); + console.log('parsed instance to eles', eles); + this.elementProvider.next(eles); + } + private mapLinksToEdges(links: Array): Array { const edges: Array = links.map((edgeVal) => { return {data: {id: edgeVal.idFrom + '_' + edgeVal.idTo, source: edgeVal.idFrom, target: edgeVal.idTo}}; @@ -56,4 +82,10 @@ export class GraphViewService { observer.next(this.elementProvider.value); }); } + + public getElementRemoveObservable(): Observable> { + return new Observable((observer) => { + this.elementRemover.subscribe(observer); + }); + } } diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts index da3f2434..35095044 100644 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts @@ -47,6 +47,14 @@ export class GraphViewComponent implements OnInit { } }); + this.graphViewService.getElementRemoveObservable().subscribe((ids: Array) => { + if (ids) { + for (let i = 0; i < ids.length; i++) { + this.cy.remove(this.cy.getElementById(ids[i])); + } + } + }); + } } From 3a58c8a3756e8f5e38f8b3192b383ab6a25fd94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 13 Dec 2018 11:32:30 +0100 Subject: [PATCH 14/36] uncommented unfinished code --- client/package-lock.json | 3526 ++++++++++++------------- client/src/app/model/model.service.ts | 4 +- 2 files changed, 1765 insertions(+), 1765 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index fd02e825..326bd71e 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -54,7 +54,7 @@ "semver": "5.5.1", "source-map-loader": "0.2.4", "source-map-support": "0.5.9", - "speed-measure-webpack-plugin": "^1.2.3", + "speed-measure-webpack-plugin": "1.2.3", "stats-webpack-plugin": "0.7.0", "style-loader": "0.23.0", "stylus": "0.54.5", @@ -75,12 +75,12 @@ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "mini-css-extract-plugin": { @@ -89,9 +89,9 @@ "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "loader-utils": "1.1.0", + "schema-utils": "1.0.0", + "webpack-sources": "1.2.0" } }, "semver": { @@ -112,8 +112,8 @@ "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" } } } @@ -185,7 +185,7 @@ "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.0.4.tgz", "integrity": "sha512-QfFikT0FzYNMjdVg0LWTBijdu9JDJyzejnhCFlXxv+KR4zolpRK98/rU7CFW1Fg2jjL3/yL9PT1sf5I0fTJZYA==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/cdk": { @@ -193,8 +193,8 @@ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.0.4.tgz", "integrity": "sha512-4KbuiVLonwNwzwgJqKOvjqXfXKrdboPzFwk4vGruQV/EhGh6L8V4gy+ESS4seUuYYsMA9k+ijEeO9xUX+pAcZw==", "requires": { - "parse5": "^5.0.0", - "tslib": "^1.7.1" + "parse5": "5.1.0", + "tslib": "1.9.3" }, "dependencies": { "parse5": { @@ -236,7 +236,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.0.4.tgz", "integrity": "sha512-akQojdqY/RBlItkDWAPI3k0Llk1wnbAp+f47yySi3cgQz9SaZ1/RLNWZV84I/cKrksb4ehorT/lTqRBojsAD1A==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/compiler": { @@ -244,7 +244,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.0.4.tgz", "integrity": "sha512-ExDhH1cJkuJkUsgNRZyZBse0a7wWkQyG5O8HONi3Rzig9dalFEuve9jD04zfA1Jx1GTXhovqtGnF72x4kw0V8Q==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/compiler-cli": { @@ -254,15 +254,15 @@ "dev": true, "requires": { "canonical-path": "1.0.0", - "chokidar": "^1.4.2", - "convert-source-map": "^1.5.1", - "dependency-graph": "^0.7.2", - "magic-string": "^0.25.0", - "minimist": "^1.2.0", - "reflect-metadata": "^0.1.2", - "shelljs": "^0.8.1", - "source-map": "^0.6.1", - "tslib": "^1.9.0", + "chokidar": "1.7.0", + "convert-source-map": "1.6.0", + "dependency-graph": "0.7.2", + "magic-string": "0.25.1", + "minimist": "1.2.0", + "reflect-metadata": "0.1.12", + "shelljs": "0.8.3", + "source-map": "0.6.1", + "tslib": "1.9.3", "yargs": "9.0.1" }, "dependencies": { @@ -278,8 +278,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, "arr-diff": { @@ -288,7 +288,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "arr-flatten": "1.1.0" } }, "array-unique": { @@ -303,9 +303,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" } }, "camelcase": { @@ -320,15 +320,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" } }, "cliui": { @@ -337,9 +337,9 @@ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" }, "dependencies": { "string-width": { @@ -348,9 +348,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } } } @@ -361,9 +361,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "execa": { @@ -372,13 +372,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "expand-brackets": { @@ -387,7 +387,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-posix-bracket": "0.1.1" } }, "extglob": { @@ -396,7 +396,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "glob-parent": { @@ -405,7 +405,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -420,7 +420,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } }, "kind-of": { @@ -429,7 +429,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } }, "load-json-file": { @@ -438,10 +438,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" } }, "mem": { @@ -450,7 +450,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "micromatch": { @@ -459,19 +459,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" } }, "minimist": { @@ -486,9 +486,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" } }, "path-type": { @@ -497,7 +497,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^2.0.0" + "pify": "2.3.0" } }, "pify": { @@ -512,9 +512,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" } }, "read-pkg-up": { @@ -523,8 +523,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" } }, "source-map": { @@ -539,8 +539,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" }, "dependencies": { "is-fullwidth-code-point": { @@ -555,7 +555,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -584,19 +584,19 @@ "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", "dev": true, "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^7.0.0" + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" } }, "yargs-parser": { @@ -605,7 +605,7 @@ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -615,7 +615,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.0.4.tgz", "integrity": "sha512-17SSmCz1wQoZKnVHF/T8UkWYPpDm5kPyoc1okkTTv8ZA2EAMMuZFFnRSAxEL5i7mNB9z5CvRqF2tRx/DbgbIRA==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/forms": { @@ -623,7 +623,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.0.4.tgz", "integrity": "sha512-W3nN9n1VY9On9+9f7PDRbzJUg+mMq1bjkhWsk/b7DfaYdmlzpG+Wd6OfArob2edsqGqH1dvTM8q8aGbWiFZ7dA==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/http": { @@ -631,7 +631,7 @@ "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.0.4.tgz", "integrity": "sha512-oUGT7xS7FZYajuHq0DP6MgahacB5sJTRgxiUU4uhQ/mqV7aREODVJJgw7oHDhM7Cnyzzo0B9D0zpEljKmeCLWQ==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/language-service": { @@ -645,7 +645,7 @@ "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.0.4.tgz", "integrity": "sha512-LoDtg6srT9WPEn4bsiJqU1uXJ6bd28FtSc7prDYaPb5ogTj1zaur4LWJ7GjPK1haq4rW4W2NMTuayIsqpdGfSA==", "requires": { - "tslib": "^1.7.1" + "tslib": "1.9.3" } }, "@angular/platform-browser": { @@ -653,7 +653,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.0.4.tgz", "integrity": "sha512-4brYZZgsCJk1/a6JoSwaiVWO9+/T4iyE27dAgstao1nOf/jrBNKW2HnZtkWZmCCBK0WIk15wlB0Xr87OZbjNVA==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/platform-browser-dynamic": { @@ -661,7 +661,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.0.4.tgz", "integrity": "sha512-k1I53zIg8YWhtQizLfq/tWrUUdY5vHV8pGHyt0/UTGDqat5TORd6LDFfzCSux0r3qZujCOGNi9f4/AbyV8B9lw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@angular/router": { @@ -669,7 +669,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.0.4.tgz", "integrity": "sha512-nt1jJsxN+JmYZ6URamMdULUpH4aHdnNVKjWtjDI0OpdZvPx7PMFD8cfc92q0tavy2KqqexcceIb4BIC965gtpA==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@babel/code-frame": { @@ -678,7 +678,7 @@ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "7.0.0" } }, "@babel/generator": { @@ -687,11 +687,11 @@ "integrity": "sha512-/BM2vupkpbZXq22l1ALO7MqXJZH2k8bKVv8Y+pABFnzWdztDB/ZLveP5At21vLz5c2YtSE6p7j2FZEsqafMz5Q==", "dev": true, "requires": { - "@babel/types": "^7.0.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.10", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "@babel/types": "7.0.0", + "jsesc": "2.5.1", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" }, "dependencies": { "jsesc": { @@ -708,9 +708,9 @@ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.1.0", + "@babel/types": "7.0.0" } }, "@babel/helper-get-function-arity": { @@ -719,7 +719,7 @@ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.0.0" } }, "@babel/helper-split-export-declaration": { @@ -728,7 +728,7 @@ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.0.0" } }, "@babel/highlight": { @@ -737,9 +737,9 @@ "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", "dev": true, "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "chalk": "2.4.1", + "esutils": "2.0.2", + "js-tokens": "4.0.0" }, "dependencies": { "js-tokens": { @@ -762,9 +762,9 @@ "integrity": "sha512-yZ948B/pJrwWGY6VxG6XRFsVTee3IQ7bihq9zFpM00Vydu6z5Xwg0C3J644kxI9WOTzd+62xcIsQ+AT1MGhqhA==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.1.0", + "@babel/types": "7.0.0" } }, "@babel/traverse": { @@ -773,15 +773,15 @@ "integrity": "sha512-bwgln0FsMoxm3pLOgrrnGaXk18sSM9JNf1/nHC/FksmNGFbYnPWY4GYCfLxyP1KRmfsxqkRpfoa6xr6VuuSxdw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.0.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.0.0", - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "debug": "^3.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.10" + "@babel/code-frame": "7.0.0", + "@babel/generator": "7.0.0", + "@babel/helper-function-name": "7.1.0", + "@babel/helper-split-export-declaration": "7.0.0", + "@babel/parser": "7.1.0", + "@babel/types": "7.0.0", + "debug": "3.2.5", + "globals": "11.7.0", + "lodash": "4.17.10" }, "dependencies": { "debug": { @@ -790,7 +790,7 @@ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "globals": { @@ -813,9 +813,9 @@ "integrity": "sha512-5tPDap4bGKTLPtci2SUl/B7Gv8RnuJFuQoWx26RJobS0fFrz4reUA3JnwIM+HVHEmWE0C1mzKhDtTp8NsWY02Q==", "dev": true, "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.10", - "to-fast-properties": "^2.0.0" + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "2.0.0" }, "dependencies": { "to-fast-properties": { @@ -831,7 +831,7 @@ "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.0.0.tgz", "integrity": "sha512-jWVHRDUYppOSvzclP9d3lVWGUO+y0X9W6jdfyYehDkJCY0MFgtwefLYMtQ/NJ4niPzm2d/zZn+Bte48iIn0nKw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "@ngtools/webpack": { @@ -897,7 +897,7 @@ "integrity": "sha512-2ZOKrxb8bKRmP/po5ObYnRDgFE4i+lQiEB27bAMmtMWLgJSqlIDqlLx6S0IRorpOmOPRQ6O80NujTmQAtBkeNw==", "dev": true, "requires": { - "@types/jasmine": "*" + "@types/jasmine": "2.8.11" } }, "@types/node": { @@ -927,7 +927,7 @@ "@webassemblyjs/helper-module-context": "1.7.6", "@webassemblyjs/helper-wasm-bytecode": "1.7.6", "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "mamacro": "0.0.3" } }, "@webassemblyjs/floating-point-hex-parser": { @@ -969,7 +969,7 @@ "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", "dev": true, "requires": { - "mamacro": "^0.0.3" + "mamacro": "0.0.3" } }, "@webassemblyjs/helper-wasm-bytecode": { @@ -996,7 +996,7 @@ "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", "dev": true, "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -1081,7 +1081,7 @@ "@webassemblyjs/helper-code-frame": "1.7.6", "@webassemblyjs/helper-fsm": "1.7.6", "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "mamacro": "0.0.3" } }, "@webassemblyjs/wast-printer": { @@ -1119,7 +1119,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "~2.1.18", + "mime-types": "2.1.19", "negotiator": "0.6.1" } }, @@ -1135,7 +1135,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "^5.0.0" + "acorn": "5.7.3" } }, "adm-zip": { @@ -1156,7 +1156,7 @@ "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "es6-promisify": "5.0.0" } }, "ajv": { @@ -1165,10 +1165,10 @@ "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" }, "dependencies": { "fast-deep-equal": { @@ -1203,9 +1203,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" }, "dependencies": { "kind-of": { @@ -1214,7 +1214,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1255,7 +1255,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.2" } }, "anymatch": { @@ -1264,8 +1264,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" } }, "app-root-path": { @@ -1280,7 +1280,7 @@ "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "default-require-extensions": "2.0.0" } }, "aproba": { @@ -1295,8 +1295,8 @@ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "argparse": { @@ -1305,7 +1305,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "arr-diff": { @@ -1350,7 +1350,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -1390,7 +1390,7 @@ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "safer-buffer": "2.1.2" } }, "asn1.js": { @@ -1399,9 +1399,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "assert": { @@ -1485,12 +1485,12 @@ "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", "dev": true, "requires": { - "browserslist": "^4.1.0", - "caniuse-lite": "^1.0.30000884", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.2", - "postcss-value-parser": "^3.2.3" + "browserslist": "4.3.4", + "caniuse-lite": "1.0.30000907", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.5", + "postcss-value-parser": "3.3.1" } }, "aws-sign2": { @@ -1511,9 +1511,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" }, "dependencies": { "ansi-styles": { @@ -1528,11 +1528,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "supports-color": { @@ -1549,14 +1549,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" } }, "babel-messages": { @@ -1565,7 +1565,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "babel-runtime": "6.26.0" } }, "babel-runtime": { @@ -1574,8 +1574,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" } }, "babel-template": { @@ -1584,11 +1584,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" } }, "babel-traverse": { @@ -1597,15 +1597,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" } }, "babel-types": { @@ -1614,10 +1614,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" } }, "babylon": { @@ -1644,13 +1644,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -1659,7 +1659,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -1668,7 +1668,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -1677,7 +1677,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -1686,9 +1686,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -1724,7 +1724,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "better-assert": { @@ -1761,7 +1761,7 @@ "dev": true, "optional": true, "requires": { - "inherits": "~2.0.0" + "inherits": "2.0.3" } }, "blocking-proxy": { @@ -1770,7 +1770,7 @@ "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" }, "dependencies": { "minimist": { @@ -1800,15 +1800,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "~1.0.4", + "content-type": "1.0.4", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", + "depd": "1.1.2", + "http-errors": "1.6.3", "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", + "on-finished": "2.3.0", "qs": "6.5.2", "raw-body": "2.3.3", - "type-is": "~1.6.16" + "type-is": "1.6.16" } }, "bonjour": { @@ -1817,12 +1817,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" } }, "bootstrap": { @@ -1836,7 +1836,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -1846,16 +1846,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -1864,7 +1864,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1881,12 +1881,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -1895,9 +1895,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -1906,10 +1906,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -1918,8 +1918,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.0.6" } }, "browserify-sign": { @@ -1928,13 +1928,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" } }, "browserify-zlib": { @@ -1943,7 +1943,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "~1.0.5" + "pako": "1.0.6" } }, "browserslist": { @@ -1952,9 +1952,9 @@ "integrity": "sha512-u5iz+ijIMUlmV8blX82VGFrB9ecnUg5qEt55CMZ/YJEhha+d8qpBfOFuutJ6F/VKRXjZoD33b6uvarpPxcl3RA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000899", - "electron-to-chromium": "^1.3.82", - "node-releases": "^1.0.1" + "caniuse-lite": "1.0.30000907", + "electron-to-chromium": "1.3.84", + "node-releases": "1.0.3" } }, "browserstack": { @@ -1963,7 +1963,7 @@ "integrity": "sha512-O8VMT64P9NOLhuIoD4YngyxBURefaSdR4QdhG8l6HZ9VxtU7jc3m6jLufFwKA5gaf7fetfB2TnRJnMxyob+heg==", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1" + "https-proxy-agent": "2.2.1" } }, "buffer": { @@ -1972,9 +1972,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" } }, "buffer-alloc": { @@ -1983,8 +1983,8 @@ "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "buffer-alloc-unsafe": "1.1.0", + "buffer-fill": "1.0.0" } }, "buffer-alloc-unsafe": { @@ -2047,19 +2047,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "bluebird": "3.5.1", + "chownr": "1.1.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.3", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "cache-base": { @@ -2068,15 +2068,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "callsite": { @@ -2099,8 +2099,8 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -2137,8 +2137,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "align-text": "0.1.4", + "lazy-cache": "1.0.4" } }, "chalk": { @@ -2147,9 +2147,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" } }, "chardet": { @@ -2164,19 +2164,19 @@ "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.2.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "lodash.debounce": "^4.0.8", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.5" + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "lodash.debounce": "4.0.8", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" } }, "chownr": { @@ -2191,7 +2191,7 @@ "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "cipher-base": { @@ -2200,8 +2200,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "circular-dependency-plugin": { @@ -2222,10 +2222,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -2234,7 +2234,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -2245,7 +2245,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -2262,7 +2262,7 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "2.0.0" } }, "cli-width": { @@ -2278,8 +2278,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", + "center-align": "0.1.3", + "right-align": "0.1.3", "wordwrap": "0.0.2" }, "dependencies": { @@ -2304,10 +2304,10 @@ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" } }, "co": { @@ -2328,12 +2328,12 @@ "integrity": "sha512-oO6vCkjqsVrEsmh58oNlnJkRXuA30hF8cdNAQV9DytEalDwyOFRvHMnlKFzmOStNerOmPGZU9GAHnBo4tGvtiQ==", "dev": true, "requires": { - "app-root-path": "^2.1.0", - "css-selector-tokenizer": "^0.7.0", - "cssauron": "^1.4.0", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.7", - "sprintf-js": "^1.1.1" + "app-root-path": "2.1.0", + "css-selector-tokenizer": "0.7.1", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.1.1" }, "dependencies": { "sprintf-js": { @@ -2350,8 +2350,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -2381,7 +2381,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "^4.5.0" + "lodash": "4.17.10" } }, "combined-stream": { @@ -2390,7 +2390,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "commander": { @@ -2435,7 +2435,7 @@ "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==", "dev": true, "requires": { - "mime-db": ">= 1.36.0 < 2" + "mime-db": "1.37.0" }, "dependencies": { "mime-db": { @@ -2452,13 +2452,13 @@ "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "2.0.15", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "1.0.1", "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "vary": "1.1.2" } }, "concat-map": { @@ -2473,10 +2473,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "connect": { @@ -2487,7 +2487,7 @@ "requires": { "debug": "2.6.9", "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "parseurl": "1.3.2", "utils-merge": "1.0.1" }, "dependencies": { @@ -2498,12 +2498,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" } }, "statuses": { @@ -2526,7 +2526,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "console-control-strings": { @@ -2559,7 +2559,7 @@ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "cookie": { @@ -2580,12 +2580,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -2600,14 +2600,14 @@ "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.5.0" } }, "core-js": { @@ -2627,10 +2627,10 @@ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0", - "require-from-string": "^2.0.1" + "is-directory": "0.3.1", + "js-yaml": "3.12.0", + "parse-json": "4.0.0", + "require-from-string": "2.0.2" }, "dependencies": { "parse-json": { @@ -2639,8 +2639,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } } } @@ -2651,8 +2651,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -2661,11 +2661,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -2674,12 +2674,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -2689,8 +2689,8 @@ "dev": true, "optional": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "lru-cache": "4.1.3", + "which": "1.3.1" } }, "crypto-browserify": { @@ -2699,17 +2699,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.0.6", + "randomfill": "1.0.4" } }, "css-parse": { @@ -2724,9 +2724,9 @@ "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "0.1.0", + "fastparse": "1.1.2", + "regexpu-core": "1.0.0" } }, "cssauron": { @@ -2735,7 +2735,7 @@ "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", "dev": true, "requires": { - "through": "X.X.X" + "through": "2.3.8" } }, "cssesc": { @@ -2750,7 +2750,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "custom-event": { @@ -2770,8 +2770,8 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.2.21.tgz", "integrity": "sha512-q6i3DNrSsczS4x3uDuZe6dKJEobxJjNyIYJgYckUo33okU38QQQUf9NfYo+IOooQrJ/gTIUTrfUmSJrcwnSeUA==", "requires": { - "heap": "^0.2.6", - "lodash.debounce": "^4.0.8" + "heap": "0.2.6", + "lodash.debounce": "4.0.8" } }, "dashdash": { @@ -2780,7 +2780,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "date-format": { @@ -2834,8 +2834,8 @@ "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", "dev": true, "requires": { - "execa": "^0.10.0", - "ip-regex": "^2.1.0" + "execa": "0.10.0", + "ip-regex": "2.1.0" } }, "default-require-extensions": { @@ -2844,7 +2844,7 @@ "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { - "strip-bom": "^3.0.0" + "strip-bom": "3.0.0" }, "dependencies": { "strip-bom": { @@ -2861,8 +2861,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2871,7 +2871,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2880,7 +2880,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2889,9 +2889,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -2902,12 +2902,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" }, "dependencies": { "globby": { @@ -2916,11 +2916,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "pify": { @@ -2963,8 +2963,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -2979,7 +2979,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "detect-node": { @@ -3006,9 +3006,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" } }, "dir-glob": { @@ -3017,8 +3017,8 @@ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "arrify": "1.0.1", + "path-type": "3.0.0" } }, "dns-equal": { @@ -3033,8 +3033,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "ip": "1.1.5", + "safe-buffer": "5.1.2" } }, "dns-txt": { @@ -3043,7 +3043,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "^1.0.0" + "buffer-indexof": "1.1.1" } }, "dom-serialize": { @@ -3052,10 +3052,10 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.2", + "void-elements": "2.0.1" } }, "domain-browser": { @@ -3070,10 +3070,10 @@ "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "ecc-jsbn": { @@ -3083,8 +3083,8 @@ "dev": true, "optional": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -3105,13 +3105,13 @@ "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.5", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emojis-list": { @@ -3132,7 +3132,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "engine.io": { @@ -3141,12 +3141,12 @@ "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "base64id": "1.0.0", "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" + "debug": "3.1.0", + "engine.io-parser": "2.1.3", + "ws": "3.3.3" }, "dependencies": { "debug": { @@ -3168,14 +3168,14 @@ "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.3", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", "yeast": "0.1.2" }, "dependencies": { @@ -3197,10 +3197,10 @@ "dev": true, "requires": { "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", + "arraybuffer.slice": "0.0.7", "base64-arraybuffer": "0.1.5", "blob": "0.0.5", - "has-binary2": "~1.0.2" + "has-binary2": "1.0.3" } }, "enhanced-resolve": { @@ -3209,9 +3209,9 @@ "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.1.0" } }, "ent": { @@ -3226,7 +3226,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -3235,7 +3235,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es6-promise": { @@ -3250,7 +3250,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "^4.0.3" + "es6-promise": "4.2.5" } }, "escape-html": { @@ -3271,11 +3271,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" }, "dependencies": { "source-map": { @@ -3285,7 +3285,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -3296,8 +3296,8 @@ "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" }, "dependencies": { "estraverse": { @@ -3320,7 +3320,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" }, "dependencies": { "estraverse": { @@ -3367,7 +3367,7 @@ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", "dev": true, "requires": { - "original": ">=0.0.5" + "original": "1.0.2" } }, "evp_bytestokey": { @@ -3376,8 +3376,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "execa": { @@ -3386,13 +3386,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" }, "dependencies": { "cross-spawn": { @@ -3401,11 +3401,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } } } @@ -3422,9 +3422,9 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" }, "dependencies": { "array-unique": { @@ -3439,7 +3439,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "^0.1.0" + "expand-range": "0.1.1" } }, "expand-range": { @@ -3448,8 +3448,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" + "is-number": "0.1.1", + "repeat-string": "0.2.2" } }, "is-number": { @@ -3472,13 +3472,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -3487,7 +3487,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -3496,7 +3496,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3507,7 +3507,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "^2.1.0" + "fill-range": "2.2.4" }, "dependencies": { "fill-range": { @@ -3516,11 +3516,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.1.1", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" } }, "is-number": { @@ -3529,7 +3529,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "isobject": { @@ -3547,7 +3547,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3558,36 +3558,36 @@ "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dev": true, "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.3", "content-disposition": "0.5.2", - "content-type": "~1.0.4", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", + "proxy-addr": "2.0.4", "qs": "6.5.2", - "range-parser": "~1.2.0", + "range-parser": "1.2.0", "safe-buffer": "5.1.2", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "statuses": "1.4.0", + "type-is": "1.6.16", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "array-flatten": { @@ -3610,8 +3610,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -3620,7 +3620,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -3631,9 +3631,9 @@ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" }, "dependencies": { "iconv-lite": { @@ -3642,7 +3642,7 @@ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } } } @@ -3653,14 +3653,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -3669,7 +3669,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -3678,7 +3678,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -3687,7 +3687,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -3696,7 +3696,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -3705,9 +3705,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -3748,7 +3748,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } }, "figgy-pudding": { @@ -3763,7 +3763,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "1.0.5" } }, "file-loader": { @@ -3772,8 +3772,8 @@ "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "1.1.0", + "schema-utils": "1.0.0" } }, "filename-regex": { @@ -3788,8 +3788,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" + "glob": "7.1.2", + "minimatch": "3.0.4" } }, "fill-range": { @@ -3798,10 +3798,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -3810,7 +3810,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3822,12 +3822,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" } }, "find-cache-dir": { @@ -3836,9 +3836,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" } }, "find-up": { @@ -3847,7 +3847,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "flush-write-stream": { @@ -3856,8 +3856,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "follow-redirects": { @@ -3866,7 +3866,7 @@ "integrity": "sha512-kssLorP/9acIdpQ2udQVTiCS5LQmdEz9mvdIfDcl1gYX2tPKFADHSyFdvJS040XdFsPzemWtgI3q8mFVCxtX8A==", "dev": true, "requires": { - "debug": "^3.1.0" + "debug": "3.1.0" }, "dependencies": { "debug": { @@ -3897,7 +3897,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "forever-agent": { @@ -3912,9 +3912,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "^0.4.0", + "asynckit": "0.4.0", "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "mime-types": "2.1.19" } }, "forwarded": { @@ -3929,7 +3929,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -3944,8 +3944,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs-access": { @@ -3954,7 +3954,7 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "^1.0.0" + "null-check": "1.0.0" } }, "fs-write-stream-atomic": { @@ -3963,10 +3963,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -3982,8 +3982,8 @@ "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" }, "dependencies": { "abbrev": { @@ -4009,8 +4009,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "delegates": "1.0.0", + "readable-stream": "2.3.6" } }, "balanced-match": { @@ -4023,7 +4023,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -4087,7 +4087,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "fs.realpath": { @@ -4102,14 +4102,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" } }, "glob": { @@ -4118,12 +4118,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-unicode": { @@ -4138,7 +4138,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": "2.1.2" } }, "ignore-walk": { @@ -4147,7 +4147,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "^3.0.4" + "minimatch": "3.0.4" } }, "inflight": { @@ -4156,8 +4156,8 @@ "dev": true, "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -4176,7 +4176,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "isarray": { @@ -4190,7 +4190,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -4203,8 +4203,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "minizlib": { @@ -4213,7 +4213,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "2.2.4" } }, "mkdirp": { @@ -4236,9 +4236,9 @@ "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" } }, "node-pre-gyp": { @@ -4247,16 +4247,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" } }, "nopt": { @@ -4265,8 +4265,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1.1.1", + "osenv": "0.1.5" } }, "npm-bundled": { @@ -4281,8 +4281,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" } }, "npmlog": { @@ -4291,10 +4291,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "number-is-nan": { @@ -4313,7 +4313,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-homedir": { @@ -4334,8 +4334,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "path-is-absolute": { @@ -4356,10 +4356,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "minimist": { @@ -4376,13 +4376,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "rimraf": { @@ -4391,7 +4391,7 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "safe-buffer": { @@ -4434,9 +4434,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -4445,7 +4445,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.1" } }, "strip-ansi": { @@ -4453,7 +4453,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-json-comments": { @@ -4468,13 +4468,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" } }, "util-deprecate": { @@ -4489,7 +4489,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "1.0.2" } }, "wrappy": { @@ -4510,10 +4510,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" } }, "gauge": { @@ -4522,14 +4522,14 @@ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" } }, "gaze": { @@ -4539,7 +4539,7 @@ "dev": true, "optional": true, "requires": { - "globule": "^1.0.0" + "globule": "1.2.1" } }, "get-caller-file": { @@ -4572,7 +4572,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "glob": { @@ -4581,12 +4581,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "glob-base": { @@ -4595,8 +4595,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" + "glob-parent": "2.0.0", + "is-glob": "2.0.1" }, "dependencies": { "glob-parent": { @@ -4605,7 +4605,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "^2.0.0" + "is-glob": "2.0.1" } }, "is-extglob": { @@ -4620,7 +4620,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -4631,8 +4631,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -4641,7 +4641,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -4658,12 +4658,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" } }, "globule": { @@ -4673,9 +4673,9 @@ "dev": true, "optional": true, "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + "glob": "7.1.2", + "lodash": "4.17.10", + "minimatch": "3.0.4" } }, "graceful-fs": { @@ -4696,10 +4696,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" }, "dependencies": { "source-map": { @@ -4708,7 +4708,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } }, "uglify-js": { @@ -4718,9 +4718,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" }, "dependencies": { "source-map": { @@ -4746,8 +4746,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" + "ajv": "5.5.2", + "har-schema": "2.0.0" }, "dependencies": { "ajv": { @@ -4756,10 +4756,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } } } @@ -4770,7 +4770,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "has-binary2": { @@ -4814,9 +4814,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -4825,8 +4825,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -4835,7 +4835,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -4846,8 +4846,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -4856,8 +4856,8 @@ "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", "dev": true, "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "heap": { @@ -4871,9 +4871,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.5", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hosted-git-info": { @@ -4888,10 +4888,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "html-entities": { @@ -4912,10 +4912,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "statuses": "1.4.0" } }, "http-parser-js": { @@ -4930,9 +4930,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "eventemitter3": "3.1.0", + "follow-redirects": "1.5.2", + "requires-port": "1.0.0" } }, "http-proxy-middleware": { @@ -4941,10 +4941,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", - "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.10", + "micromatch": "3.1.10" } }, "http-signature": { @@ -4953,9 +4953,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" } }, "https-browserify": { @@ -4970,8 +4970,8 @@ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" + "agent-base": "4.2.1", + "debug": "3.2.6" }, "dependencies": { "debug": { @@ -4980,7 +4980,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -4997,7 +4997,7 @@ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dev": true, "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ieee754": { @@ -5037,7 +5037,7 @@ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "import-from": "^2.1.0" + "import-from": "2.1.0" } }, "import-from": { @@ -5046,7 +5046,7 @@ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "import-local": { @@ -5055,8 +5055,8 @@ "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" }, "dependencies": { "find-up": { @@ -5065,7 +5065,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -5074,8 +5074,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -5084,7 +5084,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -5093,7 +5093,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -5108,7 +5108,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } } } @@ -5133,7 +5133,7 @@ "dev": true, "optional": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "indexof": { @@ -5148,8 +5148,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -5170,19 +5170,19 @@ "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", "dev": true, "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", + "ansi-escapes": "3.1.0", + "chalk": "2.4.1", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.10", "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "run-async": "2.3.0", + "rxjs": "6.3.3", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "through": "2.3.8" }, "dependencies": { "ansi-regex": { @@ -5203,8 +5203,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -5213,7 +5213,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -5224,8 +5224,8 @@ "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", "dev": true, "requires": { - "default-gateway": "^2.6.0", - "ipaddr.js": "^1.5.2" + "default-gateway": "2.7.2", + "ipaddr.js": "1.8.0" } }, "interpret": { @@ -5240,7 +5240,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.4.0" } }, "invert-kv": { @@ -5273,7 +5273,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5282,7 +5282,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5299,7 +5299,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { @@ -5314,7 +5314,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-data-descriptor": { @@ -5323,7 +5323,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5332,7 +5332,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5343,9 +5343,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -5374,7 +5374,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "^2.0.0" + "is-primitive": "2.0.0" } }, "is-extendable": { @@ -5395,7 +5395,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -5404,7 +5404,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-glob": { @@ -5413,7 +5413,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -5422,7 +5422,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -5431,7 +5431,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -5448,7 +5448,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -5457,7 +5457,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-object": { @@ -5466,7 +5466,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-posix-bracket": { @@ -5529,7 +5529,7 @@ "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", "dev": true, "requires": { - "buffer-alloc": "^1.2.0" + "buffer-alloc": "1.2.0" } }, "isexe": { @@ -5556,20 +5556,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.1", + "wordwrap": "1.0.0" }, "dependencies": { "glob": { @@ -5578,11 +5578,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "has-flag": { @@ -5597,7 +5597,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "1.0.0" } } } @@ -5608,18 +5608,18 @@ "integrity": "sha512-8W5oeAGWXhtTJjAyVfvavOLVyZCTNCKsyF6GON/INKlBdO7uJ/bv3qnPj5M6ERKzmMCJS1kntnjjGuJ86fn3rQ==", "dev": true, "requires": { - "async": "^2.6.1", - "compare-versions": "^3.2.1", - "fileset": "^2.0.3", - "istanbul-lib-coverage": "^2.0.1", - "istanbul-lib-hook": "^2.0.1", - "istanbul-lib-instrument": "^3.0.0", - "istanbul-lib-report": "^2.0.2", - "istanbul-lib-source-maps": "^2.0.1", - "istanbul-reports": "^2.0.1", - "js-yaml": "^3.12.0", - "make-dir": "^1.3.0", - "once": "^1.4.0" + "async": "2.6.1", + "compare-versions": "3.4.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "2.0.1", + "istanbul-lib-hook": "2.0.1", + "istanbul-lib-instrument": "3.0.0", + "istanbul-lib-report": "2.0.2", + "istanbul-lib-source-maps": "2.0.1", + "istanbul-reports": "2.0.1", + "js-yaml": "3.12.0", + "make-dir": "1.3.0", + "once": "1.4.0" }, "dependencies": { "async": { @@ -5628,7 +5628,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.10" } }, "istanbul-lib-coverage": { @@ -5643,13 +5643,13 @@ "integrity": "sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ==", "dev": true, "requires": { - "@babel/generator": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/template": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", - "istanbul-lib-coverage": "^2.0.1", - "semver": "^5.5.0" + "@babel/generator": "7.0.0", + "@babel/parser": "7.1.0", + "@babel/template": "7.1.0", + "@babel/traverse": "7.1.0", + "@babel/types": "7.0.0", + "istanbul-lib-coverage": "2.0.1", + "semver": "5.5.0" } } } @@ -5660,10 +5660,10 @@ "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", "dev": true, "requires": { - "convert-source-map": "^1.5.0", - "istanbul-lib-instrument": "^1.7.3", - "loader-utils": "^1.1.0", - "schema-utils": "^0.3.0" + "convert-source-map": "1.6.0", + "istanbul-lib-instrument": "1.10.2", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" }, "dependencies": { "ajv": { @@ -5672,10 +5672,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "schema-utils": { @@ -5684,7 +5684,7 @@ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "dev": true, "requires": { - "ajv": "^5.0.0" + "ajv": "5.5.2" } } } @@ -5701,7 +5701,7 @@ "integrity": "sha512-ufiZoiJ8CxY577JJWEeFuxXZoMqiKpq/RqZtOAYuQLvlkbJWscq9n3gc4xrCGH9n4pW0qnTxOz1oyMmVtk8E1w==", "dev": true, "requires": { - "append-transform": "^1.0.0" + "append-transform": "1.0.0" } }, "istanbul-lib-instrument": { @@ -5710,13 +5710,13 @@ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.1", - "semver": "^5.3.0" + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.1", + "semver": "5.5.0" } }, "istanbul-lib-report": { @@ -5725,9 +5725,9 @@ "integrity": "sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q==", "dev": true, "requires": { - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "supports-color": "^5.4.0" + "istanbul-lib-coverage": "2.0.1", + "make-dir": "1.3.0", + "supports-color": "5.4.0" }, "dependencies": { "istanbul-lib-coverage": { @@ -5744,11 +5744,11 @@ "integrity": "sha512-30l40ySg+gvBLcxTrLzR4Z2XTRj3HgRCA/p2rnbs/3OiTaoj054gAbuP5DcLOtwqmy4XW8qXBHzrmP2/bQ9i3A==", "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^2.0.1", - "make-dir": "^1.3.0", - "rimraf": "^2.6.2", - "source-map": "^0.6.1" + "debug": "3.2.5", + "istanbul-lib-coverage": "2.0.1", + "make-dir": "1.3.0", + "rimraf": "2.6.2", + "source-map": "0.6.1" }, "dependencies": { "debug": { @@ -5757,7 +5757,7 @@ "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "istanbul-lib-coverage": { @@ -5786,7 +5786,7 @@ "integrity": "sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw==", "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "4.0.11" } }, "jasmine": { @@ -5795,9 +5795,9 @@ "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", "dev": true, "requires": { - "exit": "^0.1.2", - "glob": "^7.0.6", - "jasmine-core": "~2.8.0" + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.8.0" }, "dependencies": { "jasmine-core": { @@ -5853,8 +5853,8 @@ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" }, "dependencies": { "esprima": { @@ -5932,11 +5932,11 @@ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", - "pako": "~1.0.2", - "readable-stream": "~2.0.6" + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" }, "dependencies": { "core-js": { @@ -5963,12 +5963,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" } }, "string_decoder": { @@ -5985,31 +5985,31 @@ "integrity": "sha512-NetT3wPCQMNB36uiL9LLyhrOt8SQwrEKt0xD3+KpTCfm0VxVyUJdPL5oTq2Ic5ouemgL/Iz4wqXEbF3zea9kQQ==", "dev": true, "requires": { - "bluebird": "^3.3.0", - "body-parser": "^1.16.1", - "chokidar": "^2.0.3", - "colors": "^1.1.0", - "combine-lists": "^1.0.0", - "connect": "^3.6.0", - "core-js": "^2.2.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "http-proxy": "^1.13.0", - "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", - "log4js": "^3.0.0", - "mime": "^2.3.1", - "minimatch": "^3.0.2", - "optimist": "^0.6.1", - "qjobs": "^1.1.4", - "range-parser": "^1.2.0", - "rimraf": "^2.6.0", - "safe-buffer": "^5.0.1", + "bluebird": "3.5.1", + "body-parser": "1.18.3", + "chokidar": "2.0.4", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.5.7", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.3", + "lodash": "4.17.10", + "log4js": "3.0.6", + "mime": "2.3.1", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.2", + "safe-buffer": "5.1.2", "socket.io": "2.1.1", - "source-map": "^0.6.1", + "source-map": "0.6.1", "tmp": "0.0.33", "useragent": "2.2.1" }, @@ -6034,8 +6034,8 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "^1.0.0", - "which": "^1.2.1" + "fs-access": "1.0.1", + "which": "1.3.1" } }, "karma-cli": { @@ -6044,7 +6044,7 @@ "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.1.7" } }, "karma-coverage-istanbul-reporter": { @@ -6053,8 +6053,8 @@ "integrity": "sha512-xJS7QSQIVU6VK9HuJ/ieE5yynxKhjCCkd96NLY/BX/HXsx0CskU9JJiMQbd4cHALiddMwI4OWh1IIzeWrsavJw==", "dev": true, "requires": { - "istanbul-api": "^2.0.5", - "minimatch": "^3.0.4" + "istanbul-api": "2.0.6", + "minimatch": "3.0.4" } }, "karma-jasmine": { @@ -6075,7 +6075,7 @@ "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", "dev": true, "requires": { - "source-map-support": "^0.5.5" + "source-map-support": "0.5.8" } }, "killable": { @@ -6103,7 +6103,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "1.0.0" } }, "less": { @@ -6112,15 +6112,15 @@ "integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==", "dev": true, "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.4.1", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0" + "clone": "2.1.2", + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.87.0", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -6138,9 +6138,9 @@ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^3.0.0" + "clone": "2.1.2", + "loader-utils": "1.1.0", + "pify": "3.0.0" } }, "levn": { @@ -6149,8 +6149,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "license-webpack-plugin": { @@ -6159,7 +6159,7 @@ "integrity": "sha512-GsomZw5VoT20ST8qH2tOjBgbyhn6Pgs9M94g0mbvfBIV1VXufm1iKY+4dbgfTObj1Mp6nSRE3Zf74deOZr0KwA==", "dev": true, "requires": { - "webpack-sources": "^1.2.0" + "webpack-sources": "1.2.0" } }, "lie": { @@ -6168,7 +6168,7 @@ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "dev": true, "requires": { - "immediate": "~3.0.5" + "immediate": "3.0.6" } }, "load-json-file": { @@ -6177,11 +6177,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" }, "dependencies": { "pify": { @@ -6204,9 +6204,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } }, "locate-path": { @@ -6215,8 +6215,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -6262,10 +6262,10 @@ "integrity": "sha512-ezXZk6oPJCWL483zj64pNkMuY/NcRX5MPiB0zE6tjZM137aeusrOnW1ecxgF9cmwMWkBMhjteQxBPoZBh9FDxQ==", "dev": true, "requires": { - "circular-json": "^0.5.5", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "rfdc": "^1.1.2", + "circular-json": "0.5.9", + "date-format": "1.2.0", + "debug": "3.2.6", + "rfdc": "1.1.2", "streamroller": "0.7.0" }, "dependencies": { @@ -6275,7 +6275,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -6304,7 +6304,7 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "js-tokens": "3.0.2" } }, "loud-rejection": { @@ -6313,8 +6313,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, "lru-cache": { @@ -6323,8 +6323,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "magic-string": { @@ -6333,7 +6333,7 @@ "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", "dev": true, "requires": { - "sourcemap-codec": "^1.4.1" + "sourcemap-codec": "1.4.3" } }, "make-dir": { @@ -6342,7 +6342,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "make-error": { @@ -6363,7 +6363,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -6384,7 +6384,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "material-design-icons": { @@ -6404,9 +6404,9 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "media-typer": { @@ -6421,9 +6421,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" } }, "memory-fs": { @@ -6432,8 +6432,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "meow": { @@ -6443,16 +6443,16 @@ "dev": true, "optional": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" }, "dependencies": { "minimist": { @@ -6482,19 +6482,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "miller-rabin": { @@ -6503,8 +6503,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -6526,7 +6526,7 @@ "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==", "dev": true, "requires": { - "mime-db": "~1.35.0" + "mime-db": "1.35.0" } }, "mimic-fn": { @@ -6553,7 +6553,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -6568,16 +6568,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^2.0.1", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "mixin-deep": { @@ -6586,8 +6586,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -6596,7 +6596,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -6607,8 +6607,8 @@ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" + "for-in": "0.1.8", + "is-extendable": "0.1.1" }, "dependencies": { "for-in": { @@ -6634,12 +6634,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" } }, "ms": { @@ -6654,8 +6654,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dns-packet": "1.3.1", + "thunky": "1.0.3" } }, "multicast-dns-service-types": { @@ -6683,17 +6683,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "negotiator": { @@ -6727,18 +6727,18 @@ "dev": true, "optional": true, "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.87.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.1" }, "dependencies": { "semver": { @@ -6756,28 +6756,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^1.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.10.3", + "url": "0.11.0", + "util": "0.10.4", "vm-browserify": "0.0.4" }, "dependencies": { @@ -6795,7 +6795,7 @@ "integrity": "sha512-ZaZWMsbuDcetpHmYeKWPO6e63pSXLb50M7lJgCbcM2nC/nQC3daNifmtp5a2kp7EWwYfhuvH6zLPWkrF8IiDdw==", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "5.5.0" } }, "node-sass": { @@ -6805,25 +6805,25 @@ "dev": true, "optional": true, "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.8.0", - "npmlog": "^4.0.0", + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.10.0", + "node-gyp": "3.8.0", + "npmlog": "4.1.2", "request": "2.87.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" + "sass-graph": "2.2.4", + "stdout-stream": "1.4.1", + "true-case-path": "1.0.3" }, "dependencies": { "ansi-styles": { @@ -6840,11 +6840,11 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "supports-color": { @@ -6862,7 +6862,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1.0.9" } }, "normalize-package-data": { @@ -6871,10 +6871,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -6883,7 +6883,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "normalize-range": { @@ -6898,10 +6898,10 @@ "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "dev": true, "requires": { - "hosted-git-info": "^2.6.0", - "osenv": "^0.1.5", - "semver": "^5.5.0", - "validate-npm-package-name": "^3.0.0" + "hosted-git-info": "2.7.1", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" } }, "npm-registry-client": { @@ -6910,18 +6910,18 @@ "integrity": "sha512-Qs6P6nnopig+Y8gbzpeN/dkt+n7IyVd8f45NTMotGk6Qo7GfBmzwYx6jRLoOOgKiMnaQfYxsuyQlD8Mc3guBhg==", "dev": true, "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" + "concat-stream": "1.6.2", + "graceful-fs": "4.1.11", + "normalize-package-data": "2.4.0", + "npm-package-arg": "6.1.0", + "npmlog": "4.1.2", + "once": "1.4.0", + "request": "2.87.0", + "retry": "0.10.1", + "safe-buffer": "5.1.2", + "semver": "5.5.0", + "slide": "1.1.6", + "ssri": "5.3.0" } }, "npm-run-path": { @@ -6930,7 +6930,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "npmlog": { @@ -6939,10 +6939,10 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" } }, "null-check": { @@ -6987,9 +6987,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -6998,7 +6998,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "kind-of": { @@ -7007,7 +7007,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -7018,7 +7018,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.omit": { @@ -7027,8 +7027,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" + "for-own": "0.1.5", + "is-extendable": "0.1.1" }, "dependencies": { "for-own": { @@ -7037,7 +7037,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } } } @@ -7048,7 +7048,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "obuf": { @@ -7078,7 +7078,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -7087,7 +7087,7 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "opn": { @@ -7096,7 +7096,7 @@ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optimist": { @@ -7105,8 +7105,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.8", + "wordwrap": "0.0.3" }, "dependencies": { "wordwrap": { @@ -7123,12 +7123,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "original": { @@ -7137,7 +7137,7 @@ "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "url-parse": "1.4.4" } }, "os-browserify": { @@ -7159,7 +7159,7 @@ "dev": true, "optional": true, "requires": { - "lcid": "^1.0.0" + "lcid": "1.0.0" } }, "os-tmpdir": { @@ -7174,8 +7174,8 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" } }, "p-defer": { @@ -7202,7 +7202,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -7211,7 +7211,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-map": { @@ -7238,9 +7238,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "parse-asn1": { @@ -7249,11 +7249,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17" } }, "parse-glob": { @@ -7262,10 +7262,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" }, "dependencies": { "is-extglob": { @@ -7280,7 +7280,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "^1.0.0" + "is-extglob": "1.0.0" } } } @@ -7291,7 +7291,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parse5": { @@ -7306,7 +7306,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseuri": { @@ -7315,7 +7315,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "~1.0.0" + "better-assert": "1.0.2" } }, "parseurl": { @@ -7384,7 +7384,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "pbkdf2": { @@ -7393,11 +7393,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "performance-now": { @@ -7424,7 +7424,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pkg-dir": { @@ -7433,7 +7433,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" } }, "popper.js": { @@ -7447,9 +7447,9 @@ "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" } }, "posix-character-classes": { @@ -7464,9 +7464,9 @@ "integrity": "sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.5.0" + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.5.0" }, "dependencies": { "source-map": { @@ -7481,7 +7481,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -7492,10 +7492,10 @@ "integrity": "sha512-3KqKRZcaZAvxbY8DVLdd81tG5uKzbUQuiWIvy0o0fzEC42bKacqPYFWbfCQyw6L4LWUaqPz/idvIdbhpgQ32eQ==", "dev": true, "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "postcss": "7.0.5", + "postcss-value-parser": "3.3.1", + "read-cache": "1.0.0", + "resolve": "1.1.7" } }, "postcss-load-config": { @@ -7504,8 +7504,8 @@ "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", "dev": true, "requires": { - "cosmiconfig": "^4.0.0", - "import-cwd": "^2.0.0" + "cosmiconfig": "4.0.0", + "import-cwd": "2.1.0" } }, "postcss-loader": { @@ -7514,10 +7514,10 @@ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "loader-utils": "1.1.0", + "postcss": "7.0.5", + "postcss-load-config": "2.0.0", + "schema-utils": "1.0.0" } }, "postcss-value-parser": { @@ -7557,7 +7557,7 @@ "dev": true, "optional": true, "requires": { - "asap": "~2.0.3" + "asap": "2.0.6" } }, "promise-inflight": { @@ -7572,22 +7572,22 @@ "integrity": "sha512-ORey5ewQMYiXQxcQohsqEiKYOg/r5yJoJbt0tuROmmgajdg/CA3gTOZNIFJncUVMAJIk5YFqBBLUjKVmQO6tfA==", "dev": true, "requires": { - "@types/node": "^6.0.46", - "@types/q": "^0.0.32", - "@types/selenium-webdriver": "^3.0.0", - "blocking-proxy": "^1.0.0", - "browserstack": "^1.5.1", - "chalk": "^1.1.3", - "glob": "^7.0.3", + "@types/node": "6.14.1", + "@types/q": "0.0.32", + "@types/selenium-webdriver": "3.0.13", + "blocking-proxy": "1.0.1", + "browserstack": "1.5.1", + "chalk": "1.1.3", + "glob": "7.1.2", "jasmine": "2.8.0", - "jasminewd2": "^2.1.0", - "optimist": "~0.6.0", + "jasminewd2": "2.2.0", + "optimist": "0.6.1", "q": "1.4.1", - "saucelabs": "^1.5.0", + "saucelabs": "1.5.0", "selenium-webdriver": "3.6.0", - "source-map-support": "~0.4.0", + "source-map-support": "0.4.18", "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.0.6" + "webdriver-manager": "12.1.0" }, "dependencies": { "@types/node": { @@ -7608,11 +7608,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "del": { @@ -7621,13 +7621,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" } }, "globby": { @@ -7636,12 +7636,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "minimist": { @@ -7662,7 +7662,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "^0.5.6" + "source-map": "0.5.7" } }, "supports-color": { @@ -7677,17 +7677,17 @@ "integrity": "sha512-oEc5fmkpz6Yh6udhwir5m0eN5mgRPq9P/NU5YWuT3Up5slt6Zz+znhLU7q4+8rwCZz/Qq3Fgpr/4oao7NPCm2A==", "dev": true, "requires": { - "adm-zip": "^0.4.9", - "chalk": "^1.1.1", - "del": "^2.2.0", - "glob": "^7.0.3", - "ini": "^1.3.4", - "minimist": "^1.2.0", - "q": "^1.4.1", - "request": "^2.87.0", - "rimraf": "^2.5.2", - "semver": "^5.3.0", - "xml2js": "^0.4.17" + "adm-zip": "0.4.13", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.87.0", + "rimraf": "2.6.2", + "semver": "5.5.0", + "xml2js": "0.4.19" } } } @@ -7698,7 +7698,7 @@ "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.1.2", "ipaddr.js": "1.8.0" } }, @@ -7720,12 +7720,12 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "pump": { @@ -7734,8 +7734,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -7744,9 +7744,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.6.1", + "inherits": "2.0.3", + "pump": "2.0.1" } }, "punycode": { @@ -7797,9 +7797,9 @@ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" }, "dependencies": { "is-number": { @@ -7816,7 +7816,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -7825,8 +7825,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" } }, "range-parser": { @@ -7859,7 +7859,7 @@ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { - "pify": "^2.3.0" + "pify": "2.3.0" }, "dependencies": { "pify": { @@ -7876,9 +7876,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" }, "dependencies": { "path-type": { @@ -7887,9 +7887,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" } }, "pify": { @@ -7906,8 +7906,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" }, "dependencies": { "find-up": { @@ -7916,8 +7916,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "path-exists": { @@ -7926,7 +7926,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } } } @@ -7937,13 +7937,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -7952,10 +7952,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" } }, "rechoir": { @@ -7964,7 +7964,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "^1.1.6" + "resolve": "1.1.7" } }, "redent": { @@ -7974,8 +7974,8 @@ "dev": true, "optional": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "reflect-metadata": { @@ -8002,7 +8002,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "^0.1.3" + "is-equal-shallow": "0.1.3" } }, "regex-not": { @@ -8011,8 +8011,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexpu-core": { @@ -8021,9 +8021,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" } }, "regjsgen": { @@ -8038,7 +8038,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -8073,7 +8073,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "request": { @@ -8082,26 +8082,26 @@ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.19", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" } }, "require-directory": { @@ -8140,7 +8140,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "resolve-from": { @@ -8161,8 +8161,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "ret": { @@ -8190,7 +8190,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "^0.1.1" + "align-text": "0.1.4" } }, "rimraf": { @@ -8199,7 +8199,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "7.1.2" } }, "ripemd160": { @@ -8208,8 +8208,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "hash-base": "3.0.4", + "inherits": "2.0.3" } }, "run-async": { @@ -8218,7 +8218,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "^2.1.0" + "is-promise": "2.1.0" } }, "run-queue": { @@ -8227,7 +8227,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "^1.1.1" + "aproba": "1.2.0" } }, "rxjs": { @@ -8235,7 +8235,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "safe-buffer": { @@ -8250,7 +8250,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -8266,10 +8266,10 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "glob": "7.1.2", + "lodash": "4.17.10", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" }, "dependencies": { "camelcase": { @@ -8286,9 +8286,9 @@ "dev": true, "optional": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" } }, "y18n": { @@ -8305,19 +8305,19 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.3", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" } } } @@ -8328,12 +8328,12 @@ "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", "dev": true, "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "2.0.2", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "neo-async": "2.6.0", + "pify": "3.0.0", + "semver": "5.5.0" } }, "saucelabs": { @@ -8342,7 +8342,7 @@ "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { - "https-proxy-agent": "^2.2.1" + "https-proxy-agent": "2.2.1" } }, "sax": { @@ -8357,9 +8357,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.3", + "ajv-errors": "1.0.0", + "ajv-keywords": "3.2.0" } }, "scss-tokenizer": { @@ -8369,8 +8369,8 @@ "dev": true, "optional": true, "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" + "js-base64": "2.4.9", + "source-map": "0.4.4" }, "dependencies": { "source-map": { @@ -8380,7 +8380,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -8397,10 +8397,10 @@ "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { - "jszip": "^3.1.3", - "rimraf": "^2.5.4", + "jszip": "3.1.5", + "rimraf": "2.6.2", "tmp": "0.0.30", - "xml2js": "^0.4.17" + "xml2js": "0.4.19" }, "dependencies": { "tmp": { @@ -8409,7 +8409,7 @@ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "1.0.2" } } } @@ -8435,7 +8435,7 @@ "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", "dev": true, "requires": { - "semver": "^5.3.0" + "semver": "5.5.0" } }, "semver-intersect": { @@ -8444,7 +8444,7 @@ "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", "dev": true, "requires": { - "semver": "^5.0.0" + "semver": "5.5.0" } }, "send": { @@ -8454,18 +8454,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", + "http-errors": "1.6.3", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" }, "dependencies": { "mime": { @@ -8488,13 +8488,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.19", + "parseurl": "1.3.2" } }, "serve-static": { @@ -8503,9 +8503,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", "send": "0.16.2" } }, @@ -8527,10 +8527,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -8539,7 +8539,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -8562,8 +8562,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "shallow-clone": { @@ -8572,9 +8572,9 @@ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" }, "dependencies": { "kind-of": { @@ -8591,7 +8591,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -8606,9 +8606,9 @@ "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" } }, "signal-exit": { @@ -8635,14 +8635,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -8651,7 +8651,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -8660,7 +8660,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -8671,9 +8671,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -8682,7 +8682,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -8691,7 +8691,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -8700,7 +8700,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -8709,9 +8709,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -8722,7 +8722,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -8731,7 +8731,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -8742,12 +8742,12 @@ "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", + "debug": "3.1.0", + "engine.io": "3.2.1", + "has-binary2": "1.0.3", + "socket.io-adapter": "1.1.1", "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" + "socket.io-parser": "3.2.0" }, "dependencies": { "debug": { @@ -8777,15 +8777,15 @@ "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", + "debug": "3.1.0", + "engine.io-client": "3.2.1", + "has-binary2": "1.0.3", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", + "socket.io-parser": "3.2.0", "to-array": "0.1.4" }, "dependencies": { @@ -8807,7 +8807,7 @@ "dev": true, "requires": { "component-emitter": "1.2.1", - "debug": "~3.1.0", + "debug": "3.1.0", "isarray": "2.0.1" }, "dependencies": { @@ -8834,8 +8834,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "faye-websocket": "0.10.0", + "uuid": "3.3.2" } }, "sockjs-client": { @@ -8844,12 +8844,12 @@ "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", "dev": true, "requires": { - "debug": "^2.6.6", + "debug": "2.6.9", "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", - "json3": "^3.3.2", - "url-parse": "^1.1.8" + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" }, "dependencies": { "faye-websocket": { @@ -8858,7 +8858,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } } } @@ -8881,8 +8881,8 @@ "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", "dev": true, "requires": { - "async": "^2.5.0", - "loader-utils": "^1.1.0" + "async": "2.6.1", + "loader-utils": "1.1.0" }, "dependencies": { "async": { @@ -8891,7 +8891,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.10" } } } @@ -8902,11 +8902,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -8915,8 +8915,8 @@ "integrity": "sha512-WqAEWPdb78u25RfKzOF0swBpY0dKrNdjc4GvLwm7ScX/o9bj8Eh/YL8mcMhBHYDGl87UkkSXDOFnW4G7GhWhGg==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -8945,8 +8945,8 @@ "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.2" } }, "spdx-exceptions": { @@ -8961,8 +8961,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.2" } }, "spdx-license-ids": { @@ -8977,12 +8977,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", - "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", - "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.2", + "select-hose": "2.0.0", + "spdy-transport": "2.1.1" } }, "spdy-transport": { @@ -8991,13 +8991,13 @@ "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", - "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "debug": "2.6.9", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "wbuf": "1.7.3" } }, "speed-measure-webpack-plugin": { @@ -9006,7 +9006,7 @@ "integrity": "sha512-p+taQ69VkRUXYMoZOx2nxV/Tz8tt79ahctoZJyJDHWP7fEYvwFNf5Pd73k5kZ6auu0pTsPNLEUwWpM8mCk85Zw==", "dev": true, "requires": { - "chalk": "^2.0.1" + "chalk": "2.4.1" } }, "split-string": { @@ -9015,7 +9015,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -9030,15 +9030,15 @@ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "ssri": { @@ -9047,7 +9047,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "safe-buffer": "5.1.2" } }, "static-extend": { @@ -9056,8 +9056,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -9066,7 +9066,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -9077,7 +9077,7 @@ "integrity": "sha512-NT0YGhwuQ0EOX+uPhhUcI6/+1Sq/pMzNuSCBVT4GbFl/ac6I/JZefBcjlECNfAb1t3GOx5dEj1Z7x0cAxeeVLQ==", "dev": true, "requires": { - "lodash": "^4.17.4" + "lodash": "4.17.10" } }, "statuses": { @@ -9093,7 +9093,7 @@ "dev": true, "optional": true, "requires": { - "readable-stream": "^2.0.1" + "readable-stream": "2.3.6" } }, "stream-browserify": { @@ -9102,8 +9102,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "stream-each": { @@ -9112,8 +9112,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -9122,11 +9122,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -9141,10 +9141,10 @@ "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", "dev": true, "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "date-format": "1.2.0", + "debug": "3.2.6", + "mkdirp": "0.5.1", + "readable-stream": "2.3.6" }, "dependencies": { "debug": { @@ -9153,7 +9153,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -9170,9 +9170,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "string_decoder": { @@ -9181,7 +9181,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -9190,7 +9190,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } }, "strip-bom": { @@ -9199,7 +9199,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-eof": { @@ -9215,7 +9215,7 @@ "dev": true, "optional": true, "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "style-loader": { @@ -9224,8 +9224,8 @@ "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "1.1.0", + "schema-utils": "0.4.7" }, "dependencies": { "schema-utils": { @@ -9234,8 +9234,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.3", + "ajv-keywords": "3.2.0" } } } @@ -9246,12 +9246,12 @@ "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", "dev": true, "requires": { - "css-parse": "1.7.x", - "debug": "*", - "glob": "7.0.x", - "mkdirp": "0.5.x", - "sax": "0.5.x", - "source-map": "0.1.x" + "css-parse": "1.7.0", + "debug": "2.6.9", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" }, "dependencies": { "glob": { @@ -9260,12 +9260,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" } }, "source-map": { @@ -9274,7 +9274,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -9285,9 +9285,9 @@ "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "lodash.clonedeep": "^4.5.0", - "when": "~3.6.x" + "loader-utils": "1.1.0", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" } }, "supports-color": { @@ -9296,7 +9296,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "symbol-observable": { @@ -9318,9 +9318,9 @@ "dev": true, "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" } }, "terser": { @@ -9329,9 +9329,9 @@ "integrity": "sha512-iruZ7j14oBbRYJC5cP0/vTU7YOWjN+J1ZskEGoF78tFzXdkK2hbCL/3TRZN8XB+MuvFhvOHMp7WkOCBO4VEL5g==", "dev": true, "requires": { - "commander": "~2.17.1", - "source-map": "~0.6.1", - "source-map-support": "~0.5.6" + "commander": "2.17.1", + "source-map": "0.6.1", + "source-map-support": "0.5.8" }, "dependencies": { "commander": { @@ -9354,14 +9354,14 @@ "integrity": "sha512-61lV0DSxMAZ8AyZG7/A4a3UPlrbOBo8NIQ4tJzLPAdGOQ+yoNC7l5ijEow27lBAL2humer01KLS6bGIMYQxKoA==", "dev": true, "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.8.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.1", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "terser": "3.10.11", + "webpack-sources": "1.2.0", + "worker-farm": "1.6.0" }, "dependencies": { "cacache": { @@ -9370,20 +9370,20 @@ "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "figgy-pudding": "^3.1.0", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.3", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.0", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "bluebird": "3.5.1", + "chownr": "1.1.1", + "figgy-pudding": "3.5.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.3", + "mississippi": "3.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" } }, "find-cache-dir": { @@ -9392,9 +9392,9 @@ "integrity": "sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^3.0.0" + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "3.0.0" } }, "find-up": { @@ -9403,7 +9403,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "locate-path": { @@ -9412,8 +9412,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "mississippi": { @@ -9422,16 +9422,16 @@ "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.6.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "p-limit": { @@ -9440,7 +9440,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -9449,7 +9449,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -9464,7 +9464,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "3.0.0" } }, "pump": { @@ -9473,8 +9473,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "source-map": { @@ -9489,7 +9489,7 @@ "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "3.5.1" } } } @@ -9506,8 +9506,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "thunky": { @@ -9522,7 +9522,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "tmp": { @@ -9531,7 +9531,7 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, "to-array": { @@ -9558,7 +9558,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -9567,7 +9567,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -9578,10 +9578,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -9590,8 +9590,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "tough-cookie": { @@ -9600,7 +9600,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "^1.4.1" + "punycode": "1.4.1" }, "dependencies": { "punycode": { @@ -9637,7 +9637,7 @@ "dev": true, "optional": true, "requires": { - "glob": "^7.1.2" + "glob": "7.1.2" } }, "ts-node": { @@ -9646,14 +9646,14 @@ "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", "dev": true, "requires": { - "arrify": "^1.0.0", - "buffer-from": "^1.1.0", - "diff": "^3.1.0", - "make-error": "^1.1.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.6", - "yn": "^2.0.0" + "arrify": "1.0.1", + "buffer-from": "1.1.1", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.8", + "yn": "2.0.0" }, "dependencies": { "minimist": { @@ -9675,18 +9675,18 @@ "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", "dev": true, "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.1", + "commander": "2.19.0", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.12.0", + "minimatch": "3.0.4", + "resolve": "1.8.1", + "semver": "5.5.0", + "tslib": "1.9.3", + "tsutils": "2.29.0" }, "dependencies": { "resolve": { @@ -9695,7 +9695,7 @@ "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "1.0.6" } } } @@ -9706,7 +9706,7 @@ "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { - "tslib": "^1.8.1" + "tslib": "1.9.3" } }, "tty-browserify": { @@ -9721,7 +9721,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -9737,7 +9737,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -9747,7 +9747,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "2.1.19" } }, "typedarray": { @@ -9768,8 +9768,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" + "commander": "2.13.0", + "source-map": "0.6.1" }, "dependencies": { "commander": { @@ -9799,14 +9799,14 @@ "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.7", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.2.0", + "worker-farm": "1.6.0" }, "dependencies": { "schema-utils": { @@ -9815,8 +9815,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.3", + "ajv-keywords": "3.2.0" } }, "source-map": { @@ -9839,10 +9839,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -9851,7 +9851,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -9860,10 +9860,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -9874,7 +9874,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -9883,7 +9883,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "unpipe": { @@ -9898,8 +9898,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -9908,9 +9908,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -9944,7 +9944,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -9983,8 +9983,8 @@ "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", "dev": true, "requires": { - "querystringify": "^2.0.0", - "requires-port": "^1.0.0" + "querystringify": "2.1.0", + "requires-port": "1.0.0" } }, "use": { @@ -9999,8 +9999,8 @@ "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", "dev": true, "requires": { - "lru-cache": "2.2.x", - "tmp": "0.0.x" + "lru-cache": "2.2.4", + "tmp": "0.0.33" }, "dependencies": { "lru-cache": { @@ -10044,8 +10044,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.2", + "spdx-expression-parse": "3.0.0" } }, "validate-npm-package-name": { @@ -10054,7 +10054,7 @@ "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "1.0.3" } }, "vary": { @@ -10069,9 +10069,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "^1.0.0", + "assert-plus": "1.0.0", "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "extsprintf": "1.3.0" } }, "vm-browserify": { @@ -10095,9 +10095,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "^2.0.2", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "chokidar": "2.0.4", + "graceful-fs": "4.1.11", + "neo-async": "2.6.0" } }, "wbuf": { @@ -10106,7 +10106,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "1.0.1" } }, "webdriver-js-extender": { @@ -10115,8 +10115,8 @@ "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { - "@types/selenium-webdriver": "^3.0.0", - "selenium-webdriver": "^3.0.1" + "@types/selenium-webdriver": "3.0.13", + "selenium-webdriver": "3.6.0" } }, "webpack": { @@ -10129,26 +10129,26 @@ "@webassemblyjs/helper-module-context": "1.7.6", "@webassemblyjs/wasm-edit": "1.7.6", "@webassemblyjs/wasm-parser": "1.7.6", - "acorn": "^5.6.2", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.1.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "acorn": "5.7.3", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.5.3", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "1.0.0", + "enhanced-resolve": "4.1.0", + "eslint-scope": "4.0.0", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.3.1", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.6.0", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.7", + "tapable": "1.1.0", + "uglifyjs-webpack-plugin": "1.3.0", + "watchpack": "1.6.0", + "webpack-sources": "1.2.0" }, "dependencies": { "schema-utils": { @@ -10157,8 +10157,8 @@ "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.5.3", + "ajv-keywords": "3.2.0" } } } @@ -10169,8 +10169,8 @@ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", "dev": true, "requires": { - "source-list-map": "~0.1.7", - "source-map": "~0.4.1" + "source-list-map": "0.1.8", + "source-map": "0.4.4" }, "dependencies": { "source-list-map": { @@ -10185,7 +10185,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": ">=0.0.4" + "amdefine": "1.0.1" } } } @@ -10196,12 +10196,12 @@ "integrity": "sha512-5C5gXtOo1I6+0AEg4UPglYEtu3Rai6l5IiO6aUu65scHXz29dc3oIWMiRwvcNLXgL0HwRkRxa9N02ZjFt4hY8w==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "range-parser": "^1.0.3", - "url-join": "^4.0.0", - "webpack-log": "^2.0.0" + "loud-rejection": "1.6.0", + "memory-fs": "0.4.1", + "mime": "2.3.1", + "range-parser": "1.2.0", + "url-join": "4.0.0", + "webpack-log": "2.0.0" }, "dependencies": { "mime": { @@ -10219,32 +10219,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", - "import-local": "^2.0.0", - "internal-ip": "^3.0.1", - "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "schema-utils": "^1.0.0", - "selfsigned": "^1.9.1", - "serve-index": "^1.7.2", + "bonjour": "3.5.0", + "chokidar": "2.0.4", + "compression": "1.7.3", + "connect-history-api-fallback": "1.5.0", + "debug": "3.2.6", + "del": "3.0.0", + "express": "4.16.4", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "2.0.0", + "internal-ip": "3.0.1", + "ip": "1.1.5", + "killable": "1.0.1", + "loglevel": "1.6.1", + "opn": "5.3.0", + "portfinder": "1.0.17", + "schema-utils": "1.0.0", + "selfsigned": "1.10.4", + "serve-index": "1.9.1", "sockjs": "0.3.19", "sockjs-client": "1.1.5", - "spdy": "^3.4.1", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.4.0", "webpack-dev-middleware": "3.2.0", - "webpack-log": "^2.0.0", + "webpack-log": "2.0.0", "yargs": "12.0.2" }, "dependencies": { @@ -10266,9 +10266,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" }, "dependencies": { "strip-ansi": { @@ -10277,7 +10277,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -10288,7 +10288,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "decamelize": { @@ -10306,7 +10306,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "invert-kv": { @@ -10327,7 +10327,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "2.0.0" } }, "locate-path": { @@ -10336,8 +10336,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "mime": { @@ -10358,9 +10358,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "0.10.0", + "lcid": "2.0.0", + "mem": "4.0.0" } }, "p-limit": { @@ -10369,7 +10369,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -10378,7 +10378,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -10393,8 +10393,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" }, "dependencies": { "strip-ansi": { @@ -10403,7 +10403,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } } } @@ -10414,13 +10414,13 @@ "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "url-join": "^4.0.0", - "webpack-log": "^2.0.0" + "loud-rejection": "1.6.0", + "memory-fs": "0.4.1", + "mime": "2.3.1", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "url-join": "4.0.0", + "webpack-log": "2.0.0" } }, "which-module": { @@ -10435,18 +10435,18 @@ "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "10.1.0" } }, "yargs-parser": { @@ -10455,7 +10455,7 @@ "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -10466,8 +10466,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-colors": "3.2.1", + "uuid": "3.3.2" } }, "webpack-merge": { @@ -10476,7 +10476,7 @@ "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "4.17.10" } }, "webpack-sources": { @@ -10485,8 +10485,8 @@ "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -10503,7 +10503,7 @@ "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", "dev": true, "requires": { - "webpack-core": "^0.6.8" + "webpack-core": "0.6.9" } }, "websocket-driver": { @@ -10512,8 +10512,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", - "websocket-extensions": ">=0.1.1" + "http-parser-js": "0.5.0", + "websocket-extensions": "0.1.3" } }, "websocket-extensions": { @@ -10534,7 +10534,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -10550,7 +10550,7 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "^1.0.2 || 2" + "string-width": "1.0.2" } }, "window-size": { @@ -10572,7 +10572,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -10581,8 +10581,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" } }, "wrappy": { @@ -10597,9 +10597,9 @@ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0", - "ultron": "~1.1.0" + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" } }, "xml2js": { @@ -10608,8 +10608,8 @@ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "sax": "1.2.4", + "xmlbuilder": "9.0.7" }, "dependencies": { "sax": { @@ -10663,9 +10663,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", "window-size": "0.1.0" } }, @@ -10676,7 +10676,7 @@ "dev": true, "optional": true, "requires": { - "camelcase": "^3.0.0" + "camelcase": "3.0.0" }, "dependencies": { "camelcase": { diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index 8414a81d..c18815b0 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -89,9 +89,9 @@ export class ModelService { this.storeService.removeFromState(removedInstance); }); // TODO: after interface changes in ir we will receive a tuple of instances which are now linked - this.socketService.subscribeForEvent<>(EventTypeEnum.LinkAddedEvent).subscribe(() => {}); + // this.socketService.subscribeForEvent<>(EventTypeEnum.LinkAddedEvent).subscribe(() => {}); - this.socketService.subscribeForEvent<>(EventTypeEnum.LinkStateChangedEvent).subscribe(() => {}); + // this.socketService.subscribeForEvent<>(EventTypeEnum.LinkStateChangedEvent).subscribe(() => {}); } public getObservableForInstances() { From 0776a809620d0e9f8ae374274da91471526599c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 27 Dec 2018 14:26:00 +0100 Subject: [PATCH 15/36] removed the graph functionality to create a base version of the model service to first integrate in the dev branch --- .../add-dialog/add-dialog.component.spec.ts | 7 +- .../add-dialog/add-dialog.component.ts | 8 +- .../dashboard/crawler/crawler.component.ts | 19 ++-- .../dashboard-card.component.ts | 34 ++----- .../delete-dialog/delete-dialog.component.ts | 4 +- .../dashboard/graph-view/graph-view.module.ts | 17 ---- .../graph-view/graph-view.service.spec.ts | 12 --- .../graph-view/graph-view.service.ts | 91 ------------------- .../graph-view/graph-view.component.css | 5 - .../graph-view/graph-view.component.html | 1 - .../graph-view/graph-view.component.spec.ts | 25 ----- .../graph-view/graph-view.component.ts | 60 ------------ .../table-all/table-all.component.ts | 6 +- .../app/dashboard/webapp/webapp.component.ts | 6 +- client/src/app/model/model.service.ts | 20 ++-- client/src/app/model/store.service.ts | 2 - 16 files changed, 41 insertions(+), 276 deletions(-) delete mode 100644 client/src/app/dashboard/graph-view/graph-view.module.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view.service.spec.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view.service.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.css delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.html delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts diff --git a/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts b/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts index e3cb7858..18f24b6c 100644 --- a/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts +++ b/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts @@ -1,11 +1,10 @@ import { async, ComponentFixture, TestBed, inject } from '@angular/core/testing'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpClientModule, HttpClient } from '@angular/common/http'; -import { BrowserModule, By } from '@angular/platform-browser'; +import { HttpClientModule } from '@angular/common/http'; +import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; import { MatIconModule } from '@angular/material/icon'; -import { MatTableDataSource, MatInputModule } from '@angular/material'; +import { MatInputModule } from '@angular/material'; import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog'; import { FormsModule } from '@angular/forms'; import { MatFormFieldModule } from '@angular/material/form-field'; diff --git a/client/src/app/dashboard/add-dialog/add-dialog.component.ts b/client/src/app/dashboard/add-dialog/add-dialog.component.ts index 13e33df5..9fe19509 100644 --- a/client/src/app/dashboard/add-dialog/add-dialog.component.ts +++ b/client/src/app/dashboard/add-dialog/add-dialog.component.ts @@ -1,7 +1,7 @@ -import { Component, OnInit, Inject } from '@angular/core'; -import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; +import { Component, OnInit } from '@angular/core'; +import { MatDialogRef } from '@angular/material'; import { FormControl, Validators } from '@angular/forms'; -import { ApiService} from '../../api/api/api.service'; + @Component({ selector: 'app-add-dialog', @@ -10,7 +10,7 @@ import { ApiService} from '../../api/api/api.service'; }) export class AddDialogComponent implements OnInit { - constructor(public thisDialogRef: MatDialogRef, private apiService: ApiService) { } + constructor(public thisDialogRef: MatDialogRef) { } name: String; formControl = new FormControl('', [ diff --git a/client/src/app/dashboard/crawler/crawler.component.ts b/client/src/app/dashboard/crawler/crawler.component.ts index 4a08f016..fed3a43c 100644 --- a/client/src/app/dashboard/crawler/crawler.component.ts +++ b/client/src/app/dashboard/crawler/crawler.component.ts @@ -17,8 +17,8 @@ */ import {Component, OnInit} from '@angular/core'; -import {ComponentTypeEnum, Instance} from '../../model/models/instance'; -import {ApiService} from '../../api/api/api.service'; +import { Instance, ComponentType} from '../../model/models/instance'; +import { ModelService } from 'src/app/model/model.service'; @Component({ selector: 'app-crawler', @@ -29,20 +29,15 @@ export class CrawlerComponent implements OnInit { // this array is inserted into the table all component in the html code tableData: Instance[]; - compType: string; + compType: ComponentType; - constructor(private apiService: ApiService) { - + constructor(private modelService: ModelService) { + this.tableData = []; } ngOnInit() { - - this.tableData = []; - - this.apiService.getInstances(ComponentTypeEnum.Crawler).subscribe((result: Array) => { - this.tableData = result; - }, err => { - console.log('error receiving data for crawler', err); + this.modelService.getObservableForComps(this.compType).subscribe((instances: Array) => { + this.tableData = instances; }); } diff --git a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts index 4fc88dd3..f1b25e8c 100644 --- a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts +++ b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts @@ -19,9 +19,7 @@ import {Component, Input, OnInit} from '@angular/core'; import {EventType, EventTypeEnum} from '../../model/models/socketMessage'; import {ComponentType, ComponentTypeEnum} from '../../model/models/instance'; -import {ApiService} from '../../api/api/api.service'; -import {SocketService} from '../../api/api/socket.service'; -import { HttpEvent } from '@angular/common/http'; +import { ModelService } from 'src/app/model/model.service'; @Component({ @@ -55,38 +53,20 @@ export class DashboardCardComponent implements OnInit { numberOfInstances: string; numberOfFailedInstances: string; - constructor(private irService: ApiService, private socketService: SocketService) { + constructor(private modelService: ModelService) { this.numberOfFailedInstances = 'No server connection'; } ngOnInit() { - // this has to be called onInit and not in the constructor, due - // to the component lifecycle. Input's are not initialized in - // the constructor. - this.setInstanceNumber(); - this.socketService.initSocket().then(() => { - const eventType: EventType = DashboardCardComponent.compTypeEventMap[this.componentType]; - - this.socketService.subscribeForEvent(eventType).subscribe((data: number) => { - console.log('data callback in card component', data); - - this.numberOfInstances = '' + data; - }); + this.modelService.getObservableForCompIds(this.componentType).subscribe((compIds) => { + this.numberOfInstances = '' + compIds.length; + }, (error) => { + console.log(error); + this.numberOfInstances = 'No server connection'; }); } - /** - * Uses the instance service to query the number of instances in the current system. - * If there is no server connection the value is set to a default error message. - */ - private setInstanceNumber() { - this.irService.getNumberOfInstances(this.componentType).subscribe((amount: HttpEvent) => { - this.numberOfInstances = '' + amount; - }, () => { - this.numberOfInstances = 'No server connection'; - }); - } } diff --git a/client/src/app/dashboard/delete-dialog/delete-dialog.component.ts b/client/src/app/dashboard/delete-dialog/delete-dialog.component.ts index c3621c12..afad4dc0 100644 --- a/client/src/app/dashboard/delete-dialog/delete-dialog.component.ts +++ b/client/src/app/dashboard/delete-dialog/delete-dialog.component.ts @@ -1,7 +1,7 @@ import { Component, OnInit, Inject } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; -import { MatDialogModule } from '@angular/material/dialog'; -import { Instance } from '../../api/model/instance'; +import { Instance } from 'src/app/model/models/instance'; + @Component({ selector: 'app-delete-dialog', diff --git a/client/src/app/dashboard/graph-view/graph-view.module.ts b/client/src/app/dashboard/graph-view/graph-view.module.ts deleted file mode 100644 index 2b52bf76..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {GraphViewComponent} from './graph-view/graph-view.component'; -import {GraphViewService} from './graph-view.service'; -import {ModelModule} from '../../model/model.module'; - -@NgModule({ - declarations: [GraphViewComponent], - imports: [ - CommonModule, - ModelModule - ], - exports: [GraphViewComponent], - providers: [GraphViewService] -}) -export class GraphViewModule { -} diff --git a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts deleted file mode 100644 index dc774f2c..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {TestBed} from '@angular/core/testing'; - -import {GraphViewService} from './graph-view.service'; - -describe('GraphViewService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: GraphViewService = TestBed.get(GraphViewService); - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts deleted file mode 100644 index 1ab93d3b..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ /dev/null @@ -1,91 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ModelService} from '../../model/model.service'; -import { Instance } from 'src/app/model/models/instance'; -import { BehaviorSubject, Observable, Subject} from 'rxjs'; -import * as cytoscape from 'cytoscape'; -import { InstanceLink } from 'src/app/model/models/instanceLink'; -import { Change, Actions } from 'src/app/model/store.service'; - -interface NodeEdgeMap { - nodes: Array; - edges: Array; - } -const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', - 'WebApp': '../../../assets/images/webapp.png', - 'WebApi': '../../../assets/images/webapi.png', - 'ElasticSearch': '../../../assets/images/Elasticsearch.png'}; -@Injectable({ - providedIn: 'root' -}) -export class GraphViewService { - private elementProvider: BehaviorSubject>; - private elementRemover: Subject>; - - constructor(private modelService: ModelService) { - this.elementProvider = new BehaviorSubject>([]); - this.elementRemover = new BehaviorSubject>([]); - - this.modelService.getObservableForInstances().subscribe((change: Change) => { - if (change.elements !== undefined) { - switch (change.type) { - case Actions.ADD: - this.addElements(change.elements); - break; - case Actions.DELETE: - this.removeElements(change.elements); - } - } - }); - } - - private removeElements(instances: Array) { - const ids = instances.map((value: Instance) => '' + value.id); - this.elementRemover.next(ids); - } - - private addElements(instances: Array) { - console.log('received new instance', instances); - const newElements: NodeEdgeMap = instances.reduce( - ( accumulator: NodeEdgeMap, value: Instance) => { - - accumulator.nodes.push({ - group: 'nodes', - data: { - id: '' + value.id, - name: value.name, - image: TYPE_TO_IMG[value.componentType] - } - }); - - const outEdges: Array = this.mapLinksToEdges(value.linksFrom); - const inEdges: Array = this.mapLinksToEdges(value.linksTo); - accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); - - return accumulator; - }, {nodes: [], edges: []} - ); - const eles: Array = newElements.nodes.concat(newElements.edges); - console.log('parsed instance to eles', eles); - this.elementProvider.next(eles); - } - - private mapLinksToEdges(links: Array): Array { - const edges: Array = links.map((edgeVal) => { - return {data: {id: edgeVal.idFrom + '_' + edgeVal.idTo, source: edgeVal.idFrom, target: edgeVal.idTo}}; - }); - return edges; - } - - public getElementObservable(): Observable> { - return new Observable((observer) => { - this.elementProvider.subscribe(observer); - observer.next(this.elementProvider.value); - }); - } - - public getElementRemoveObservable(): Observable> { - return new Observable((observer) => { - this.elementRemover.subscribe(observer); - }); - } -} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css deleted file mode 100644 index 87666c95..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css +++ /dev/null @@ -1,5 +0,0 @@ -#cy { - width: 500px; - height: 500px; - display: block; -} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html deleted file mode 100644 index 463b39ea..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html +++ /dev/null @@ -1 +0,0 @@ -
diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts deleted file mode 100644 index 29811a65..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {GraphViewComponent} from './graph-view.component'; - -describe('GraphViewComponent', () => { - let component: GraphViewComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [GraphViewComponent] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(GraphViewComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts deleted file mode 100644 index 35095044..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; -import * as cytoscape from 'cytoscape'; -import {GraphViewService} from '../graph-view.service'; - -@Component({ - selector: 'app-graph-view', - templateUrl: './graph-view.component.html', - styleUrls: ['./graph-view.component.css'] -}) -export class GraphViewComponent implements OnInit { - @ViewChild('cy') cyDiv: ElementRef; - private cy: cytoscape.Core; - - constructor(private graphViewService: GraphViewService) { - - } - - - ngOnInit() { - - this.cy = cytoscape({ - container: this.cyDiv.nativeElement, // container to render in - elements: [ // list of graph elements to start with - ], - layout: { - name: 'preset' - }, - style: [{ - selector: 'node', - style: { - label: 'data(name)', - 'background-image': 'data(image)', - 'width': '70%', - 'height': '70%', - 'background-opacity': 0, - - 'background-fit': 'contain', - 'background-clip': 'none', - } - } - ] - }); - - this.graphViewService.getElementObservable().subscribe((newElements: Array) => { - if (newElements) { - this.cy.add(newElements); - } - }); - - this.graphViewService.getElementRemoveObservable().subscribe((ids: Array) => { - if (ids) { - for (let i = 0; i < ids.length; i++) { - this.cy.remove(this.cy.getElementById(ids[i])); - } - } - }); - - } - -} diff --git a/client/src/app/dashboard/table-all/table-all.component.ts b/client/src/app/dashboard/table-all/table-all.component.ts index dca60184..c06e36b9 100644 --- a/client/src/app/dashboard/table-all/table-all.component.ts +++ b/client/src/app/dashboard/table-all/table-all.component.ts @@ -21,8 +21,9 @@ import { Component, OnInit, Input, ViewChild } from '@angular/core'; import { MatDialog, MatTable, MatPaginator, MatTableDataSource } from '@angular/material'; import { DeleteDialogComponent } from '../delete-dialog/delete-dialog.component'; import { AddDialogComponent } from '../add-dialog/add-dialog.component'; -import { ApiService } from '../../api/api/api.service'; import { HttpEvent } from '@angular/common/http'; +import { ModelService } from 'src/app/model/model.service'; +import { ApiService } from 'src/app/api/api/api.service'; @Component({ @@ -48,8 +49,7 @@ export class TableAllComponent implements OnInit { dialogResult: string; @ViewChild(MatTable) table: MatTable; - constructor(public dialog: MatDialog, private apiService: ApiService) { - + constructor(public dialog: MatDialog, private apiService: ApiService, private modelService: ModelService) { } @ViewChild(MatPaginator) paginator: MatPaginator; diff --git a/client/src/app/dashboard/webapp/webapp.component.ts b/client/src/app/dashboard/webapp/webapp.component.ts index 830eea8b..073c94e3 100644 --- a/client/src/app/dashboard/webapp/webapp.component.ts +++ b/client/src/app/dashboard/webapp/webapp.component.ts @@ -18,7 +18,7 @@ import {Component, OnInit} from '@angular/core'; import {ComponentTypeEnum, Instance} from '../../model/models/instance'; -import {ApiService} from '../../api/api/api.service'; +import { ModelService } from 'src/app/model/model.service'; @Component({ @@ -29,13 +29,13 @@ import {ApiService} from '../../api/api/api.service'; export class WebappComponent implements OnInit { // this array is inserted into the table all component in the html code tableData: Instance[]; - constructor(private apiService: ApiService) { + constructor(private modelService: ModelService) { } ngOnInit() { this.tableData = []; - this.apiService.getInstances(ComponentTypeEnum.WebApp).subscribe((result: Array) => { + this.modelService.getObservableForComps(ComponentTypeEnum.WebApp).subscribe((result: Array) => { this.tableData = result; }, err => { diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index c18815b0..a2d624a6 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -7,27 +7,31 @@ import {EventTypeEnum} from './models/socketMessage'; import {StateUpdate, Change, StoreService, Actions} from './store.service'; import {BehaviorSubject, Observable} from 'rxjs'; - +export interface InstanceChange extends Change { + allInstances?: { [id: number]: Instance }; +} @Injectable({ providedIn: 'root' }) export class ModelService { - private readonly instanceSubject: BehaviorSubject; + private readonly instanceSubject: BehaviorSubject; private readonly instanceIdSubjects: {[compType: string]: BehaviorSubject>}; private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { - this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); + this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); this.instanceIdSubjects = { 'Crawler': new BehaviorSubject>([]), - 'WebApp': new BehaviorSubject>([]), 'WebApi': new BehaviorSubject>([]) + 'WebApp': new BehaviorSubject>([]), + 'WebApi': new BehaviorSubject>([]) }; this.instanceSubjects = { 'Crawler': new BehaviorSubject>([]), - 'WebApp': new BehaviorSubject>([]), 'WebApi': new BehaviorSubject>([]) + 'WebApp': new BehaviorSubject>([]), + 'WebApi': new BehaviorSubject>([]) }; this.storeService.getStoreObservable().subscribe((state: StateUpdate) => { @@ -42,7 +46,7 @@ export class ModelService { // return; // } // }); - // + // changedCompTypes.forEach((compType) => { // this.instanceIdSubjects[compType].next(state.state.instancesByType[compType]); // const comps: Array = []; @@ -52,7 +56,7 @@ export class ModelService { // this.instanceSubjects[compType].next(comps); // }); - this.instanceSubject.next(state.change); + this.instanceSubject.next({...state.change, allInstances: state.state.instances}); }); this.socketService.initSocket().then(() => { @@ -95,7 +99,7 @@ export class ModelService { } public getObservableForInstances() { - return new Observable((observer) => { + return new Observable((observer) => { this.instanceSubject.subscribe(observer); observer.next(this.instanceSubject.value); diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 363ee4c2..7b58ec30 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -93,8 +93,6 @@ export class StoreService { } } - - public addInstanceToState(instance: Instance) { const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); // maybe calculate diff before From caac4284d5facd65fdb9b8ab817a9476dfc15317 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 27 Dec 2018 14:34:26 +0100 Subject: [PATCH 16/36] updated package.json version to start versioning according to milestones --- client/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/package.json b/client/package.json index 853d6417..45c27c89 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "client", - "version": "0.0.0", + "version": "0.8.0", "scripts": { "ng": "ng", "start": "ng serve", From a1d1fcb03e77c795d964f4431da1d4d2bc761fb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 27 Dec 2018 14:36:55 +0100 Subject: [PATCH 17/36] fixed compile errors regarding incorrect typescript version and missing package --- client/package-lock.json | 8 ++++---- client/src/app/dashboard/dashboard.module.ts | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 575901e2..61d18a0d 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,6 +1,6 @@ { "name": "client", - "version": "0.0.0", + "version": "0.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10174,9 +10174,9 @@ "dev": true }, "typescript": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", - "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", + "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", "dev": true }, "uglify-js": { diff --git a/client/src/app/dashboard/dashboard.module.ts b/client/src/app/dashboard/dashboard.module.ts index a859ef53..ffaaa202 100644 --- a/client/src/app/dashboard/dashboard.module.ts +++ b/client/src/app/dashboard/dashboard.module.ts @@ -36,7 +36,6 @@ import { UserProfileComponent } from './user-profile/user-profile.component'; import { DeleteDialogComponent } from './delete-dialog/delete-dialog.component'; import { AddDialogComponent } from './add-dialog/add-dialog.component'; import {ApiModule} from '../api/api.module'; -import {GraphViewModule} from './graph-view/graph-view.module'; import {ModelModule} from '../model/model.module'; import { MaterialModule } from '../material-module/material.module'; @@ -52,8 +51,7 @@ import { MaterialModule } from '../material-module/material.module'; DashboardRoutingModule, DashboardRoutingModule, ApiModule, - ModelModule, - GraphViewModule + ModelModule ], declarations: [ DashboardCardComponent, From 6a64bfbd53b41fb4e9ae81938d715e44eb08362b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 20:04:32 +0100 Subject: [PATCH 18/36] minor changes to store and model service. changed usage of api service to model service throughout the application --- client/src/app/api/api/api.service.ts | 3 - .../dashboard/crawler/crawler.component.ts | 7 +- .../dashboard-card.component.ts | 8 +- .../app/dashboard/dashboard.component.html | 3 +- .../app/dashboard/webapi/web-api.component.ts | 10 +-- .../app/dashboard/webapp/webapp.component.ts | 8 +- client/src/app/model/model.service.ts | 82 +++++++------------ client/src/app/model/store.service.ts | 7 +- 8 files changed, 50 insertions(+), 78 deletions(-) diff --git a/client/src/app/api/api/api.service.ts b/client/src/app/api/api/api.service.ts index 40390691..68e8e0a5 100644 --- a/client/src/app/api/api/api.service.ts +++ b/client/src/app/api/api/api.service.ts @@ -154,9 +154,6 @@ export class ApiService { } private get(endpoint: string, componentType?: string) { - if (componentType === null || componentType === undefined) { - throw new Error('Required parameter componentType was null or undefined when calling getInstanceNumber.'); - } let queryParameters = new HttpParams({ encoder: new CustomHttpUrlEncodingCodec() }); if (componentType !== undefined) { diff --git a/client/src/app/dashboard/crawler/crawler.component.ts b/client/src/app/dashboard/crawler/crawler.component.ts index fed3a43c..ededfd51 100644 --- a/client/src/app/dashboard/crawler/crawler.component.ts +++ b/client/src/app/dashboard/crawler/crawler.component.ts @@ -18,7 +18,8 @@ import {Component, OnInit} from '@angular/core'; import { Instance, ComponentType} from '../../model/models/instance'; -import { ModelService } from 'src/app/model/model.service'; +import { ModelService, InstanceChange } from 'src/app/model/model.service'; + @Component({ selector: 'app-crawler', @@ -36,8 +37,8 @@ export class CrawlerComponent implements OnInit { } ngOnInit() { - this.modelService.getObservableForComps(this.compType).subscribe((instances: Array) => { - this.tableData = instances; + this.modelService.getObservableForInstances().subscribe(() => { + this.tableData = this.modelService.getComponentsByType(this.compType); }); } diff --git a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts index f1b25e8c..4aeea6c6 100644 --- a/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts +++ b/client/src/app/dashboard/dashboard-card/dashboard-card.component.ts @@ -58,14 +58,12 @@ export class DashboardCardComponent implements OnInit { } ngOnInit() { - - this.modelService.getObservableForCompIds(this.componentType).subscribe((compIds) => { - this.numberOfInstances = '' + compIds.length; - }, (error) => { + this.modelService.getObservableForInstances().subscribe(() => { + this.numberOfInstances = '' + this.modelService.getComponentsByType(this.componentType).length; + }, (error: Error) => { console.log(error); this.numberOfInstances = 'No server connection'; }); - } diff --git a/client/src/app/dashboard/dashboard.component.html b/client/src/app/dashboard/dashboard.component.html index f6921bbc..7ba517de 100644 --- a/client/src/app/dashboard/dashboard.component.html +++ b/client/src/app/dashboard/dashboard.component.html @@ -17,5 +17,4 @@ --> route="header" componentType="dashboard-overview" - - + diff --git a/client/src/app/dashboard/webapi/web-api.component.ts b/client/src/app/dashboard/webapi/web-api.component.ts index 2dd9fdfc..b7258944 100644 --- a/client/src/app/dashboard/webapi/web-api.component.ts +++ b/client/src/app/dashboard/webapi/web-api.component.ts @@ -18,7 +18,7 @@ import {Component, OnInit} from '@angular/core'; import {ComponentTypeEnum, Instance} from '../../model/models/instance'; -import {ApiService} from '../../api/api/api.service'; +import { ModelService } from 'src/app/model/model.service'; @Component({ @@ -31,15 +31,13 @@ export class WebApiComponent implements OnInit { // this array is inserted into the table all component in the html code tableData: Instance[]; - constructor(private apiService: ApiService) { } + constructor(private modelService: ModelService) { } ngOnInit() { this.tableData = []; - this.apiService.getInstances(ComponentTypeEnum.WebApi).subscribe((result: Array) => { - this.tableData = result; - }, (err) => { - console.log('error during get instances for Web Api', err); + this.modelService.getObservableForInstances().subscribe(() => { + this.tableData = this.modelService.getComponentsByType(ComponentTypeEnum.WebApi); }); } diff --git a/client/src/app/dashboard/webapp/webapp.component.ts b/client/src/app/dashboard/webapp/webapp.component.ts index 073c94e3..16857f19 100644 --- a/client/src/app/dashboard/webapp/webapp.component.ts +++ b/client/src/app/dashboard/webapp/webapp.component.ts @@ -34,12 +34,8 @@ export class WebappComponent implements OnInit { ngOnInit() { this.tableData = []; - - this.modelService.getObservableForComps(ComponentTypeEnum.WebApp).subscribe((result: Array) => { - this.tableData = result; - - }, err => { - console.log('error during get instances for web app', err); + this.modelService.getObservableForInstances().subscribe(() => { + this.tableData = this.modelService.getComponentsByType(ComponentTypeEnum.WebApp); }); } diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index a2d624a6..481da3ad 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -1,7 +1,7 @@ import {Injectable} from '@angular/core'; import {SocketService} from '../api/api/socket.service'; import {ApiService} from '../api/api/api.service'; -import {ComponentType, Instance} from './models/instance'; +import {ComponentType, Instance, ComponentTypeEnum} from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; import {StateUpdate, Change, StoreService, Actions} from './store.service'; @@ -16,46 +16,31 @@ export interface InstanceChange extends Change { export class ModelService { private readonly instanceSubject: BehaviorSubject; - private readonly instanceIdSubjects: {[compType: string]: BehaviorSubject>}; - private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; + private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); - this.instanceIdSubjects = { + this.instanceSubjects = { 'Crawler': new BehaviorSubject>([]), 'WebApp': new BehaviorSubject>([]), 'WebApi': new BehaviorSubject>([]) }; - this.instanceSubjects = { - 'Crawler': new BehaviorSubject>([]), - 'WebApp': new BehaviorSubject>([]), - 'WebApi': new BehaviorSubject>([]) - }; - this.storeService.getStoreObservable().subscribe((state: StateUpdate) => { - - // const changedCompTypes = []; - // state.change.elements.forEach((changedInstance) => { - // const compType = changedInstance.componentType; - // if (!compType in changedCompTypes) { - // changedCompTypes.push(compType); - // } - // if (changedCompTypes.length === 3) { - // return; - // } - // }); - - // changedCompTypes.forEach((compType) => { - // this.instanceIdSubjects[compType].next(state.state.instancesByType[compType]); - // const comps: Array = []; - // state.state.instancesByType[compType].forEach((id) => { - // comps.push(state.state.instances[id]); + // if (state.change.elements) { + + // const types: Array = state.change.elements.reduce((accumulator, currentValue) => { + // const compType = currentValue.componentType; + // if (!accumulator.includes(compType)) { + // accumulator.push(compType); + // } + // return accumulator; + // }, []); + // types.forEach((type) => { + // this.instanceSubjects[type].next(state.state.instancesByType[type]); // }); - // this.instanceSubjects[compType].next(comps); - // }); - + // } this.instanceSubject.next({...state.change, allInstances: state.state.instances}); }); @@ -110,29 +95,24 @@ export class ModelService { }); } - public getObservableForComps(compType: ComponentType) { - return new Observable>((observer) => { - const compSubject = this.instanceSubjects[compType]; - compSubject.subscribe(observer); - observer.next(compSubject.value); - - return () => { - // TODO: see console log - console.log('observer completed, implement unsubscribe logic !'); - }; + public getComponentsByType(compType: ComponentType) { + const state = this.storeService.getState(); + return state.instancesByType[compType].map((id) => { + return state.instances[id]; }); } - public getObservableForCompIds(compType: ComponentType) { - return new Observable>((observer) => { - const compSubject = this.instanceIdSubjects[compType]; - compSubject.subscribe(observer); - observer.next(compSubject.value); + // public getObservableForComps(compType: ComponentType) { + // return new Observable>((observer) => { + // const compSubject = this.instanceSubjects[compType]; + // compSubject.subscribe(observer); + // observer.next(compSubject.value); + + // return () => { + // // TODO: see console log + // console.log('observer completed, implement unsubscribe logic !'); + // }; + // }); + // } - return () => { - // TODO: see console log - console.log('observer completed, implement unsubscribe logic !'); - }; - }); - } } diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 7b58ec30..9f673313 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -32,8 +32,11 @@ export class StoreService { private static addNewInstanceToState(state: State, instance: Instance) { state.instances[instance.id] = instance; - console.log('dding new instance to state', state, instance); - state.instancesByType[instance.componentType].push(instance.id); + const instancesByType = state.instancesByType[instance.componentType]; + // TODO: check if state actually is updated if variable is used + if (!instancesByType.includes(instance.id)) { + instancesByType.push(instance.id); + } return state; } From 47f4cefc86bb9c44866c8d3a640ff8957b45500c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 20:10:36 +0100 Subject: [PATCH 19/36] stopped logging the heartbeat message --- client/src/app/api/api/socket.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 526838b5..7def1924 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -138,12 +138,12 @@ export class SocketService { * @param e */ private socketOnMessage(e: MessageEvent) { - console.log('received socket message', e); try { const msg: RegistryEvent = JSON.parse(e.data); if (objectIsMessage(msg)) { - console.log('received socket message is message', msg); - + if (msg.eventType !== EventTypeEnum.Heartbeat) { + console.log('received socket message is message', msg); + } const {event, toSend} = this.getEventAndPayload(msg); const relevantSubject = this.observers[event]; From eb3dcd7fd550ad4b5268fb2ea485de23728c2ce5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 20:29:26 +0100 Subject: [PATCH 20/36] code cleanup and comments --- client/src/app/api/api/socket.service.ts | 8 +++--- client/src/app/model/model.service.ts | 35 +----------------------- client/src/app/model/store.service.ts | 5 ++++ 3 files changed, 10 insertions(+), 38 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 7def1924..c85b61f3 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -37,9 +37,6 @@ interface ObserverMap { [key: string]: Subject; } type ReturnType = Instance | InstanceLink | number | DockerOperationError; -@Injectable({ - providedIn: 'root' -}) /** * The SocketService is used to create a socket connection to the web server. @@ -48,9 +45,12 @@ type ReturnType = Instance | InstanceLink | number | DockerOperationError; * initSocket() has to be called in order to initiate the socket connection (if called * multiple times the same connection is returned). */ +@Injectable({ + providedIn: 'root' +}) export class SocketService { - readonly wsUri; + readonly wsUri: string; private socket: WebSocket; /** * This map is used to manage the observers interested in the defined events. diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index 481da3ad..fadbf8c5 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -1,7 +1,7 @@ import {Injectable} from '@angular/core'; import {SocketService} from '../api/api/socket.service'; import {ApiService} from '../api/api/api.service'; -import {ComponentType, Instance, ComponentTypeEnum} from './models/instance'; +import {ComponentType, Instance } from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; import {StateUpdate, Change, StoreService, Actions} from './store.service'; @@ -16,31 +16,11 @@ export interface InstanceChange extends Change { export class ModelService { private readonly instanceSubject: BehaviorSubject; - private readonly instanceSubjects: {[compType: string]: BehaviorSubject>}; constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); - this.instanceSubjects = { - 'Crawler': new BehaviorSubject>([]), - 'WebApp': new BehaviorSubject>([]), - 'WebApi': new BehaviorSubject>([]) - }; - this.storeService.getStoreObservable().subscribe((state: StateUpdate) => { - // if (state.change.elements) { - - // const types: Array = state.change.elements.reduce((accumulator, currentValue) => { - // const compType = currentValue.componentType; - // if (!accumulator.includes(compType)) { - // accumulator.push(compType); - // } - // return accumulator; - // }, []); - // types.forEach((type) => { - // this.instanceSubjects[type].next(state.state.instancesByType[type]); - // }); - // } this.instanceSubject.next({...state.change, allInstances: state.state.instances}); }); @@ -102,17 +82,4 @@ export class ModelService { }); } - // public getObservableForComps(compType: ComponentType) { - // return new Observable>((observer) => { - // const compSubject = this.instanceSubjects[compType]; - // compSubject.subscribe(observer); - // observer.next(compSubject.value); - - // return () => { - // // TODO: see console log - // console.log('observer completed, implement unsubscribe logic !'); - // }; - // }); - // } - } diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 9f673313..3a907b18 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -23,6 +23,11 @@ export interface Change { export const EMPTY_STATE = {instances: {}, instancesByType: {'Crawler': [], 'WebApi': [], 'WebApp': [], 'ElasticSearch': []}}; +/** + * This service is used to manage the shared state used in the whole application. + * Changes to the managed state can be made through the methods corresponding to the + * actions described in the Actions enum. + */ @Injectable({ providedIn: 'root' }) From 4a381c1d08d04c0de51dbedea865dca5acaec2c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 20:40:10 +0100 Subject: [PATCH 21/36] added comments to store class --- client/src/app/model/store.service.ts | 35 +++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 3a907b18..3d74639d 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -35,6 +35,10 @@ export class StoreService { private readonly stateUpdateSubject: BehaviorSubject; + /** + * Adds the given @param instance to the @param state. + * Any previous entry for the given instance is overwritten by this method. + */ private static addNewInstanceToState(state: State, instance: Instance) { state.instances[instance.id] = instance; const instancesByType = state.instancesByType[instance.componentType]; @@ -45,6 +49,10 @@ export class StoreService { return state; } + /** + * Removes the given @param instance from the @param state + * and @returns the new state + */ private static removeInstanceFromState(state: State, instance: Instance) { delete state.instances[instance.id]; state.instancesByType[instance.componentType] = state.instancesByType[instance.componentType].filter(e => e !== instance.id); @@ -52,6 +60,11 @@ export class StoreService { return state; } + /** + * This method iterates the given @param instances and compares them + * to the @param currentState. If the instances would result in the same + * state the method @returns false. + */ private static stateHasChanged(currentState: State, instances: Array) { const currentInstances = Object.values(currentState.instances); if (currentInstances.length === instances.length) { @@ -77,6 +90,9 @@ export class StoreService { this.stateUpdateSubject = new BehaviorSubject({state: EMPTY_STATE, change: {type: Actions.NONE}}); } + /** + * Retruns an observable which notifies the subscriber about any changes to the state. + */ public getStoreObservable(): Observable { return new Observable ((observer) => { this.stateUpdateSubject.subscribe(observer); @@ -85,11 +101,20 @@ export class StoreService { } + /** + * Returns the current state. + */ public getState() { return this.stateUpdateSubject.value.state; } + /** + * Adds the given @param instances to the state. + * If @param calculateDiff is true the state is only updated after a diff is calculated + * in order to permit unecessary state changes. + */ public addInstancesToState(instances: Array, calculateDiff= false) { + const newState: State = instances.reduce((accumulator: State, currentValue: Instance) => { return StoreService.addNewInstanceToState(accumulator, currentValue); }, EMPTY_STATE); @@ -101,18 +126,28 @@ export class StoreService { } } + /** + * Adds the given @param instance to the state. + */ public addInstanceToState(instance: Instance) { const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); // maybe calculate diff before this.stateUpdateSubject.next({state: newState, change: {type: Actions.ADD, elements: [instance]}}); } + /** + * Updates the given @param instance in the state. + * The update is performed by overwriting the previously stored instance. + */ public changeInstanceState(instance: Instance) { const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); // maybe calculate diff before this.stateUpdateSubject.next({state: newState, change: {type: Actions.CHANGE, elements: [instance]}}); } + /** + * Removes the given @param instance from the state. + */ public removeFromState(instance: Instance) { const newState = StoreService.removeInstanceFromState(this.stateUpdateSubject.value.state, instance); // maybe calculate diff before From f2f1b3bab16e1a3e0da4c3213140d24815c2b956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 21:04:06 +0100 Subject: [PATCH 22/36] commented the model service --- client/package-lock.json | 26 ++++++++++---------- client/src/app/model/model.service.ts | 34 ++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 16 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index 61d18a0d..f89208ae 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -2085,9 +2085,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000923", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz", - "integrity": "sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w==", + "version": "1.0.30000925", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000925.tgz", + "integrity": "sha512-zcYupoUxtW46rOikuDF7vfL9N1Qe9ZuUBTz3n3q8fFsoJIs/h9UN6Vg/0QpjsmvImXw9mVc3g+ZBfqvUz/iALA==", "dev": true }, "canonical-path": { @@ -5248,9 +5248,9 @@ } }, "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, "invariant": { @@ -6834,7 +6834,7 @@ }, "mute-stream": { "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "resolved": "http://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, @@ -6969,9 +6969,9 @@ } }, "node-releases": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.2.tgz", - "integrity": "sha512-j1gEV/zX821yxdWp/1vBMN0pSUjuH9oGUdLCb4PfUko6ZW7KdRs3Z+QGGwDUhYtSpQvdVVyLd2V0YvLsmdg5jQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.3.tgz", + "integrity": "sha512-6VrvH7z6jqqNFY200kdB6HdzkgM96Oaj9v3dqGfgp6mF+cHmU4wyQKZ2/WPDRVoR0Jz9KqbamaBN0ZhdUaysUQ==", "dev": true, "requires": { "semver": "^5.3.0" @@ -8865,9 +8865,9 @@ } }, "serialize-javascript": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.0.tgz", - "integrity": "sha512-AQxrNqu4EXWt03dJdgKXI+Au9+pvEuM5+Nk5g6+TmuxMCkEL03VhZ31HM+VKeaaZbFpDHaoSruiHq4PW9AIrOQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", + "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", "dev": true }, "serve-index": { diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index fadbf8c5..c833ccba 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -10,13 +10,26 @@ import {BehaviorSubject, Observable} from 'rxjs'; export interface InstanceChange extends Change { allInstances?: { [id: number]: Instance }; } + +/** + * This service is used to further abstract the acess to any data provided + * by @class ApiService and @class SocketService. + * The programmer should only interact with this class and the @class StoreService + * in order to receive information about the current state of the application. + */ @Injectable({ providedIn: 'root' }) export class ModelService { private readonly instanceSubject: BehaviorSubject; + private readonly updateCycle = 30000; + /** + * Subscribes to state updates at the @class StoreService and notifies every subscriber of the this service if + * a change to the store happens. + * Also periodically queries the ApiService every 30000ms (set in the updateCycle variable) for updates. + */ constructor(private socketService: SocketService, private apiService: ApiService, private storeService: StoreService) { this.instanceSubject = new BehaviorSubject({type: Actions.NONE}); @@ -28,17 +41,21 @@ export class ModelService { this.initInstances(); - setInterval(() => { this.updateAllInstances(true); - }, 30000); + }, updateCycle); }); } + /** + * Used to query all network information from the api service. + * Optionally a @param calculateDiff can be given to the @class StoreService + * to calculate a diff between the old and new state before applying an update. + */ private updateAllInstances(calculateDiff= false) { // get current instances and update the current state this.apiService.getInstanceNetwork().subscribe((network: Array) => { - console.log('received instacne response', network); + console.log('received instance response', network); // parse network to state and update after diff this.storeService.addInstancesToState(network, calculateDiff); }, (error) => { @@ -46,6 +63,10 @@ export class ModelService { }); } + /** + * Updates the state after receiving all instances from the api service. + * Subscribes to InstanceAdded and InstanceRemoved Events at the socket service. + */ private initInstances() { this.updateAllInstances(); // register for event updates @@ -63,6 +84,10 @@ export class ModelService { // this.socketService.subscribeForEvent<>(EventTypeEnum.LinkStateChangedEvent).subscribe(() => {}); } + /** + * Returns an observable, which notifies every subscriber about changes to the + * instance stored in the state. + */ public getObservableForInstances() { return new Observable((observer) => { this.instanceSubject.subscribe(observer); @@ -75,6 +100,9 @@ export class ModelService { }); } + /** + * Returns all instances of the given @params compType. + */ public getComponentsByType(compType: ComponentType) { const state = this.storeService.getState(); return state.instancesByType[compType].map((id) => { From eabfb4847ef8c91581f785dca557e393047cda9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 21:04:58 +0100 Subject: [PATCH 23/36] fixed stupid typo --- client/src/app/model/model.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index c833ccba..c3b80564 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -43,7 +43,7 @@ export class ModelService { setInterval(() => { this.updateAllInstances(true); - }, updateCycle); + }, this.updateCycle); }); } From 6b0310bb3474e4822991109b9dfac5063c0ed60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 30 Dec 2018 21:28:48 +0100 Subject: [PATCH 24/36] updated test cases to fit new modelservice --- .../dashboard/add-dialog/add-dialog.component.spec.ts | 6 ------ .../app/dashboard/crawler/crawler.component.spec.ts | 10 ++++------ client/src/app/dashboard/crawler/crawler.component.ts | 6 +++--- .../app/dashboard/webapi/web-api.component.spec.ts | 8 ++++---- .../src/app/dashboard/webapp/webapp.component.spec.ts | 8 ++++---- client/src/app/model/model.service.spec.ts | 11 ++++++++++- 6 files changed, 25 insertions(+), 24 deletions(-) diff --git a/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts b/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts index 18f24b6c..a9014064 100644 --- a/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts +++ b/client/src/app/dashboard/add-dialog/add-dialog.component.spec.ts @@ -40,12 +40,6 @@ describe('AddDialogComponent', () => { fixture.detectChanges(); }); - - it(`should create Add dialog Component`, async(inject([HttpTestingController, ApiService], - (httpClient: HttpTestingController, apiService: ApiService) => { - expect(apiService).toBeTruthy(); - }))); - it('should check for confirm button inside the Add dialog', () => { component.onConfirmAddInstance(); expect(mockDialogRef.close).toHaveBeenCalled(); diff --git a/client/src/app/dashboard/crawler/crawler.component.spec.ts b/client/src/app/dashboard/crawler/crawler.component.spec.ts index be911f3b..decc9a53 100644 --- a/client/src/app/dashboard/crawler/crawler.component.spec.ts +++ b/client/src/app/dashboard/crawler/crawler.component.spec.ts @@ -27,11 +27,10 @@ import { MatIconModule} from '@angular/material/icon'; import { MatDialogModule} from '@angular/material/dialog'; import { TableAllComponent } from '../table-all/table-all.component'; import { CrawlerComponent } from './crawler.component'; -import { ApiService } from 'src/app/api/api/api.service'; +import { ModelService } from 'src/app/model/model.service'; describe('CrawlerComponent', () => { - let component: CrawlerComponent; let fixture: ComponentFixture; beforeEach(async(() => { @@ -45,12 +44,11 @@ describe('CrawlerComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(CrawlerComponent); - component = fixture.componentInstance; fixture.detectChanges(); }); - it(`should create`, async(inject([HttpTestingController, ApiService], - (httpClient: HttpTestingController, apiService: ApiService) => { - expect(apiService).toBeTruthy(); + it(`should create`, async(inject([HttpTestingController, ModelService], + (modelService: ModelService) => { + expect(modelService).toBeTruthy(); }))); }); diff --git a/client/src/app/dashboard/crawler/crawler.component.ts b/client/src/app/dashboard/crawler/crawler.component.ts index ededfd51..feac89b9 100644 --- a/client/src/app/dashboard/crawler/crawler.component.ts +++ b/client/src/app/dashboard/crawler/crawler.component.ts @@ -17,8 +17,8 @@ */ import {Component, OnInit} from '@angular/core'; -import { Instance, ComponentType} from '../../model/models/instance'; -import { ModelService, InstanceChange } from 'src/app/model/model.service'; +import { Instance, ComponentType, ComponentTypeEnum} from '../../model/models/instance'; +import { ModelService } from 'src/app/model/model.service'; @Component({ @@ -38,7 +38,7 @@ export class CrawlerComponent implements OnInit { ngOnInit() { this.modelService.getObservableForInstances().subscribe(() => { - this.tableData = this.modelService.getComponentsByType(this.compType); + this.tableData = this.modelService.getComponentsByType(ComponentTypeEnum.Crawler); }); } diff --git a/client/src/app/dashboard/webapi/web-api.component.spec.ts b/client/src/app/dashboard/webapi/web-api.component.spec.ts index ad6fbfc2..fee3b842 100644 --- a/client/src/app/dashboard/webapi/web-api.component.spec.ts +++ b/client/src/app/dashboard/webapi/web-api.component.spec.ts @@ -22,8 +22,8 @@ import { HttpClientModule } from '@angular/common/http'; import { BrowserAnimationsModule} from '@angular/platform-browser/animations'; import { TableAllComponent } from '../table-all/table-all.component'; import { WebApiComponent } from './web-api.component'; -import { ApiService } from '../../api/api/api.service'; import { MaterialModule } from 'src/app/material-module/material.module'; +import { ModelService } from 'src/app/model/model.service'; describe('WebApiComponent', () => { @@ -43,8 +43,8 @@ describe('WebApiComponent', () => { fixture.detectChanges(); }); - it(`should create`, async(inject([HttpTestingController, ApiService], - (apiService: ApiService) => { - expect(apiService).toBeTruthy(); + it(`should create`, async(inject([HttpTestingController, ModelService], + (modelService: ModelService) => { + expect(modelService).toBeTruthy(); }))); }); diff --git a/client/src/app/dashboard/webapp/webapp.component.spec.ts b/client/src/app/dashboard/webapp/webapp.component.spec.ts index 2d6f764f..1c31ae77 100644 --- a/client/src/app/dashboard/webapp/webapp.component.spec.ts +++ b/client/src/app/dashboard/webapp/webapp.component.spec.ts @@ -22,8 +22,8 @@ import { HttpClientModule } from '@angular/common/http'; import { BrowserAnimationsModule} from '@angular/platform-browser/animations'; import { TableAllComponent } from '../table-all/table-all.component'; import { WebappComponent } from './webapp.component'; -import { ApiService } from 'src/app/api/api/api.service'; import { MaterialModule } from 'src/app/material-module/material.module'; +import { ModelService } from 'src/app/model/model.service'; describe('WebappComponent', () => { @@ -43,8 +43,8 @@ describe('WebappComponent', () => { fixture.detectChanges(); }); - it(`should create`, async(inject([HttpTestingController, ApiService], - (httpClient: HttpTestingController, apiService: ApiService) => { - expect(apiService).toBeTruthy(); + it(`should create`, async(inject([HttpTestingController, ModelService], + (modelService: ModelService) => { + expect(modelService).toBeTruthy(); }))); }); diff --git a/client/src/app/model/model.service.spec.ts b/client/src/app/model/model.service.spec.ts index a969d8a8..090ef597 100644 --- a/client/src/app/model/model.service.spec.ts +++ b/client/src/app/model/model.service.spec.ts @@ -1,9 +1,18 @@ import {TestBed} from '@angular/core/testing'; import {ModelService} from './model.service'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; +import { HttpClientModule } from '@angular/common/http'; describe('ModelService', () => { - beforeEach(() => TestBed.configureTestingModule({})); + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule, HttpClientModule], + providers: [ModelService], + }); + +}); it('should be created', () => { const service: ModelService = TestBed.get(ModelService); From 8b78d5690b65d4263339f2aee1cf6458f9896e6f Mon Sep 17 00:00:00 2001 From: Jan-Niclas Struewer Date: Wed, 2 Jan 2019 11:28:52 +0100 Subject: [PATCH 25/36] reintroduced graph view compnent which accidently got deleted in the last merge --- client/package-lock.json | 739 ++++++++---------- client/package.json | 2 +- .../app/dashboard/dashboard.component.html | 3 +- client/src/app/dashboard/dashboard.module.ts | 4 +- .../dashboard/graph-view/graph-view.module.ts | 17 + .../graph-view/graph-view.service.spec.ts | 12 + .../graph-view/graph-view.service.ts | 91 +++ .../graph-view/graph-view.component.css | 5 + .../graph-view/graph-view.component.html | 1 + .../graph-view/graph-view.component.spec.ts | 25 + .../graph-view/graph-view.component.ts | 60 ++ 11 files changed, 542 insertions(+), 417 deletions(-) create mode 100644 client/src/app/dashboard/graph-view/graph-view.module.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view.service.spec.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view.service.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.css create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.html create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts create mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts diff --git a/client/package-lock.json b/client/package-lock.json index f89208ae..bd335d3f 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5,28 +5,28 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.10.7.tgz", - "integrity": "sha512-S49LSslNRxIflHzrIrEgK7mGQ7HzETr/FU0fyTbB0vubcmfzMoYTsgYdK7SUz583lovc+UvASoUAhPJI3e35ng==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.4.tgz", + "integrity": "sha512-2zi6S9tPlk52vyqN67IvFoeNgd0uxtrPlwl3TdvJ3wrH7sYGJnkQ+EzAE7cKUGWAV989BbNtx2YxhRDHnN21Fg==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.7", + "@angular-devkit/core": "7.1.4", "rxjs": "6.3.3" } }, "@angular-devkit/build-angular": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.10.7.tgz", - "integrity": "sha512-wjhlMWWkGSSkdwd9elKfeeEgyig/eZGyF2wY5kZmWPBdeK/GfdBLyO15qh4ppRYI2SjyRvzl0tWDOA2Y0hKL0w==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.4.tgz", + "integrity": "sha512-5WQAQB4heDqAotqjU3Tl8Ons0S/e16dKwVkQFdqfKPyBgmu4CyUH35eTV+i6i7un1Elg65U5GnA4MiUtApqVyw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.7", - "@angular-devkit/build-optimizer": "0.10.7", - "@angular-devkit/build-webpack": "0.10.7", - "@angular-devkit/core": "7.0.7", - "@ngtools/webpack": "7.0.7", + "@angular-devkit/architect": "0.11.4", + "@angular-devkit/build-optimizer": "0.11.4", + "@angular-devkit/build-webpack": "0.11.4", + "@angular-devkit/core": "7.1.4", + "@ngtools/webpack": "7.1.4", "ajv": "6.5.3", - "autoprefixer": "9.1.5", + "autoprefixer": "9.3.1", "circular-dependency-plugin": "5.0.2", "clean-css": "4.2.1", "copy-webpack-plugin": "4.5.4", @@ -39,9 +39,9 @@ "less-loader": "4.1.0", "license-webpack-plugin": "2.0.2", "loader-utils": "1.1.0", - "mini-css-extract-plugin": "0.4.3", + "mini-css-extract-plugin": "0.4.4", "minimatch": "3.0.4", - "node-sass": "4.9.3", + "node-sass": "4.10.0", "opn": "5.3.0", "parse5": "4.0.0", "portfinder": "1.0.17", @@ -54,18 +54,18 @@ "semver": "5.5.1", "source-map-loader": "0.2.4", "source-map-support": "0.5.9", - "speed-measure-webpack-plugin": "^1.2.3", + "speed-measure-webpack-plugin": "1.2.3", "stats-webpack-plugin": "0.7.0", - "style-loader": "0.23.0", + "style-loader": "0.23.1", "stylus": "0.54.5", "stylus-loader": "3.0.2", "terser-webpack-plugin": "1.1.0", "tree-kill": "1.2.0", - "webpack": "4.19.1", - "webpack-dev-middleware": "3.3.0", - "webpack-dev-server": "3.1.8", + "webpack": "4.23.1", + "webpack-dev-middleware": "3.4.0", + "webpack-dev-server": "3.1.10", "webpack-merge": "4.1.4", - "webpack-sources": "1.2.0", + "webpack-sources": "1.3.0", "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { @@ -78,9 +78,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.10.7.tgz", - "integrity": "sha512-Ztj2U21B8zRO2csQS8mLv/+WKPPLePzaqJDk53Ou2r2HV+kh9GzYvgu1UFeGf/RyEeJi+9KnJGG2wPaeNqDNxg==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.4.tgz", + "integrity": "sha512-tAAWWFCcl918Q1JivlLvLFer8Qm4/THWbEneMwk5fQvG6/NgJLoa3itP/MCUq4qL6YHmp2DWkdWnWfRQCgHeFA==", "dev": true, "requires": { "loader-utils": "1.1.0", @@ -91,7 +91,7 @@ "dependencies": { "source-map": { "version": "0.5.6", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true }, @@ -100,24 +100,42 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", "dev": true + }, + "webpack-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } } } }, "@angular-devkit/build-webpack": { - "version": "0.10.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.10.7.tgz", - "integrity": "sha512-sUzgIhm5yWHvRo3GF6mc1J58PCuY5nJDF2vlE8Jhlwkq+/VbJ/NVfTDYRQCeqI1jLcdMaVrVQXnXAWc4KpFNig==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.4.tgz", + "integrity": "sha512-4nEDXSbv3oDu27Rw5s2DMKmcOZYVAt76bryVF2SycSkDq3eAIiqmgw3G3CJJ4LTulXzDpaIpk02MvgbYkX+hvw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.10.7", - "@angular-devkit/core": "7.0.7", + "@angular-devkit/architect": "0.11.4", + "@angular-devkit/core": "7.1.4", "rxjs": "6.3.3" } }, "@angular-devkit/core": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.0.7.tgz", - "integrity": "sha512-M8tTT9r3nUtWI3YyiyynHIQn+lQQgeKkxVZ+rdxvyvgE3U9+wn0yep5HkFLQETTuJetu9ARRRD94sD2XL3F/3A==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", + "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", "dev": true, "requires": { "ajv": "6.5.3", @@ -438,7 +456,7 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, @@ -795,16 +813,34 @@ } }, "@ngtools/webpack": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.0.7.tgz", - "integrity": "sha512-ukZv/8vhiVWLsEEWF1uena8GHRVUpwbPJ+8AupW25d2nNpwfsDtTIXKzTzRYeIQFFCnHJxr04lK18CVsn1lFaQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.4.tgz", + "integrity": "sha512-8A15TPJzg3g7yI70QvBzJ253P32WAgCVre9nMaDdd22UmlbvN8Ke4RuQY7vYVTECLL+bWpFJEFXL+ThzCRUgeA==", "dev": true, "requires": { - "@angular-devkit/core": "7.0.7", + "@angular-devkit/core": "7.1.4", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.0", "webpack-sources": "1.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "webpack-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + } } }, "@schematics/angular": { @@ -893,7 +929,7 @@ }, "@types/q": { "version": "0.0.32", - "resolved": "http://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, @@ -904,179 +940,174 @@ "dev": true }, "@webassemblyjs/ast": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.6.tgz", - "integrity": "sha512-8nkZS48EVsMUU0v6F1LCIOw4RYWLm2plMtbhFTjNgeXmsTNLuU3xTRtnljt9BFQB+iPbLRobkNrCWftWnNC7wQ==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.10.tgz", + "integrity": "sha512-wTUeaByYN2EA6qVqhbgavtGc7fLTOx0glG2IBsFlrFG51uXIGlYBTyIZMf4SPLo3v1bgV/7lBN3l7Z0R6Hswew==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", - "mamacro": "^0.0.3" + "@webassemblyjs/helper-module-context": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/wast-parser": "1.7.10" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.6.tgz", - "integrity": "sha512-VBOZvaOyBSkPZdIt5VBMg3vPWxouuM13dPXGWI1cBh3oFLNcFJ8s9YA7S9l4mPI7+Q950QqOmqj06oa83hNWBA==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.10.tgz", + "integrity": "sha512-gMsGbI6I3p/P1xL2UxqhNh1ga2HCsx5VBB2i5VvJFAaqAjd2PBTRULc3BpTydabUQEGlaZCzEUQhLoLG7TvEYQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.6.tgz", - "integrity": "sha512-SCzhcQWHXfrfMSKcj8zHg1/kL9kb3aa5TN4plc/EREOs5Xop0ci5bdVBApbk2yfVi8aL+Ly4Qpp3/TRAUInjrg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.10.tgz", + "integrity": "sha512-DoYRlPWtuw3yd5BOr9XhtrmB6X1enYF0/54yNvQWGXZEPDF5PJVNI7zQ7gkcKfTESzp8bIBWailaFXEK/jjCsw==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.6.tgz", - "integrity": "sha512-1/gW5NaGsEOZ02fjnFiU8/OEEXU1uVbv2um0pQ9YVL3IHSkyk6xOwokzyqqO1qDZQUAllb+V8irtClPWntbVqw==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.10.tgz", + "integrity": "sha512-+RMU3dt/dPh4EpVX4u5jxsOlw22tp3zjqE0m3ftU2tsYxnPULb4cyHlgaNd2KoWuwasCQqn8Mhr+TTdbtj3LlA==", "dev": true }, "@webassemblyjs/helper-code-frame": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.6.tgz", - "integrity": "sha512-+suMJOkSn9+vEvDvgyWyrJo5vJsWSDXZmJAjtoUq4zS4eqHyXImpktvHOZwXp1XQjO5H+YQwsBgqTQEc0J/5zg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.10.tgz", + "integrity": "sha512-UiytbpKAULOEab2hUZK2ywXen4gWJVrgxtwY3Kn+eZaaSWaRM8z/7dAXRSoamhKFiBh1uaqxzE/XD9BLlug3gw==", "dev": true, "requires": { - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/wast-printer": "1.7.10" } }, "@webassemblyjs/helper-fsm": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.6.tgz", - "integrity": "sha512-HCS6KN3wgxUihGBW7WFzEC/o8Eyvk0d56uazusnxXthDPnkWiMv+kGi9xXswL2cvfYfeK5yiM17z2K5BVlwypw==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.10.tgz", + "integrity": "sha512-w2vDtUK9xeSRtt5+RnnlRCI7wHEvLjF0XdnxJpgx+LJOvklTZPqWkuy/NhwHSLP19sm9H8dWxKeReMR7sCkGZA==", "dev": true }, "@webassemblyjs/helper-module-context": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.6.tgz", - "integrity": "sha512-e8/6GbY7OjLM+6OsN7f2krC2qYVNaSr0B0oe4lWdmq5sL++8dYDD1TFbD1TdAdWMRTYNr/Qq7ovXWzia2EbSjw==", - "dev": true, - "requires": { - "mamacro": "^0.0.3" - } + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.10.tgz", + "integrity": "sha512-yE5x/LzZ3XdPdREmJijxzfrf+BDRewvO0zl8kvORgSWmxpRrkqY39KZSq6TSgIWBxkK4SrzlS3BsMCv2s1FpsQ==", + "dev": true }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.6.tgz", - "integrity": "sha512-PzYFCb7RjjSdAOljyvLWVqd6adAOabJW+8yRT+NWhXuf1nNZWH+igFZCUK9k7Cx7CsBbzIfXjJc7u56zZgFj9Q==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.10.tgz", + "integrity": "sha512-u5qy4SJ/OrxKxZqJ9N3qH4ZQgHaAzsopsYwLvoWJY6Q33r8PhT3VPyNMaJ7ZFoqzBnZlCcS/0f4Sp8WBxylXfg==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.6.tgz", - "integrity": "sha512-3GS628ppDPSuwcYlQ7cDCGr4W2n9c4hLzvnRKeuz+lGsJSmc/ADVoYpm1ts2vlB1tGHkjtQMni+yu8mHoMlKlA==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.10.tgz", + "integrity": "sha512-Ecvww6sCkcjatcyctUrn22neSJHLN/TTzolMGG/N7S9rpbsTZ8c6Bl98GpSpV77EvzNijiNRHBG0+JO99qKz6g==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10" } }, "@webassemblyjs/ieee754": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.6.tgz", - "integrity": "sha512-V4cIp0ruyw+hawUHwQLn6o2mFEw4t50tk530oKsYXQhEzKR+xNGDxs/SFFuyTO7X3NzEu4usA3w5jzhl2RYyzQ==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.10.tgz", + "integrity": "sha512-HRcWcY+YWt4+s/CvQn+vnSPfRaD4KkuzQFt5MNaELXXHSjelHlSEA8ZcqT69q0GTIuLWZ6JaoKar4yWHVpZHsQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.6.tgz", - "integrity": "sha512-ojdlG8WpM394lBow4ncTGJoIVZ4aAtNOWHhfAM7m7zprmkVcKK+2kK5YJ9Bmj6/ketTtOn7wGSHCtMt+LzqgYQ==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.10.tgz", + "integrity": "sha512-og8MciYlA8hvzCLR71hCuZKPbVBfLQeHv7ImKZ4nlyxrYbG7uJHYtHiHu6OV9SqrGuD03H/HtXC4Bgdjfm9FHw==", "dev": true, "requires": { "@xtuc/long": "4.2.1" } }, "@webassemblyjs/utf8": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.6.tgz", - "integrity": "sha512-oId+tLxQ+AeDC34ELRYNSqJRaScB0TClUU6KQfpB8rNT6oelYlz8axsPhf6yPTg7PBJ/Z5WcXmUYiHEWgbbHJw==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.10.tgz", + "integrity": "sha512-Ng6Pxv6siyZp635xCSnH3mKmIFgqWPCcGdoo0GBYgyGdxu7cUj4agV7Uu1a8REP66UYUFXJLudeGgd4RvuJAnQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.6.tgz", - "integrity": "sha512-pTNjLO3o41v/Vz9VFLl+I3YLImpCSpodFW77pNoH4agn5I6GgSxXHXtvWDTvYJFty0jSeXZWLEmbaSIRUDlekg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.10.tgz", + "integrity": "sha512-e9RZFQlb+ZuYcKRcW9yl+mqX/Ycj9+3/+ppDI8nEE/NCY6FoK8f3dKBcfubYV/HZn44b+ND4hjh+4BYBt+sDnA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/helper-wasm-section": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-opt": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", - "@webassemblyjs/wast-printer": "1.7.6" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/helper-wasm-section": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10", + "@webassemblyjs/wasm-opt": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10", + "@webassemblyjs/wast-printer": "1.7.10" } }, "@webassemblyjs/wasm-gen": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.6.tgz", - "integrity": "sha512-mQvFJVumtmRKEUXMohwn8nSrtjJJl6oXwF3FotC5t6e2hlKMh8sIaW03Sck2MDzw9xPogZD7tdP5kjPlbH9EcQ==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.10.tgz", + "integrity": "sha512-M0lb6cO2Y0PzDye/L39PqwV+jvO+2YxEG5ax+7dgq7EwXdAlpOMx1jxyXJTScQoeTpzOPIb+fLgX/IkLF8h2yw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/ieee754": "1.7.10", + "@webassemblyjs/leb128": "1.7.10", + "@webassemblyjs/utf8": "1.7.10" } }, "@webassemblyjs/wasm-opt": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.6.tgz", - "integrity": "sha512-go44K90fSIsDwRgtHhX14VtbdDPdK2sZQtZqUcMRvTojdozj5tLI0VVJAzLCfz51NOkFXezPeVTAYFqrZ6rI8Q==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.10.tgz", + "integrity": "sha512-R66IHGCdicgF5ZliN10yn5HaC7vwYAqrSVJGjtJJQp5+QNPBye6heWdVH/at40uh0uoaDN/UVUfXK0gvuUqtVg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-buffer": "1.7.6", - "@webassemblyjs/wasm-gen": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-buffer": "1.7.10", + "@webassemblyjs/wasm-gen": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10" } }, "@webassemblyjs/wasm-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.6.tgz", - "integrity": "sha512-t1T6TfwNY85pDA/HWPA8kB9xA4sp9ajlRg5W7EKikqrynTyFo+/qDzIpvdkOkOGjlS6d4n4SX59SPuIayR22Yg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.10.tgz", + "integrity": "sha512-AEv8mkXVK63n/iDR3T693EzoGPnNAwKwT3iHmKJNBrrALAhhEjuPzo/lTE4U7LquEwyvg5nneSNdTdgrBaGJcA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-wasm-bytecode": "1.7.6", - "@webassemblyjs/ieee754": "1.7.6", - "@webassemblyjs/leb128": "1.7.6", - "@webassemblyjs/utf8": "1.7.6" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-api-error": "1.7.10", + "@webassemblyjs/helper-wasm-bytecode": "1.7.10", + "@webassemblyjs/ieee754": "1.7.10", + "@webassemblyjs/leb128": "1.7.10", + "@webassemblyjs/utf8": "1.7.10" } }, "@webassemblyjs/wast-parser": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.6.tgz", - "integrity": "sha512-1MaWTErN0ziOsNUlLdvwS+NS1QWuI/kgJaAGAMHX8+fMJFgOJDmN/xsG4h/A1Gtf/tz5VyXQciaqHZqp2q0vfg==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.10.tgz", + "integrity": "sha512-YTPEtOBljkCL0VjDp4sHe22dAYSm3ZwdJ9+2NTGdtC7ayNvuip1wAhaAS8Zt9Q6SW9E5Jf5PX7YE3XWlrzR9cw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/floating-point-hex-parser": "1.7.6", - "@webassemblyjs/helper-api-error": "1.7.6", - "@webassemblyjs/helper-code-frame": "1.7.6", - "@webassemblyjs/helper-fsm": "1.7.6", - "@xtuc/long": "4.2.1", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/floating-point-hex-parser": "1.7.10", + "@webassemblyjs/helper-api-error": "1.7.10", + "@webassemblyjs/helper-code-frame": "1.7.10", + "@webassemblyjs/helper-fsm": "1.7.10", + "@xtuc/long": "4.2.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.6.tgz", - "integrity": "sha512-vHdHSK1tOetvDcl1IV1OdDeGNe/NDDQ+KzuZHMtqTVP1xO/tZ/IKNpj5BaGk1OYFdsDWQqb31PIwdEyPntOWRQ==", + "version": "1.7.10", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.10.tgz", + "integrity": "sha512-mJ3QKWtCchL1vhU/kZlJnLPuQZnlDOdZsyP0bbLWPGdYsQDnSBvyTLhzwBA3QAMlzEL9V4JHygEmK6/OTEyytA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/wast-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/wast-parser": "1.7.10", "@xtuc/long": "4.2.1" } }, @@ -1304,7 +1335,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "dev": true, + "optional": true }, "array-flatten": { "version": "2.1.2", @@ -1395,7 +1427,7 @@ }, "util": { "version": "0.10.3", - "resolved": "http://registry.npmjs.org/util/-/util-0.10.3.tgz", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { @@ -1418,7 +1450,7 @@ }, "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, @@ -1454,17 +1486,17 @@ "dev": true }, "autoprefixer": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.1.5.tgz", - "integrity": "sha512-kk4Zb6RUc58ld7gdosERHMF3DzIYJc2fp5sX46qEsGXQQy5bXsu8qyLjoxuY1NuQ/cJuCYnx99BfjwnRggrYIw==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.3.1.tgz", + "integrity": "sha512-DY9gOh8z3tnCbJ13JIWaeQsoYncTGdsrgCceBaQSIL4nvdrLxgbRSBPevg2XbX7u4QCSfLheSJEEIUUSlkbx6Q==", "dev": true, "requires": { - "browserslist": "^4.1.0", - "caniuse-lite": "^1.0.30000884", + "browserslist": "^4.3.3", + "caniuse-lite": "^1.0.30000898", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.2", - "postcss-value-parser": "^3.2.3" + "postcss": "^7.0.5", + "postcss-value-parser": "^3.3.1" } }, "aws-sign2": { @@ -1498,7 +1530,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -1511,7 +1543,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } @@ -1756,7 +1788,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -1928,14 +1960,14 @@ } }, "browserslist": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.6.tgz", - "integrity": "sha512-kMGKs4BTzRWviZ8yru18xBpx+CyHG9eqgRbj9XbE3IMgtczf4aiA0Y1YCpVdvUieKGZ03kolSPXqTcscBCb9qw==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz", + "integrity": "sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000921", - "electron-to-chromium": "^1.3.92", - "node-releases": "^1.1.1" + "caniuse-lite": "^1.0.30000925", + "electron-to-chromium": "^1.3.96", + "node-releases": "^1.1.3" } }, "browserstack": { @@ -2024,7 +2056,7 @@ }, "cacache": { "version": "10.0.4", - "resolved": "http://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { @@ -2075,7 +2107,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "optional": true, @@ -2085,9 +2117,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000925", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000925.tgz", - "integrity": "sha512-zcYupoUxtW46rOikuDF7vfL9N1Qe9ZuUBTz3n3q8fFsoJIs/h9UN6Vg/0QpjsmvImXw9mVc3g+ZBfqvUz/iALA==", + "version": "1.0.30000926", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000926.tgz", + "integrity": "sha512-diMkEvxfFw09SkbErCLmw/1Fx1ZZe9xfWm4aeA2PUffB48x1tfZeMsK5j4BW7zN7Y4PdqmPVVdG2eYjE5IRTag==", "dev": true }, "canonical-path": { @@ -2328,7 +2360,7 @@ }, "colors": { "version": "1.1.2", - "resolved": "http://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, @@ -2418,7 +2450,7 @@ }, "concat-stream": { "version": "1.6.2", - "resolved": "http://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { @@ -2492,7 +2524,7 @@ }, "content-disposition": { "version": "0.5.2", - "resolved": "http://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", "dev": true }, @@ -2698,6 +2730,7 @@ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, + "optional": true, "requires": { "array-find-index": "^1.0.1" } @@ -2861,7 +2894,7 @@ "dependencies": { "globby": { "version": "6.1.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -2874,7 +2907,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -3119,7 +3152,7 @@ }, "engine.io-client": { "version": "3.2.1", - "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { @@ -3209,7 +3242,7 @@ }, "es6-promisify": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { @@ -3243,7 +3276,7 @@ "dependencies": { "source-map": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", "dev": true, "optional": true, @@ -3325,12 +3358,12 @@ "dev": true }, "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "original": ">=0.0.5" + "original": "^1.0.0" } }, "evp_bytestokey": { @@ -3407,7 +3440,7 @@ }, "expand-range": { "version": "0.1.1", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { @@ -3466,7 +3499,7 @@ }, "expand-range": { "version": "1.8.2", - "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { @@ -3555,7 +3588,7 @@ "dependencies": { "array-flatten": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true } @@ -3919,7 +3952,7 @@ }, "fs-access": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { @@ -4675,7 +4708,7 @@ }, "handle-thing": { "version": "1.2.5", - "resolved": "http://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", "dev": true }, @@ -4888,7 +4921,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { @@ -5288,7 +5321,7 @@ }, "is-accessor-descriptor": { "version": "0.1.6", - "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { @@ -5329,7 +5362,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { @@ -5338,7 +5371,7 @@ }, "is-data-descriptor": { "version": "0.1.4", - "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { @@ -5904,7 +5937,7 @@ }, "jsesc": { "version": "1.3.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, @@ -5977,13 +6010,13 @@ "dependencies": { "core-js": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", "dev": true }, "es6-promise": { "version": "3.0.2", - "resolved": "http://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", "dev": true }, @@ -5995,7 +6028,7 @@ }, "readable-stream": { "version": "2.0.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { @@ -6009,7 +6042,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -6077,7 +6110,7 @@ }, "karma-cli": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", "dev": true, "requires": { @@ -6225,7 +6258,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -6345,6 +6378,7 @@ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, + "optional": true, "requires": { "currently-unhandled": "^0.4.1", "signal-exit": "^3.0.0" @@ -6481,12 +6515,6 @@ } } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", - "dev": true - }, "map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -6541,7 +6569,7 @@ }, "media-typer": { "version": "0.3.0", - "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, @@ -6568,7 +6596,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "optional": true, @@ -6666,9 +6694,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.3.tgz", - "integrity": "sha512-Mxs0nxzF1kxPv4TRi2NimewgXlJqh0rGE30vviCU2WHrpbta6wklnUV9dr9FUtoAHmB3p3LeXEC+ZjgHvB0Dzg==", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.4.tgz", + "integrity": "sha512-o+Jm+ocb0asEngdM6FsZWtZsRzA8koFUudIDwYUfl94M3PejPHG7Vopw5hN9V8WsMkSFpm3tZP3Fesz89EyrfQ==", "dev": true, "requires": { "loader-utils": "^1.1.0", @@ -6699,7 +6727,7 @@ }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, @@ -6789,7 +6817,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "requires": { @@ -6834,7 +6862,7 @@ }, "mute-stream": { "version": "0.0.7", - "resolved": "http://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, @@ -6922,7 +6950,7 @@ "dependencies": { "semver": { "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true, "optional": true @@ -6978,9 +7006,9 @@ } }, "node-sass": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", - "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.10.0.tgz", + "integrity": "sha512-fDQJfXszw6vek63Fe/ldkYXmRYK/QS6NbvM3i5oEo9ntPDy4XX7BcKZyTKv+/kSSxRtXXc7l+MSwEmYc0CSy6Q==", "dev": true, "optional": true, "requires": { @@ -6999,25 +7027,12 @@ "nan": "^2.10.0", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", - "request": "2.87.0", + "request": "^2.88.0", "sass-graph": "^2.2.4", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -7039,90 +7054,12 @@ "supports-color": "^2.0.0" } }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^5.1.0", - "har-schema": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true, - "optional": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", - "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.17", - "oauth-sign": "~0.8.2", - "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" - } - }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "http://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "optional": true, - "requires": { - "punycode": "^1.4.1" - } } } }, @@ -7439,7 +7376,7 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, @@ -7455,7 +7392,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, @@ -7766,7 +7703,7 @@ }, "path-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", "dev": true }, @@ -7784,7 +7721,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, @@ -8041,7 +7978,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -8069,7 +8006,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -8083,13 +8020,13 @@ }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -8110,7 +8047,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, @@ -8298,7 +8235,7 @@ }, "raw-loader": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", "dev": true }, @@ -8313,7 +8250,7 @@ "dependencies": { "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -8343,7 +8280,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true } @@ -8382,7 +8319,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { @@ -8465,7 +8402,7 @@ }, "regexpu-core": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { @@ -8476,13 +8413,13 @@ }, "regjsgen": { "version": "0.2.0", - "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", - "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { @@ -8491,7 +8428,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } @@ -8578,7 +8515,7 @@ }, "resolve": { "version": "1.1.7", - "resolved": "http://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, @@ -8684,7 +8621,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -8763,7 +8700,7 @@ "dependencies": { "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "optional": true, @@ -9190,7 +9127,7 @@ }, "socket.io-parser": { "version": "3.2.0", - "resolved": "http://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { @@ -9227,19 +9164,28 @@ } }, "sockjs-client": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "url-parse": "^1.4.3" }, "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", @@ -9248,6 +9194,12 @@ "requires": { "websocket-driver": ">=0.5.1" } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -9409,9 +9361,9 @@ } }, "speed-measure-webpack-plugin": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.5.tgz", - "integrity": "sha512-S/guYjC4Izn5wY2d0+M4zowED/F77Lxh9yjkTZ+XAr244pr9c1MYNcXcRe9lx2hmAj0GPbOrBXgOF2YIp/CZ8A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-p+taQ69VkRUXYMoZOx2nxV/Tz8tt79ahctoZJyJDHWP7fEYvwFNf5Pd73k5kZ6auu0pTsPNLEUwWpM8mCk85Zw==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -9428,7 +9380,7 @@ }, "sprintf-js": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, @@ -9506,7 +9458,7 @@ }, "stream-browserify": { "version": "2.0.1", - "resolved": "http://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { @@ -9574,7 +9526,7 @@ }, "string-width": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { @@ -9585,7 +9537,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { @@ -9594,7 +9546,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { @@ -9612,7 +9564,7 @@ }, "strip-eof": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, @@ -9627,25 +9579,13 @@ } }, "style-loader": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz", - "integrity": "sha512-uCcN7XWHkqwGVt7skpInW6IGO1tG6ReyFQ1Cseh0VcN6VdcFQi62aG/2F3Y9ueA8x4IVlfaSUxpmQXQD9QrEuQ==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" - }, - "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "schema-utils": "^1.0.0" } }, "stylus": { @@ -9678,7 +9618,7 @@ }, "source-map": { "version": "0.1.43", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { @@ -9721,7 +9661,7 @@ }, "tar": { "version": "2.2.1", - "resolved": "http://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, "optional": true, @@ -9732,9 +9672,9 @@ } }, "terser": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.13.1.tgz", - "integrity": "sha512-ogyZye4DFqOtMzT92Y3Nxxw8OvXmL39HOALro4fc+EUYFFF9G/kk0znkvwMz6PPYgBtdKAodh3FPR70eugdaQA==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.0.tgz", + "integrity": "sha512-KQC1QNKbC/K1ZUjLIWsezW7wkTJuB4v9ptQQUNOzAPVHuVf2LrwEcB0I9t2HTEYUwAFVGiiS6wc+P4ClLDc5FQ==", "dev": true, "requires": { "commander": "~2.17.1", @@ -9913,7 +9853,7 @@ }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, @@ -10076,7 +10016,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } @@ -10129,7 +10069,7 @@ }, "tty-browserify": { "version": "0.0.0", - "resolved": "http://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, @@ -10393,12 +10333,6 @@ } } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, "url-parse": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", @@ -10490,7 +10424,7 @@ }, "vm-browserify": { "version": "0.0.4", - "resolved": "http://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", "dev": true, "requires": { @@ -10534,15 +10468,15 @@ } }, "webpack": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.19.1.tgz", - "integrity": "sha512-j7Q/5QqZRqIFXJvC0E59ipLV5Hf6lAnS3ezC3I4HMUybwEDikQBVad5d+IpPtmaQPQArvgUZLXIN6lWijHBn4g==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.23.1.tgz", + "integrity": "sha512-iE5Cu4rGEDk7ONRjisTOjVHv3dDtcFfwitSxT7evtYj/rANJpt1OuC/Kozh1pBa99AUBr1L/LsaNB+D9Xz3CEg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.7.6", - "@webassemblyjs/helper-module-context": "1.7.6", - "@webassemblyjs/wasm-edit": "1.7.6", - "@webassemblyjs/wasm-parser": "1.7.6", + "@webassemblyjs/ast": "1.7.10", + "@webassemblyjs/helper-module-context": "1.7.10", + "@webassemblyjs/wasm-edit": "1.7.10", + "@webassemblyjs/wasm-parser": "1.7.10", "acorn": "^5.6.2", "acorn-dynamic-import": "^3.0.0", "ajv": "^6.1.0", @@ -10562,7 +10496,7 @@ "tapable": "^1.1.0", "uglifyjs-webpack-plugin": "^1.2.4", "watchpack": "^1.5.0", - "webpack-sources": "^1.2.0" + "webpack-sources": "^1.3.0" }, "dependencies": { "schema-utils": { @@ -10595,7 +10529,7 @@ }, "source-map": { "version": "0.4.4", - "resolved": "http://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { @@ -10605,16 +10539,14 @@ } }, "webpack-dev-middleware": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.3.0.tgz", - "integrity": "sha512-5C5gXtOo1I6+0AEg4UPglYEtu3Rai6l5IiO6aUu65scHXz29dc3oIWMiRwvcNLXgL0HwRkRxa9N02ZjFt4hY8w==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz", + "integrity": "sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", "memory-fs": "~0.4.1", "mime": "^2.3.1", "range-parser": "^1.0.3", - "url-join": "^4.0.0", "webpack-log": "^2.0.0" }, "dependencies": { @@ -10627,9 +10559,9 @@ } }, "webpack-dev-server": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz", - "integrity": "sha512-c+tcJtDqnPdxCAzEEZKdIPmg3i5i7cAHe+B+0xFNK0BlCc2HF/unYccbU7xTgfGc5xxhCztCQzFmsqim+KhI+A==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz", + "integrity": "sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -10653,11 +10585,11 @@ "selfsigned": "^1.9.1", "serve-index": "^1.7.2", "sockjs": "0.3.19", - "sockjs-client": "1.1.5", + "sockjs-client": "1.3.0", "spdy": "^3.4.1", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", - "webpack-dev-middleware": "3.2.0", + "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" }, @@ -10791,12 +10723,6 @@ "path-exists": "^3.0.0" } }, - "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "dev": true - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -10869,21 +10795,6 @@ } } }, - "webpack-dev-middleware": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz", - "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", - "dev": true, - "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.3.1", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "url-join": "^4.0.0", - "webpack-log": "^2.0.0" - } - }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -10941,9 +10852,9 @@ } }, "webpack-sources": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", - "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", + "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -11076,7 +10987,7 @@ }, "xmlbuilder": { "version": "9.0.7", - "resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", "dev": true }, diff --git a/client/package.json b/client/package.json index 45c27c89..6efed165 100644 --- a/client/package.json +++ b/client/package.json @@ -35,7 +35,7 @@ "zone.js": "^0.8.26" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.10.7", + "@angular-devkit/build-angular": "^0.11.4", "@angular/cli": "^7.1.4", "@angular/compiler-cli": "^7.1.4", "@angular/language-service": "^7.1.4", diff --git a/client/src/app/dashboard/dashboard.component.html b/client/src/app/dashboard/dashboard.component.html index 7ba517de..74e2363c 100644 --- a/client/src/app/dashboard/dashboard.component.html +++ b/client/src/app/dashboard/dashboard.component.html @@ -17,4 +17,5 @@ --> route="header" componentType="dashboard-overview" - + + diff --git a/client/src/app/dashboard/dashboard.module.ts b/client/src/app/dashboard/dashboard.module.ts index ffaaa202..fe128c6c 100644 --- a/client/src/app/dashboard/dashboard.module.ts +++ b/client/src/app/dashboard/dashboard.module.ts @@ -38,6 +38,7 @@ import { AddDialogComponent } from './add-dialog/add-dialog.component'; import {ApiModule} from '../api/api.module'; import {ModelModule} from '../model/model.module'; import { MaterialModule } from '../material-module/material.module'; +import { GraphViewModule } from './graph-view/graph-view.module'; @NgModule({ @@ -51,7 +52,8 @@ import { MaterialModule } from '../material-module/material.module'; DashboardRoutingModule, DashboardRoutingModule, ApiModule, - ModelModule + ModelModule, + GraphViewModule ], declarations: [ DashboardCardComponent, diff --git a/client/src/app/dashboard/graph-view/graph-view.module.ts b/client/src/app/dashboard/graph-view/graph-view.module.ts new file mode 100644 index 00000000..2b52bf76 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.module.ts @@ -0,0 +1,17 @@ +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {GraphViewComponent} from './graph-view/graph-view.component'; +import {GraphViewService} from './graph-view.service'; +import {ModelModule} from '../../model/model.module'; + +@NgModule({ + declarations: [GraphViewComponent], + imports: [ + CommonModule, + ModelModule + ], + exports: [GraphViewComponent], + providers: [GraphViewService] +}) +export class GraphViewModule { +} diff --git a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts new file mode 100644 index 00000000..dc774f2c --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts @@ -0,0 +1,12 @@ +import {TestBed} from '@angular/core/testing'; + +import {GraphViewService} from './graph-view.service'; + +describe('GraphViewService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: GraphViewService = TestBed.get(GraphViewService); + expect(service).toBeTruthy(); + }); +}); diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts new file mode 100644 index 00000000..1ab93d3b --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -0,0 +1,91 @@ +import {Injectable} from '@angular/core'; +import {ModelService} from '../../model/model.service'; +import { Instance } from 'src/app/model/models/instance'; +import { BehaviorSubject, Observable, Subject} from 'rxjs'; +import * as cytoscape from 'cytoscape'; +import { InstanceLink } from 'src/app/model/models/instanceLink'; +import { Change, Actions } from 'src/app/model/store.service'; + +interface NodeEdgeMap { + nodes: Array; + edges: Array; + } +const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', + 'WebApp': '../../../assets/images/webapp.png', + 'WebApi': '../../../assets/images/webapi.png', + 'ElasticSearch': '../../../assets/images/Elasticsearch.png'}; +@Injectable({ + providedIn: 'root' +}) +export class GraphViewService { + private elementProvider: BehaviorSubject>; + private elementRemover: Subject>; + + constructor(private modelService: ModelService) { + this.elementProvider = new BehaviorSubject>([]); + this.elementRemover = new BehaviorSubject>([]); + + this.modelService.getObservableForInstances().subscribe((change: Change) => { + if (change.elements !== undefined) { + switch (change.type) { + case Actions.ADD: + this.addElements(change.elements); + break; + case Actions.DELETE: + this.removeElements(change.elements); + } + } + }); + } + + private removeElements(instances: Array) { + const ids = instances.map((value: Instance) => '' + value.id); + this.elementRemover.next(ids); + } + + private addElements(instances: Array) { + console.log('received new instance', instances); + const newElements: NodeEdgeMap = instances.reduce( + ( accumulator: NodeEdgeMap, value: Instance) => { + + accumulator.nodes.push({ + group: 'nodes', + data: { + id: '' + value.id, + name: value.name, + image: TYPE_TO_IMG[value.componentType] + } + }); + + const outEdges: Array = this.mapLinksToEdges(value.linksFrom); + const inEdges: Array = this.mapLinksToEdges(value.linksTo); + accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); + + return accumulator; + }, {nodes: [], edges: []} + ); + const eles: Array = newElements.nodes.concat(newElements.edges); + console.log('parsed instance to eles', eles); + this.elementProvider.next(eles); + } + + private mapLinksToEdges(links: Array): Array { + const edges: Array = links.map((edgeVal) => { + return {data: {id: edgeVal.idFrom + '_' + edgeVal.idTo, source: edgeVal.idFrom, target: edgeVal.idTo}}; + }); + return edges; + } + + public getElementObservable(): Observable> { + return new Observable((observer) => { + this.elementProvider.subscribe(observer); + observer.next(this.elementProvider.value); + }); + } + + public getElementRemoveObservable(): Observable> { + return new Observable((observer) => { + this.elementRemover.subscribe(observer); + }); + } +} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css new file mode 100644 index 00000000..87666c95 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css @@ -0,0 +1,5 @@ +#cy { + width: 500px; + height: 500px; + display: block; +} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html new file mode 100644 index 00000000..463b39ea --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html @@ -0,0 +1 @@ +
diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts new file mode 100644 index 00000000..29811a65 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts @@ -0,0 +1,25 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {GraphViewComponent} from './graph-view.component'; + +describe('GraphViewComponent', () => { + let component: GraphViewComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [GraphViewComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(GraphViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts new file mode 100644 index 00000000..35095044 --- /dev/null +++ b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts @@ -0,0 +1,60 @@ +import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import * as cytoscape from 'cytoscape'; +import {GraphViewService} from '../graph-view.service'; + +@Component({ + selector: 'app-graph-view', + templateUrl: './graph-view.component.html', + styleUrls: ['./graph-view.component.css'] +}) +export class GraphViewComponent implements OnInit { + @ViewChild('cy') cyDiv: ElementRef; + private cy: cytoscape.Core; + + constructor(private graphViewService: GraphViewService) { + + } + + + ngOnInit() { + + this.cy = cytoscape({ + container: this.cyDiv.nativeElement, // container to render in + elements: [ // list of graph elements to start with + ], + layout: { + name: 'preset' + }, + style: [{ + selector: 'node', + style: { + label: 'data(name)', + 'background-image': 'data(image)', + 'width': '70%', + 'height': '70%', + 'background-opacity': 0, + + 'background-fit': 'contain', + 'background-clip': 'none', + } + } + ] + }); + + this.graphViewService.getElementObservable().subscribe((newElements: Array) => { + if (newElements) { + this.cy.add(newElements); + } + }); + + this.graphViewService.getElementRemoveObservable().subscribe((ids: Array) => { + if (ids) { + for (let i = 0; i < ids.length; i++) { + this.cy.remove(this.cy.getElementById(ids[i])); + } + } + }); + + } + +} From a1b45018953e135b2e9fb30868045e3216765854 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 3 Jan 2019 13:22:05 +0100 Subject: [PATCH 26/36] updated event model class according to the changes in the instance registry --- app/models/Event.scala | 73 ++++++++++++++++++++++++++++-------------- 1 file changed, 49 insertions(+), 24 deletions(-) diff --git a/app/models/Event.scala b/app/models/Event.scala index 3370ae51..4073e1da 100644 --- a/app/models/Event.scala +++ b/app/models/Event.scala @@ -1,6 +1,7 @@ package models import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport +import akka.http.scaladsl.model.DateTime import models.EventEnums.EventType import models.InstanceEnums.ComponentType import play.api.libs.json.{Reads, Writes} @@ -80,9 +81,31 @@ trait EventJsonSupport extends SprayJsonSupport with DefaultJsonProtocol with In } } + //Custom JSON format for event TimeStamp. + implicit val timestampFormat: JsonFormat[DateTime] = new JsonFormat[DateTime] { + /** + * Custom write method for serialization of DateTime + * @param obj DateTime object to serialize + * @throws DeserializationException Exception in case of wrong input + */ + override def write(obj: DateTime) = JsString(obj.toIsoDateTimeString()) + /** + * Custom read method for deserialization of DateTime + * @param json JsValue that is to be deserialized + * @throws DeserializationException Exception when JsValue is in incorrect format + */ + override def read(json: JsValue): DateTime = json match { + case JsString(value) => + DateTime.fromIsoDateTimeString(value) match { + case Some(date) => date + case _ => throw DeserializationException("Failed to parse date time [" + value + "].") + } + case _ => throw DeserializationException("Failed to parse json string [" + json + "].") + } + } //JSON format for RegistryEvents - implicit val eventFormat : JsonFormat[RegistryEvent] = jsonFormat2(RegistryEvent) + implicit val eventFormat : JsonFormat[RegistryEvent] = jsonFormat3(RegistryEvent) //JSON format for an NumbersChangedPayload implicit val numbersChangedPayloadFormat: JsonFormat[NumbersChangedPayload] = jsonFormat2(NumbersChangedPayload) @@ -96,7 +119,7 @@ trait EventJsonSupport extends SprayJsonSupport with DefaultJsonProtocol with In //JSON format for an InstanceLinkPayload implicit val instanceLinkPayloadFormat: JsonFormat[InstanceLinkPayload] = - jsonFormat1(InstanceLinkPayload) + jsonFormat3(InstanceLinkPayload) } @@ -104,11 +127,13 @@ trait EventJsonSupport extends SprayJsonSupport with DefaultJsonProtocol with In * The RegistryEvent used for communicating with the management application * @param eventType Type of the event * @param payload Payload of the event, depends on the type + * @param timestamp TimeStamp of the event */ final case class RegistryEvent ( - eventType: EventType.Value, - payload: RegistryEventPayload - ) + eventType: EventType.Value, + payload: RegistryEventPayload, + timestamp: DateTime +) /** * Factory object for creating different types of events @@ -119,59 +144,59 @@ object RegistryEventFactory { * Creates a new NumbersChangedEvent. Sets EventType and payload accordingly. * @param componentType ComponentType which's numbers have been updated * @param newNumber New number of components of the specified type - * @return RegistryEvent with the respective type and payload. + * @return RegistryEvent with the respective respective type, payload and current timestamp. */ def createNumbersChangedEvent(componentType: ComponentType, newNumber: Int) : RegistryEvent = - RegistryEvent(EventType.NumbersChangedEvent, NumbersChangedPayload(componentType, newNumber)) + RegistryEvent(EventType.NumbersChangedEvent, NumbersChangedPayload(componentType, newNumber), DateTime.now) /** * Creates a new InstanceAddedEvent. Sets EventType and payload accordingly. * @param instance Instance that has been added. - * @return RegistryEvent with the respective type and payload. + * @return RegistryEvent with the respective type, payload and current timestamp. */ def createInstanceAddedEvent(instance: Instance) : RegistryEvent = - RegistryEvent(EventType.InstanceAddedEvent, InstancePayload(instance)) + RegistryEvent(EventType.InstanceAddedEvent, InstancePayload(instance), DateTime.now) /** * Creates a new InstanceRemovedEvent. Sets EventType and payload accordingly. * @param instance Instance that has been removed. - * @return RegistryEvent with the respective type and payload. + * @return RegistryEvent with the respective type, payload and current timestamp. */ def createInstanceRemovedEvent(instance: Instance) : RegistryEvent = - RegistryEvent(EventType.InstanceRemovedEvent, InstancePayload(instance)) + RegistryEvent(EventType.InstanceRemovedEvent, InstancePayload(instance), DateTime.now) /** * Creates a new StateChangedEvent. Sets EventType and payload accordingly. * @param instance Instance which's state was changed. - * @return RegistryEvent with tht respective type and payload. + * @return RegistryEvent with tht respective type, payload and current timestamp. */ def createStateChangedEvent(instance: Instance) : RegistryEvent = - RegistryEvent(EventType.StateChangedEvent, InstancePayload(instance)) + RegistryEvent(EventType.StateChangedEvent, InstancePayload(instance), DateTime.now) /** * Creates a new DockerOperationErrorEvent. Sets EventType and payload accordingly. * @param affectedInstance Option[Instance] containing the instance that may be affected * @param message Error message - * @return RegistryEvent with the respective type and payload. + * @return RegistryEvent with the respective respective type, payload and current timestamp. */ def createDockerOperationErrorEvent(affectedInstance: Option[Instance], message: String) : RegistryEvent = - RegistryEvent(EventType.DockerOperationErrorEvent, DockerOperationErrorPayload(affectedInstance, message)) + RegistryEvent(EventType.DockerOperationErrorEvent, DockerOperationErrorPayload(affectedInstance, message),DateTime.now) /** * Creates a new LinkAddedEvent. Sets EventType and payload accordingly * @param link Link that was added - * @return RegistryEvent with the respective type and payload + * @return RegistryEvent with the respective type, payload and current timestamp. */ - def createLinkAddedEvent(link: InstanceLink) : RegistryEvent = - RegistryEvent(EventType.LinkAddedEvent, InstanceLinkPayload(link)) + def createLinkAddedEvent(link: InstanceLink, instanceFrom: Instance, instanceTo: Instance) : RegistryEvent = + RegistryEvent(EventType.LinkAddedEvent, InstanceLinkPayload(link, instanceFrom, instanceTo),DateTime.now) /** * Creates a new LinkStateChangedEvent. Sets EventType and payload accordingly. * @param link Link whichs state has been changed - * @return RegistryEvent with the respective type and payload + * @return RegistryEvent with the respective type, payload and current timestamp. */ - def createLinkStateChangedEvent(link: InstanceLink) : RegistryEvent = - RegistryEvent(EventType.LinkStateChangedEvent, InstanceLinkPayload(link)) + def createLinkStateChangedEvent(link: InstanceLink, instanceFrom: Instance, instanceTo: Instance) : RegistryEvent = + RegistryEvent(EventType.LinkStateChangedEvent, InstanceLinkPayload(link, instanceFrom, instanceTo),DateTime.now) } /** @@ -209,7 +234,8 @@ final case class DockerOperationErrorPayload(affectedInstance: Option[Instance], * link that was added / changed. * @param link Link that caused the event */ -final case class InstanceLinkPayload(link: InstanceLink) extends RegistryEventPayload +final case class InstanceLinkPayload(link: InstanceLink, instanceFrom: Instance, instanceTo: Instance) + extends RegistryEventPayload /** @@ -235,6 +261,5 @@ object EventEnums { implicit val EventTypeReads: Reads[EventType] = Reads.enumNameReads(EventType) implicit val EventTypeWrites: Writes[EventType] = Writes.enumNameWrites - } + } } - From 3b6add01cee2b1da0819b073b0f98b4f32c7a2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Thu, 10 Jan 2019 10:26:51 +0100 Subject: [PATCH 27/36] created standalone method for socket message parsing --- client/src/app/api/api/socket.service.ts | 55 ++++++++++++++---------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index c85b61f3..709273cc 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -22,10 +22,7 @@ import { DockerOperationError, EventType, EventTypeEnum, - NumbersChanged, objectIsMessage, - payloadIsDockerOperationError, - payloadIsInstanceLink, payloadIsNumbersChanged, RegistryEvent } from '../../model/models/socketMessage'; @@ -138,24 +135,33 @@ export class SocketService { * @param e */ private socketOnMessage(e: MessageEvent) { - try { - const msg: RegistryEvent = JSON.parse(e.data); - if (objectIsMessage(msg)) { - if (msg.eventType !== EventTypeEnum.Heartbeat) { - console.log('received socket message is message', msg); - } - const {event, toSend} = this.getEventAndPayload(msg); - const relevantSubject = this.observers[event]; - if (relevantSubject) { - relevantSubject.next(toSend); - } + const msg = this.parseSocketMsg(e); + if (msg !== null) { + const {event, toSend} = this.getEventAndPayload(msg); + + const relevantSubject = this.observers[event]; + if (relevantSubject) { + relevantSubject.next(toSend); } - } catch (err) { - if (e.data !== EventTypeEnum.Heartbeat) { - console.log('received message is no json', e.data, err); - } + } + } + /** + * Parses the given message event @param e to a RegistryEvent. + * If the given message is no RegistryEvent for any reason + * (e.g. invalid json, or incorrectly structured json) the method + * @returns null. + */ + private parseSocketMsg(e: MessageEvent): RegistryEvent { + try { + const msg = JSON.parse(e.data); + return objectIsMessage(msg) ? msg : null; + } catch (err) { + if (e.data !== EventTypeEnum.Heartbeat) { + console.log('received message is no json', e.data, err); + } + return null; } } @@ -187,11 +193,14 @@ export class SocketService { event = EventTypeEnum.InstanceNumbersCrawler; break; } - } } else { - if (objIsInstance(payload.instance)) { - toSend = payload.instance; - event = msg.eventType; - } + } + } else if (msg.eventType === EventTypeEnum.LinkStateChangedEvent || msg.eventType === EventTypeEnum.LinkAddedEvent) { + + } else { + if (objIsInstance(payload.instance)) { + toSend = payload.instance; + event = msg.eventType; + } } return {event, toSend}; From 43ae8758e51ac51db9f40ebb7fcff3d55898df8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 15:56:38 +0100 Subject: [PATCH 28/36] resturctured socket message parsing. added more roboust handling of msg parsing. added comments. added handler for linkstatechanged events --- client/src/app/api/api/socket.service.ts | 91 +++++++++++++++--------- 1 file changed, 59 insertions(+), 32 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index 709273cc..cab81d57 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -23,17 +23,16 @@ import { EventType, EventTypeEnum, objectIsMessage, - payloadIsNumbersChanged, RegistryEvent } from '../../model/models/socketMessage'; import {ComponentTypeEnum, Instance, objIsInstance} from '../../model/models/instance'; -import {InstanceLink} from '../../model/models/instanceLink'; +import {InstanceLink, objIsLink, InstanceLinkPayload} from '../../model/models/instanceLink'; interface ObserverMap { [key: string]: Subject; } -type ReturnType = Instance | InstanceLink | number | DockerOperationError; +type ReturnType = Instance | InstanceLinkPayload | number | DockerOperationError; /** * The SocketService is used to create a socket connection to the web server. @@ -139,10 +138,11 @@ export class SocketService { const msg = this.parseSocketMsg(e); if (msg !== null) { const {event, toSend} = this.getEventAndPayload(msg); - - const relevantSubject = this.observers[event]; - if (relevantSubject) { - relevantSubject.next(toSend); + if (event !== null && toSend !== null) { + const relevantSubject = this.observers[event]; + if (relevantSubject) { + relevantSubject.next(toSend); + } } } } @@ -173,35 +173,62 @@ export class SocketService { * @param msg */ private getEventAndPayload(msg: RegistryEvent) { - let toSend: ReturnType; - let event: EventType; - + const event: EventType = msg.eventType; + let result: {event: EventType, toSend: ReturnType}; const payload: any = msg.payload; - if (msg.eventType === EventTypeEnum.NumbersChangedEvent) { - - if (payloadIsNumbersChanged(payload)) { - toSend = payload.newNumber; - switch (payload.componentType) { - case ComponentTypeEnum.WebApp: - event = EventTypeEnum.InstanceNumbersWebApp; - break; - case ComponentTypeEnum.WebApi: - event = EventTypeEnum.InstanceNumbersWebApi; - break; - case ComponentTypeEnum.Crawler: - event = EventTypeEnum.InstanceNumbersCrawler; - break; - } - } - } else if (msg.eventType === EventTypeEnum.LinkStateChangedEvent || msg.eventType === EventTypeEnum.LinkAddedEvent) { - + if (event === EventTypeEnum.NumbersChangedEvent) { + result = this.getNumbersChangedPayload(payload); + } else if (event === EventTypeEnum.LinkStateChangedEvent || event === EventTypeEnum.LinkAddedEvent) { + result = {event, toSend: this.getLinkStatePayload(payload)}; } else { - if (objIsInstance(payload.instance)) { - toSend = payload.instance; - event = msg.eventType; - } + result = {event, toSend: this.getInstanceFromPayload(payload)}; + } + + return result; + } + + /** + * Parses the given @param payload to an InstanceLinkPayload object. If the given payload is no + * InstanceLinkPayload this method @eturns null; + */ + private getLinkStatePayload(payload: any): InstanceLinkPayload { + if (payload.instanceFrom !== undefined && payload.instanceTo !== undefined && payload.link !== undefined) { + if (objIsInstance(payload.instanceFrom) && objIsInstance(payload.instanceTo) && objIsLink(payload.link)) { + return payload; } + } + return null; + } + + private getInstanceFromPayload(payload: any): ReturnType { + if (objIsInstance(payload.instance)) { + return payload.instance; + } + return null; + } + + /** + * In the instance registry only one numbers changed event exists. To handle this + * event more easily it is split into three different event types for crawler, webapi, + * and webapp on the client. + * This method parses the given @param payload and returns an object containing the event + * and the parsed payload. + */ + private getNumbersChangedPayload(payload: any) { + const toSend: ReturnType = payload.newNumber; + let event: EventType = null; + switch (payload.componentType) { + case ComponentTypeEnum.WebApp: + event = EventTypeEnum.InstanceNumbersWebApp; + break; + case ComponentTypeEnum.WebApi: + event = EventTypeEnum.InstanceNumbersWebApi; + break; + case ComponentTypeEnum.Crawler: + event = EventTypeEnum.InstanceNumbersCrawler; + break; + } return {event, toSend}; } From 8650cb560ed6432e3d51e9166097c98cf9bf9584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 15:57:07 +0100 Subject: [PATCH 29/36] now subscribes and logs link state changed events --- client/src/app/model/model.service.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index c3b80564..204458b1 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -6,6 +6,7 @@ import {ComponentType, Instance } from './models/instance'; import {EventTypeEnum} from './models/socketMessage'; import {StateUpdate, Change, StoreService, Actions} from './store.service'; import {BehaviorSubject, Observable} from 'rxjs'; +import { InstanceLinkPayload } from './models/instanceLink'; export interface InstanceChange extends Change { allInstances?: { [id: number]: Instance }; @@ -79,9 +80,13 @@ export class ModelService { this.storeService.removeFromState(removedInstance); }); // TODO: after interface changes in ir we will receive a tuple of instances which are now linked - // this.socketService.subscribeForEvent<>(EventTypeEnum.LinkAddedEvent).subscribe(() => {}); + this.socketService.subscribeForEvent(EventTypeEnum.LinkAddedEvent).subscribe((data) => { + console.log('received link added', data); + }); - // this.socketService.subscribeForEvent<>(EventTypeEnum.LinkStateChangedEvent).subscribe(() => {}); + this.socketService.subscribeForEvent(EventTypeEnum.LinkStateChangedEvent).subscribe((data) => { + console.log('received link state changed', data); + }); } /** From 8be509d57fa65845793ac318bb73505e89822ec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 15:57:36 +0100 Subject: [PATCH 30/36] added InstanceLinkPayload model to handle the instanceChanged events --- client/src/app/model/models/instanceLink.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/client/src/app/model/models/instanceLink.ts b/client/src/app/model/models/instanceLink.ts index 1321b07e..0a0bfeb7 100644 --- a/client/src/app/model/models/instanceLink.ts +++ b/client/src/app/model/models/instanceLink.ts @@ -1,3 +1,4 @@ +import { Instance } from './instance'; export interface InstanceLink { idFrom: number; @@ -15,3 +16,13 @@ export interface InstanceLink { Failed: 'Failed' as LinkStateEnum }; + export interface InstanceLinkPayload { + link: InstanceLink; + instanceFrom: Instance; + instanceTo: Instance; + } + + export function objIsLink(obj: any): obj is InstanceLink { + return obj.idFrom !== undefined && typeof obj.idFrom === 'number' && obj.idTo !== undefined && typeof obj.idTo === 'number' && + obj.linkState !== undefined && obj.linkState in LinkStateEnum; + } From 595063cc1d4c2aecaa55f1398a546c89cf83a76d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 15:57:59 +0100 Subject: [PATCH 31/36] minor changes in logging and type check of socket messages --- client/src/app/dashboard/graph-view/graph-view.service.ts | 3 ++- client/src/app/model/models/socketMessage.ts | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts index 1ab93d3b..28ee0c82 100644 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ b/client/src/app/dashboard/graph-view/graph-view.service.ts @@ -26,6 +26,7 @@ export class GraphViewService { this.elementRemover = new BehaviorSubject>([]); this.modelService.getObservableForInstances().subscribe((change: Change) => { + console.log('received notification in graph view service', change); if (change.elements !== undefined) { switch (change.type) { case Actions.ADD: @@ -44,7 +45,7 @@ export class GraphViewService { } private addElements(instances: Array) { - console.log('received new instance', instances); + console.log('received new instance in graph view service', instances); const newElements: NodeEdgeMap = instances.reduce( ( accumulator: NodeEdgeMap, value: Instance) => { diff --git a/client/src/app/model/models/socketMessage.ts b/client/src/app/model/models/socketMessage.ts index 99d01ab6..326389d6 100644 --- a/client/src/app/model/models/socketMessage.ts +++ b/client/src/app/model/models/socketMessage.ts @@ -81,5 +81,5 @@ export function payloadIsInstanceLink(payload: any): payload is InstanceLink { export function objectIsMessage(obj: any): obj is RegistryEvent { - return obj.eventType !== undefined && obj.payload !== undefined; + return obj !== null && obj.eventType !== undefined && obj.payload !== undefined; } From 2b5e1e172610ef6cde72347f74e9bd6addaab67e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 16:48:45 +0100 Subject: [PATCH 32/36] removed graph view after merge of graphview branch --- .../app/dashboard/dashboard.component.html | 3 +- client/src/app/dashboard/dashboard.module.ts | 4 +- .../dashboard/graph-view/graph-view.module.ts | 17 ---- .../graph-view/graph-view.service.spec.ts | 12 --- .../graph-view/graph-view.service.ts | 92 ------------------- .../graph-view/graph-view.component.css | 5 - .../graph-view/graph-view.component.html | 1 - .../graph-view/graph-view.component.spec.ts | 25 ----- .../graph-view/graph-view.component.ts | 60 ------------ 9 files changed, 2 insertions(+), 217 deletions(-) delete mode 100644 client/src/app/dashboard/graph-view/graph-view.module.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view.service.spec.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view.service.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.css delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.html delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts delete mode 100644 client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts diff --git a/client/src/app/dashboard/dashboard.component.html b/client/src/app/dashboard/dashboard.component.html index 74e2363c..f21fd1a8 100644 --- a/client/src/app/dashboard/dashboard.component.html +++ b/client/src/app/dashboard/dashboard.component.html @@ -17,5 +17,4 @@ --> route="header" componentType="dashboard-overview" - - + diff --git a/client/src/app/dashboard/dashboard.module.ts b/client/src/app/dashboard/dashboard.module.ts index fe128c6c..ffaaa202 100644 --- a/client/src/app/dashboard/dashboard.module.ts +++ b/client/src/app/dashboard/dashboard.module.ts @@ -38,7 +38,6 @@ import { AddDialogComponent } from './add-dialog/add-dialog.component'; import {ApiModule} from '../api/api.module'; import {ModelModule} from '../model/model.module'; import { MaterialModule } from '../material-module/material.module'; -import { GraphViewModule } from './graph-view/graph-view.module'; @NgModule({ @@ -52,8 +51,7 @@ import { GraphViewModule } from './graph-view/graph-view.module'; DashboardRoutingModule, DashboardRoutingModule, ApiModule, - ModelModule, - GraphViewModule + ModelModule ], declarations: [ DashboardCardComponent, diff --git a/client/src/app/dashboard/graph-view/graph-view.module.ts b/client/src/app/dashboard/graph-view/graph-view.module.ts deleted file mode 100644 index 2b52bf76..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.module.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {GraphViewComponent} from './graph-view/graph-view.component'; -import {GraphViewService} from './graph-view.service'; -import {ModelModule} from '../../model/model.module'; - -@NgModule({ - declarations: [GraphViewComponent], - imports: [ - CommonModule, - ModelModule - ], - exports: [GraphViewComponent], - providers: [GraphViewService] -}) -export class GraphViewModule { -} diff --git a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts b/client/src/app/dashboard/graph-view/graph-view.service.spec.ts deleted file mode 100644 index dc774f2c..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.service.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {TestBed} from '@angular/core/testing'; - -import {GraphViewService} from './graph-view.service'; - -describe('GraphViewService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: GraphViewService = TestBed.get(GraphViewService); - expect(service).toBeTruthy(); - }); -}); diff --git a/client/src/app/dashboard/graph-view/graph-view.service.ts b/client/src/app/dashboard/graph-view/graph-view.service.ts deleted file mode 100644 index 28ee0c82..00000000 --- a/client/src/app/dashboard/graph-view/graph-view.service.ts +++ /dev/null @@ -1,92 +0,0 @@ -import {Injectable} from '@angular/core'; -import {ModelService} from '../../model/model.service'; -import { Instance } from 'src/app/model/models/instance'; -import { BehaviorSubject, Observable, Subject} from 'rxjs'; -import * as cytoscape from 'cytoscape'; -import { InstanceLink } from 'src/app/model/models/instanceLink'; -import { Change, Actions } from 'src/app/model/store.service'; - -interface NodeEdgeMap { - nodes: Array; - edges: Array; - } -const TYPE_TO_IMG = {'Crawler': '../../../assets/images/crawler.png', - 'WebApp': '../../../assets/images/webapp.png', - 'WebApi': '../../../assets/images/webapi.png', - 'ElasticSearch': '../../../assets/images/Elasticsearch.png'}; -@Injectable({ - providedIn: 'root' -}) -export class GraphViewService { - private elementProvider: BehaviorSubject>; - private elementRemover: Subject>; - - constructor(private modelService: ModelService) { - this.elementProvider = new BehaviorSubject>([]); - this.elementRemover = new BehaviorSubject>([]); - - this.modelService.getObservableForInstances().subscribe((change: Change) => { - console.log('received notification in graph view service', change); - if (change.elements !== undefined) { - switch (change.type) { - case Actions.ADD: - this.addElements(change.elements); - break; - case Actions.DELETE: - this.removeElements(change.elements); - } - } - }); - } - - private removeElements(instances: Array) { - const ids = instances.map((value: Instance) => '' + value.id); - this.elementRemover.next(ids); - } - - private addElements(instances: Array) { - console.log('received new instance in graph view service', instances); - const newElements: NodeEdgeMap = instances.reduce( - ( accumulator: NodeEdgeMap, value: Instance) => { - - accumulator.nodes.push({ - group: 'nodes', - data: { - id: '' + value.id, - name: value.name, - image: TYPE_TO_IMG[value.componentType] - } - }); - - const outEdges: Array = this.mapLinksToEdges(value.linksFrom); - const inEdges: Array = this.mapLinksToEdges(value.linksTo); - accumulator.edges = accumulator.edges.concat(inEdges.concat(outEdges)); - - return accumulator; - }, {nodes: [], edges: []} - ); - const eles: Array = newElements.nodes.concat(newElements.edges); - console.log('parsed instance to eles', eles); - this.elementProvider.next(eles); - } - - private mapLinksToEdges(links: Array): Array { - const edges: Array = links.map((edgeVal) => { - return {data: {id: edgeVal.idFrom + '_' + edgeVal.idTo, source: edgeVal.idFrom, target: edgeVal.idTo}}; - }); - return edges; - } - - public getElementObservable(): Observable> { - return new Observable((observer) => { - this.elementProvider.subscribe(observer); - observer.next(this.elementProvider.value); - }); - } - - public getElementRemoveObservable(): Observable> { - return new Observable((observer) => { - this.elementRemover.subscribe(observer); - }); - } -} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css deleted file mode 100644 index 87666c95..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.css +++ /dev/null @@ -1,5 +0,0 @@ -#cy { - width: 500px; - height: 500px; - display: block; -} diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html deleted file mode 100644 index 463b39ea..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.html +++ /dev/null @@ -1 +0,0 @@ -
diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts deleted file mode 100644 index 29811a65..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {GraphViewComponent} from './graph-view.component'; - -describe('GraphViewComponent', () => { - let component: GraphViewComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [GraphViewComponent] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(GraphViewComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts b/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts deleted file mode 100644 index 35095044..00000000 --- a/client/src/app/dashboard/graph-view/graph-view/graph-view.component.ts +++ /dev/null @@ -1,60 +0,0 @@ -import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; -import * as cytoscape from 'cytoscape'; -import {GraphViewService} from '../graph-view.service'; - -@Component({ - selector: 'app-graph-view', - templateUrl: './graph-view.component.html', - styleUrls: ['./graph-view.component.css'] -}) -export class GraphViewComponent implements OnInit { - @ViewChild('cy') cyDiv: ElementRef; - private cy: cytoscape.Core; - - constructor(private graphViewService: GraphViewService) { - - } - - - ngOnInit() { - - this.cy = cytoscape({ - container: this.cyDiv.nativeElement, // container to render in - elements: [ // list of graph elements to start with - ], - layout: { - name: 'preset' - }, - style: [{ - selector: 'node', - style: { - label: 'data(name)', - 'background-image': 'data(image)', - 'width': '70%', - 'height': '70%', - 'background-opacity': 0, - - 'background-fit': 'contain', - 'background-clip': 'none', - } - } - ] - }); - - this.graphViewService.getElementObservable().subscribe((newElements: Array) => { - if (newElements) { - this.cy.add(newElements); - } - }); - - this.graphViewService.getElementRemoveObservable().subscribe((ids: Array) => { - if (ids) { - for (let i = 0; i < ids.length; i++) { - this.cy.remove(this.cy.getElementById(ids[i])); - } - } - }); - - } - -} From 5f6ca5a726ab21143bf0dd513269b2280c91772a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 16:48:58 +0100 Subject: [PATCH 33/36] updated dependencies --- client/package-lock.json | 646 ++++++++++++++++++++++----------------- client/package.json | 39 ++- 2 files changed, 383 insertions(+), 302 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index bd335d3f..da538f6b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5,39 +5,39 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.4.tgz", - "integrity": "sha512-2zi6S9tPlk52vyqN67IvFoeNgd0uxtrPlwl3TdvJ3wrH7sYGJnkQ+EzAE7cKUGWAV989BbNtx2YxhRDHnN21Fg==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.12.1.tgz", + "integrity": "sha512-1ozBP0ZAApkSfuPpZ7b9vShU8smNxb98jW+65S12cPOxv1bVVxCj5sTmC3sSfXapgq/pMzblbaVSKOG7Ajz0vQ==", "dev": true, "requires": { - "@angular-devkit/core": "7.1.4", + "@angular-devkit/core": "7.2.1", "rxjs": "6.3.3" } }, "@angular-devkit/build-angular": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.11.4.tgz", - "integrity": "sha512-5WQAQB4heDqAotqjU3Tl8Ons0S/e16dKwVkQFdqfKPyBgmu4CyUH35eTV+i6i7un1Elg65U5GnA4MiUtApqVyw==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.11.4", - "@angular-devkit/build-optimizer": "0.11.4", - "@angular-devkit/build-webpack": "0.11.4", - "@angular-devkit/core": "7.1.4", - "@ngtools/webpack": "7.1.4", - "ajv": "6.5.3", - "autoprefixer": "9.3.1", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.12.1.tgz", + "integrity": "sha512-TpaMgKECEm1Tta4jkvZVzWdbq2OakIwVyYSzZ/7ARVe0FXhEjVLgWB1pYAdhRx+Hv4/E2ZSPJW1J3N3DTE4W4Q==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.12.1", + "@angular-devkit/build-optimizer": "0.12.1", + "@angular-devkit/build-webpack": "0.12.1", + "@angular-devkit/core": "7.2.1", + "@ngtools/webpack": "7.2.1", + "ajv": "6.6.2", + "autoprefixer": "9.4.3", "circular-dependency-plugin": "5.0.2", "clean-css": "4.2.1", - "copy-webpack-plugin": "4.5.4", + "copy-webpack-plugin": "4.6.0", "file-loader": "2.0.0", "glob": "7.1.3", "istanbul": "0.4.5", "istanbul-instrumenter-loader": "3.0.1", "karma-source-map-support": "1.3.0", - "less": "3.8.1", + "less": "3.9.0", "less-loader": "4.1.0", - "license-webpack-plugin": "2.0.2", + "license-webpack-plugin": "2.0.4", "loader-utils": "1.1.0", "mini-css-extract-plugin": "0.4.4", "minimatch": "3.0.4", @@ -63,12 +63,24 @@ "tree-kill": "1.2.0", "webpack": "4.23.1", "webpack-dev-middleware": "3.4.0", - "webpack-dev-server": "3.1.10", + "webpack-dev-server": "3.1.14", "webpack-merge": "4.1.4", "webpack-sources": "1.3.0", "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", @@ -78,14 +90,14 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.11.4.tgz", - "integrity": "sha512-tAAWWFCcl918Q1JivlLvLFer8Qm4/THWbEneMwk5fQvG6/NgJLoa3itP/MCUq4qL6YHmp2DWkdWnWfRQCgHeFA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.12.1.tgz", + "integrity": "sha512-zYea22pJ5kvMud8UBrdzIcR9F1FDYWJ3vwj5WRUFM0sF7mbbrmTC+OsIvNI7qDJuXWNZGySwNlHw0e+rhv30gg==", "dev": true, "requires": { "loader-utils": "1.1.0", "source-map": "0.5.6", - "typescript": "3.1.6", + "typescript": "3.2.2", "webpack-sources": "1.2.0" }, "dependencies": { @@ -96,9 +108,9 @@ "dev": true }, "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", + "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", "dev": true }, "webpack-sources": { @@ -122,133 +134,107 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.11.4.tgz", - "integrity": "sha512-4nEDXSbv3oDu27Rw5s2DMKmcOZYVAt76bryVF2SycSkDq3eAIiqmgw3G3CJJ4LTulXzDpaIpk02MvgbYkX+hvw==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.12.1.tgz", + "integrity": "sha512-eDNgR2EV9/l4xYTkvS3861TthUv8ERBroWpMkkniX3HhpyjgaLyI5P1OB7fVMcF3RvJsxIlqYGRZ6zx7PjCbcA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.11.4", - "@angular-devkit/core": "7.1.4", + "@angular-devkit/architect": "0.12.1", + "@angular-devkit/core": "7.2.1", "rxjs": "6.3.3" } }, "@angular-devkit/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", - "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.2.1.tgz", + "integrity": "sha512-zOozPswSM1cTkltw5LeSPoZ/fJ2d3vN304IVgKgrM5/Fs54bd7nTaBcAK+HvjKS+5KmykYrXW47Q4CdFJikluQ==", "dev": true, "requires": { - "ajv": "6.5.3", + "ajv": "6.6.2", "chokidar": "2.0.4", "fast-json-stable-stringify": "2.0.0", "rxjs": "6.3.3", "source-map": "0.7.3" - } - }, - "@angular-devkit/schematics": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.1.4.tgz", - "integrity": "sha512-+rn3ppcC3grsi9vV2uUIYh/5mUBEJ+JRCKW11BJoUqLMeu8W7h+vbVonyfwJXsk3FSTf9ZY0C7F7UqggRS3cWw==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.1.4", - "rxjs": "6.3.3" }, "dependencies": { - "@angular-devkit/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", - "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", + "ajv": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.2.tgz", + "integrity": "sha512-FBHEW6Jf5TB9MGBgUUA9XHkTbjXYfAUjY43ACMfmdMRHniyoMHjHjzD50OK8LGDWQwp4rWEsIq5kEqq7rvIM1g==", "dev": true, "requires": { - "ajv": "6.5.3", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } } } }, + "@angular-devkit/schematics": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.2.1.tgz", + "integrity": "sha512-jEhwkeDn8exgJBfUwMc6rdtDkxHJkUmKPTn4M436bkMMMa9KFPFbPpzp9weKpB3SbRjM3Mu90JprO4C7qDtCcg==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.2.1", + "rxjs": "6.3.3" + } + }, "@angular/animations": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.1.4.tgz", - "integrity": "sha512-877LZ83scksJtflVz97CUWlSsZnxduBxPD+ls5OTrTT/bq3muzHCm8rgTO7S8fBwwrEVXLorvMAlhDPpMg5Swg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.0.tgz", + "integrity": "sha512-xi832o3YN+eYSV4PDRllc8JwkH4aKPlb7NZ0UaqchOmz9/jQcykCEMZDzQAZUgHG1ohay6JBVaV8/zNcbSsRCA==", "requires": { "tslib": "^1.9.0" } }, "@angular/cdk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.2.0.tgz", - "integrity": "sha512-ANGNIvyEdkMW6APl+6XDQC5VBS+mS/M+3UB/ROnj+7Om3xe2DSbEjqDXB/SpeJYUp6Qg/wQoWmyvd4y8HfjMwA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-7.2.1.tgz", + "integrity": "sha512-oU1Pjq3JkDtkXquLxWK84A2jOCeYRf352dVGbQCxWoSOQ5KBtMAd42huGidPiOSHN6/f7xZwL3n4fq3fVIut8A==", "requires": { "parse5": "^5.0.0", "tslib": "^1.7.1" } }, "@angular/cli": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.1.4.tgz", - "integrity": "sha512-SruaZsmyq3+ymMPeMJSzhytvgtvzyzb1q58pUYX+vZjff2aMYOo0TVxJALwTOPIABICTqUTZmujbLG9uxVgxFA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.2.1.tgz", + "integrity": "sha512-KA5HE+s2ZBV9T+3XAvLXZulvPzp2BQKEKCoj6aefZB+TZASeatXO8keDDm2+N/8zqoqSe/akf6hvB/u9x0xJ3w==", "dev": true, "requires": { - "@angular-devkit/architect": "0.11.4", - "@angular-devkit/core": "7.1.4", - "@angular-devkit/schematics": "7.1.4", - "@schematics/angular": "7.1.4", - "@schematics/update": "0.11.4", - "inquirer": "6.2.0", + "@angular-devkit/architect": "0.12.1", + "@angular-devkit/core": "7.2.1", + "@angular-devkit/schematics": "7.2.1", + "@schematics/angular": "7.2.1", + "@schematics/update": "0.12.1", + "inquirer": "6.2.1", "opn": "5.3.0", "semver": "5.5.1", "symbol-observable": "1.2.0" - }, - "dependencies": { - "@angular-devkit/architect": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.11.4.tgz", - "integrity": "sha512-2zi6S9tPlk52vyqN67IvFoeNgd0uxtrPlwl3TdvJ3wrH7sYGJnkQ+EzAE7cKUGWAV989BbNtx2YxhRDHnN21Fg==", - "dev": true, - "requires": { - "@angular-devkit/core": "7.1.4", - "rxjs": "6.3.3" - } - }, - "@angular-devkit/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", - "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", - "dev": true, - "requires": { - "ajv": "6.5.3", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - } - } } }, "@angular/common": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.1.4.tgz", - "integrity": "sha512-oQPCilcf1H/OXmt4z6PfGoCSb1YPRBAXGs/KRBARm3tYan2r5CmV0BFwpWXWQrEMt8YQqqLiBQUQ64d8+VFm8Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.0.tgz", + "integrity": "sha512-5HNGT+XsY+7sQcNoFRqhbUfVdnBAtXaupmMbBclnQHTon9y9Ijp0ocYi7zxx39feo6xYF5HhBMnDPkFgtAnsYQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.1.4.tgz", - "integrity": "sha512-AvYXtjEJ27Rhv4c27DXNEa58Lit63jdydzbz7VuyFhNU+FwDUK2DC4gZe0nWZsf7HUniJezVRFkECDCZQeSKCQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.0.tgz", + "integrity": "sha512-On1qj4yQoIGxGOQ09ohTq0QNjrIJtWcwnCXYAEEyc83eadBMOqiFh6SUMgX1O+B7BIB4mebFw/n/etez0A21xw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.1.4.tgz", - "integrity": "sha512-fyEY58A53pmVEuhfyU1z1TAi1n5rOK5cCjhFnUUnnESQFEW/aQYOl0ZL6LDsMSYfa78fkDw4Nc0DytvZ1ymVMw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.0.tgz", + "integrity": "sha512-BKELLAnA4jWfyPEzuVxTNNFAPKJOyh4Xjw7c+dRf90bnw9iIgZOpz9WXSN/xfEhftqRPTnPcfs56i6bxqeYCCQ==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -414,7 +400,7 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { @@ -482,7 +468,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, @@ -583,63 +569,63 @@ } }, "@angular/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.1.4.tgz", - "integrity": "sha512-36uWLrmmlzf8JKaq2A5F2tPQEHvFSsbTQWOT559Drp1tzM2uSA7PysNHv5TXUshDn5i54S2EQFm4bj2YPp4Hzg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.0.tgz", + "integrity": "sha512-tlCDDM9IknXvVLk1sg0lzCO4OREM54i1bFtTpl5kPtugK6l4kYCOH78UzDPHnOzzI3LGLj8Hb2NiObVa9c4fdg==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.1.4.tgz", - "integrity": "sha512-YB2lDRe7aMsaO5ZlbeFZGH+uTQOcpotFDKCmTckpefRJ7id6TlUSBYdYRH80qOQfPJGpsnqQvLZkL24UMasKtQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.0.tgz", + "integrity": "sha512-vgnKgThitbaSQekTFt8qCFejnBwBMNJDUm7LJFcvRn4wcZKArTARTfSKHudNYCjTEqs9/YT4TJQTm9flVRbUJw==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.1.4.tgz", - "integrity": "sha512-Lrjb99sHu0Cv7MBbVLev1I1Fe+DJcwG4v7juZB/5nE5opKmbQo3Lfqvt2dVrMOxHeju9ReFznEnuGNMK6+m6pQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.0.tgz", + "integrity": "sha512-CoEwfh9LSpyXUh/077nvy1Hheo6mmIFKOmnyo9V7JaesGJYkYpEIVFYFP1hYg7f8snKHclT3gqfQX+BynNhExQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.1.4.tgz", - "integrity": "sha512-Pvrk3W3+6XfrmpCRcTumfyplv6AQJXKfDdPFSbhdpHJlpdcQRo6TckA85Yln5/CXZSAiPaZeiejQt2OogrIRLg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.0.tgz", + "integrity": "sha512-UDmIRR0ybdafrJLHkSDgc/3PpsA9lnwXqGMSAyyhEF3InORFFkloAb0a6Naz+y8ePgEMfqbpyWjtzo8qGtOmEQ==", "dev": true }, "@angular/material": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.2.0.tgz", - "integrity": "sha512-ZLgpZ6hVJABMu6lk+97esN9TmLvBjeAgTbszLBJHOeSKocUGaWeKsdiUweMCdNgWrYNMowIAVKGqwavmaj7XTQ==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-7.2.1.tgz", + "integrity": "sha512-d2O+7dDjIl7W1qlOdTfsAgMSrz9NNmPV6zJKqsRpZtkywAwKSwqzOs29XN3GjN2wYxZCnCpQi99l4GgmzPxRzg==", "requires": { "tslib": "^1.7.1" } }, "@angular/platform-browser": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.1.4.tgz", - "integrity": "sha512-lIFBKo6Uqty7qYDI9T8quFCUzUpGBgpzvDe14aAHFwZCft9rMS1J7PB1F26/dy2RBQE8tUyN2zp2xZQnYAhMcA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.0.tgz", + "integrity": "sha512-ClrGYlacK0kexE7eHLfruOjgJl0MtMt7RsMv5i757GUwbOm1dCwG1HK8cLNDZJFHMZodKVKwEGS6/R5Cl6vrNg==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.1.4.tgz", - "integrity": "sha512-LtFd6XIz98BKjxrCRbaz2y0XSmVQSTzrvpAyNzKnzHAMn+4XpIpnzyV3Y6DeHolIBwLjFHFzGKMBwOHOwME4RQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.0.tgz", + "integrity": "sha512-IiyBcQIQVDZMxfpTYex1QfPmcMubKLgu1pCvQsjr0HmUEySqcykO+FzHlYLf5TTgRrtkI6cP2pYzTHGVR93Gpg==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.1.4.tgz", - "integrity": "sha512-5VVVcRsmuKrIWPnh5zF1ExXmIpCx2tlisJ7YTS2FFDXnqrZ9i2QgaxyJuyZE+Btg3t7LPF4tkhRQpjauNiHJYA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.0.tgz", + "integrity": "sha512-Jpm0Y5IH30hIQsbnLgi2/LgHbArfE9gWMj/9mDIUOlJeQfGzNVoifBE+zLLJU/wb09+ZtfwGBxkMeDTitH/n2A==", "requires": { "tslib": "^1.9.0" } @@ -813,12 +799,12 @@ } }, "@ngtools/webpack": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.1.4.tgz", - "integrity": "sha512-8A15TPJzg3g7yI70QvBzJ253P32WAgCVre9nMaDdd22UmlbvN8Ke4RuQY7vYVTECLL+bWpFJEFXL+ThzCRUgeA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.2.1.tgz", + "integrity": "sha512-/mpXSyaHBP+wfiEt/ZYNsnUmnDmdUkLL1rcNxDyxMxlrL246CtNUcMzYSVqYiKp7ufz6GNklY2QqUa9pcOlW6Q==", "dev": true, "requires": { - "@angular-devkit/core": "7.1.4", + "@angular-devkit/core": "7.2.1", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.0", @@ -844,66 +830,30 @@ } }, "@schematics/angular": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.1.4.tgz", - "integrity": "sha512-4QVSmvQtOELek+FDq+k2ROeH9YrRrPJ6jWK179+qOruKSd4uTgEti/jy+fS0rfr52kDSGdDhz7XTh/QvQB89fg==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.2.1.tgz", + "integrity": "sha512-UdqU8udVr693BZ6uaZ7+el/VFlTjrmp56OS+6YaziyAko84e1Q1Fcx+fwdHugy4V3YmQhTVsyOPSEsphnwSwOA==", "dev": true, "requires": { - "@angular-devkit/core": "7.1.4", - "@angular-devkit/schematics": "7.1.4", - "typescript": "3.1.6" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", - "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", - "dev": true, - "requires": { - "ajv": "6.5.3", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - } - }, - "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", - "dev": true - } + "@angular-devkit/core": "7.2.1", + "@angular-devkit/schematics": "7.2.1", + "typescript": "3.2.2" } }, "@schematics/update": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.11.4.tgz", - "integrity": "sha512-InfsMJtdWwoqCPmtlJeXBwRPPgIXUzpzIkCCcayRe9gy6PkPUIlOjfgEZ4Mqm/HR46lqsI8xwZfUK7SLV//a2g==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.12.1.tgz", + "integrity": "sha512-P92tDxy0AA1NPhaThiJ7fIFxIC4jzlGK7sJlpbnRREBImsI/O9gmGaV8Kjy+75vaEjqpWaU2oj1hnWqkmxSK1A==", "dev": true, "requires": { - "@angular-devkit/core": "7.1.4", - "@angular-devkit/schematics": "7.1.4", + "@angular-devkit/core": "7.2.1", + "@angular-devkit/schematics": "7.2.1", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "pacote": "9.1.1", "rxjs": "6.3.3", "semver": "5.5.1", "semver-intersect": "1.4.0" - }, - "dependencies": { - "@angular-devkit/core": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.1.4.tgz", - "integrity": "sha512-3cBVHjSQjMyE/mIyOX82ekdybNRQlN+kUfmdZS6oVW9aV48vdxcVbEGdl8t1H4enMf89u8kXiAAET9jFaqWopg==", - "dev": true, - "requires": { - "ajv": "6.5.3", - "chokidar": "2.0.4", - "fast-json-stable-stringify": "2.0.0", - "rxjs": "6.3.3", - "source-map": "0.7.3" - } - } } }, "@types/jasmine": { @@ -939,6 +889,31 @@ "integrity": "sha512-4GbNCDs98uHCT/OMv40qQC/OpoPbYn9XdXeTiFwHBBFO6eJhYEPUu2zDKirXSbHlvDV8oZ9l8EQ+HrEx/YS9DQ==", "dev": true }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "@webassemblyjs/ast": { "version": "1.7.10", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.10.tgz", @@ -1238,7 +1213,7 @@ }, "ansi-escapes": { "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", "dev": true }, @@ -1486,17 +1461,67 @@ "dev": true }, "autoprefixer": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.3.1.tgz", - "integrity": "sha512-DY9gOh8z3tnCbJ13JIWaeQsoYncTGdsrgCceBaQSIL4nvdrLxgbRSBPevg2XbX7u4QCSfLheSJEEIUUSlkbx6Q==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.4.3.tgz", + "integrity": "sha512-/XSnzDepRkAU//xLcXA/lUWxpsBuw0WiriAHOqnxkuCtzLhaz+fL4it4gp20BQ8n5SyLzK/FOc7A0+u/rti2FQ==", "dev": true, "requires": { - "browserslist": "^4.3.3", - "caniuse-lite": "^1.0.30000898", + "browserslist": "^4.3.6", + "caniuse-lite": "^1.0.30000921", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.5", + "postcss": "^7.0.6", "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.11.tgz", + "integrity": "sha512-9AXb//5UcjeOEof9T+yPw3XTa5SL207ZOIC/lHYP4mbUTEh4M0rDAQekQpVANCZdwQwKhBtFZCk3i3h3h2hdWg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "aws-sign2": { @@ -1960,13 +1985,13 @@ } }, "browserslist": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.3.7.tgz", - "integrity": "sha512-pWQv51Ynb0MNk9JGMCZ8VkM785/4MQNXiFYtPqI7EEP0TJO+/d/NqRVn1uiAN0DNbnlUSpL2sh16Kspasv3pUQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.4.0.tgz", + "integrity": "sha512-tQkHS8VVxWbrjnNDXgt7/+SuPJ7qDvD0Y2e6bLtoQluR2SPvlmPUcfcU75L1KAalhqULlIFJlJ6BDfnYyJxJsw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000925", - "electron-to-chromium": "^1.3.96", + "caniuse-lite": "^1.0.30000928", + "electron-to-chromium": "^1.3.100", "node-releases": "^1.1.3" } }, @@ -2117,9 +2142,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000926", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000926.tgz", - "integrity": "sha512-diMkEvxfFw09SkbErCLmw/1Fx1ZZe9xfWm4aeA2PUffB48x1tfZeMsK5j4BW7zN7Y4PdqmPVVdG2eYjE5IRTag==", + "version": "1.0.30000928", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000928.tgz", + "integrity": "sha512-aSpMWRXL6ZXNnzm8hgE4QDLibG5pVJ2Ujzsuj3icazlIkxXkPXtL+BWnMx6FBkWmkZgBHGUxPZQvrbRw2ZTxhg==", "dev": true }, "canonical-path": { @@ -2496,9 +2521,9 @@ } }, "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true }, "console-browserify": { @@ -2576,9 +2601,9 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz", - "integrity": "sha512-0lstlEyj74OAtYMrDxlNZsU7cwFijAI3Ofz2fD6Mpo9r4xCv4yegfa3uHIKvZY1NSuOtE9nvG6TAhJ+uz9gDaQ==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", "dev": true, "requires": { "cacache": "^10.0.4", @@ -2592,9 +2617,9 @@ } }, "core-js": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", - "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.2.tgz", + "integrity": "sha512-NdBPF/RVwPW6jr0NCILuyN9RiqLo2b1mddWHkUL+VnvcB7dzlnBJ1bXYntjpTGOgkZiiLWj2JxmOr7eGE3qK6g==" }, "core-util-is": { "version": "1.0.2", @@ -2747,15 +2772,6 @@ "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", "dev": true }, - "cytoscape": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.3.1.tgz", - "integrity": "sha512-3IIh63Oz/dtiO1ibPb9CWHBPo90JZg/74EI+vDL/hamaP01bQ7Yx1r9oiS4AyTedvlUCio5j7Bu3NtRWxJHryw==", - "requires": { - "heap": "^0.2.6", - "lodash.debounce": "^4.0.8" - } - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2994,12 +3010,11 @@ } }, "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.1.tgz", + "integrity": "sha512-UN6X6XwRjllabfRhBdkVSo63uurJ8nSvMGrwl94EYVz6g+exhTV+yVSYk5VC/xl3MBFBTtC0J20uFKce4Brrng==", "dev": true, "requires": { - "arrify": "^1.0.1", "path-type": "^3.0.0" } }, @@ -3075,9 +3090,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.96", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.96.tgz", - "integrity": "sha512-ZUXBUyGLeoJxp4Nt6G/GjBRLnyz8IKQGexZ2ndWaoegThgMGFO1tdDYID5gBV32/1S83osjJHyfzvanE/8HY4Q==", + "version": "1.3.102", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.102.tgz", + "integrity": "sha512-2nzZuXw/KBPnI3QX3UOCSRvJiVy7o9+VHRDQ3D/EHCvVc89X6aj/GlNmEgiR2GBIhmSWXIi4W1M5okA5ScSlNg==", "dev": true }, "elliptic": { @@ -4707,9 +4722,9 @@ "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" }, "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "handlebars": { @@ -4867,11 +4882,6 @@ "minimalistic-assert": "^1.0.1" } }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5217,9 +5227,9 @@ "dev": true }, "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", + "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", "dev": true, "requires": { "ansi-escapes": "^3.0.0", @@ -5233,7 +5243,7 @@ "run-async": "^2.2.0", "rxjs": "^6.1.0", "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.0.0", "through": "^2.3.6" }, "dependencies": { @@ -5257,15 +5267,34 @@ "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", + "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", + "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", + "dev": true + } } } } @@ -6179,9 +6208,9 @@ } }, "less": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/less/-/less-3.8.1.tgz", - "integrity": "sha512-8HFGuWmL3FhQR0aH89escFNBQH/nEiYPP2ltDFdQw2chE28Yx2E3lhAIq9Y2saYwLSwa699s4dBVEfCY8Drf7Q==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "dev": true, "requires": { "clone": "^2.1.2", @@ -6226,11 +6255,12 @@ } }, "license-webpack-plugin": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.2.tgz", - "integrity": "sha512-GsomZw5VoT20ST8qH2tOjBgbyhn6Pgs9M94g0mbvfBIV1VXufm1iKY+4dbgfTObj1Mp6nSRE3Zf74deOZr0KwA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.0.4.tgz", + "integrity": "sha512-FQgOqrrIcD4C/VQo6ecWgXZULK5rs0kIDJtHcSVO6SBUrD63kEHZwmKOvBTquFQSgMQn/yeH68qooKDfqiBF2Q==", "dev": true, "requires": { + "@types/webpack-sources": "^0.1.5", "webpack-sources": "^1.2.0" } }, @@ -6313,7 +6343,8 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, "lodash.mergewith": { "version": "4.6.1", @@ -6551,9 +6582,9 @@ "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78=" }, "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.2.tgz", + "integrity": "sha512-Bp2Bx2wFaUymE7pWi0bbldiheIXMvyzC3hRkT5YAv2qiqqJO5VB8KafgYgZmGCxkTmloLuAx3Jv2OmJ66990mg==", "dev": true }, "md5.js": { @@ -7118,9 +7149,9 @@ } }, "npm-packlist": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", - "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.2.0.tgz", + "integrity": "sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==", "dev": true, "requires": { "ignore-walk": "^3.0.1", @@ -9332,32 +9363,75 @@ "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", + "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", + "debug": "^4.1.0", + "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } } }, "spdy-transport": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.1.tgz", - "integrity": "sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", + "debug": "^4.1.0", + "detect-node": "^2.0.4", "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "readable-stream": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz", + "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "speed-measure-webpack-plugin": { @@ -9672,9 +9746,9 @@ } }, "terser": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.0.tgz", - "integrity": "sha512-KQC1QNKbC/K1ZUjLIWsezW7wkTJuB4v9ptQQUNOzAPVHuVf2LrwEcB0I9t2HTEYUwAFVGiiS6wc+P4ClLDc5FQ==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.14.1.tgz", + "integrity": "sha512-NSo3E99QDbYSMeJaEk9YW2lTg3qS9V0aKGlb+PlOrei1X02r1wSBHCNX/O+yeTRFSWPKPIGj6MqvvdqV4rnVGw==", "dev": true, "requires": { "commander": "~2.17.1", @@ -10028,9 +10102,9 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" }, "tslint": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.0.tgz", - "integrity": "sha512-CKEcH1MHUBhoV43SA/Jmy1l24HJJgI0eyLbBNSRyFlsQvb9v6Zdq+Nz2vEOH00nC5SUx4SneJ59PZUS/ARcokQ==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.12.1.tgz", + "integrity": "sha512-sfodBHOucFg6egff8d1BvuofoOQ/nOeYNfbp7LDlKBcLNrL3lmS5zoiDGyOMdT7YsEXAwWpTdAHwOGOc8eRZAw==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -10114,9 +10188,9 @@ "dev": true }, "typescript": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.1.6.tgz", - "integrity": "sha512-tDMYfVtvpb96msS1lDX9MEdHrW4yOuZ4Kdc4Him9oU796XldPYF/t2+uKoX0BBa0hXXwDlqYQbXY5Rzjzc5hBA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.2.tgz", + "integrity": "sha512-VCj5UiSyHBjwfYacmDuc/NOk4QQixbE+Wn7MFJuS0nRuPQbof132Pw4u53dm264O8LPc2MVsc7RJNml5szurkg==", "dev": true }, "uglify-js": { @@ -10559,9 +10633,9 @@ } }, "webpack-dev-server": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz", - "integrity": "sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==", + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.14.tgz", + "integrity": "sha512-mGXDgz5SlTxcF3hUpfC8hrQ11yhAttuUQWf1Wmb+6zo3x6rb7b9mIfuQvAPLdfDRCGRGvakBWHdHOa0I9p/EVQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -10583,12 +10657,14 @@ "portfinder": "^1.0.9", "schema-utils": "^1.0.0", "selfsigned": "^1.9.1", + "semver": "^5.6.0", "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.3.0", - "spdy": "^3.4.1", + "spdy": "^4.0.0", "strip-ansi": "^3.0.0", "supports-color": "^5.1.0", + "url": "^0.11.0", "webpack-dev-middleware": "3.4.0", "webpack-log": "^2.0.0", "yargs": "12.0.2" @@ -10774,6 +10850,12 @@ "once": "^1.3.1" } }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11091,9 +11173,9 @@ "dev": true }, "zone.js": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", - "integrity": "sha512-W9Nj+UmBJG251wkCacIkETgra4QgBo/vgoEkb4a2uoLzpQG7qF9nzwoLXWU5xj3Fg2mxGvEDh47mg24vXccYjA==" + "version": "0.8.27", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.27.tgz", + "integrity": "sha512-Gbv0wmh0paF4Q60zzcF28+qBWIxtMVuRKBCBm0hvLupZsN/SX7TYYcgYWoVH8MkP+yl0jHlyGHy4dIYUgZvBqA==" } } } diff --git a/client/package.json b/client/package.json index 6efed165..4a5b549c 100644 --- a/client/package.json +++ b/client/package.json @@ -11,34 +11,33 @@ }, "private": true, "dependencies": { - "@angular/animations": "^7.1.4", - "@angular/cdk": "^7.2.0", - "@angular/common": "^7.1.4", - "@angular/compiler": "^7.1.4", - "@angular/core": "^7.1.4", - "@angular/forms": "^7.1.4", - "@angular/http": "^7.1.4", - "@angular/material": "^7.2.0", - "@angular/platform-browser": "^7.1.4", - "@angular/platform-browser-dynamic": "^7.1.4", - "@angular/router": "^7.1.4", + "@angular/animations": "^7.2.0", + "@angular/cdk": "^7.2.1", + "@angular/common": "^7.2.0", + "@angular/compiler": "^7.2.0", + "@angular/core": "^7.2.0", + "@angular/forms": "^7.2.0", + "@angular/http": "^7.2.0", + "@angular/material": "^7.2.1", + "@angular/platform-browser": "^7.2.0", + "@angular/platform-browser-dynamic": "^7.2.0", + "@angular/router": "^7.2.0", "@ng-bootstrap/ng-bootstrap": "^4.0.1", - "cytoscape": "^3.2.20", "bootstrap": "^4.1.3", - "core-js": "^2.6.1", + "core-js": "^2.6.2", "font-awesome": "^4.7.0", "hammerjs": "^2.0.8", "jquery": "^3.3.1", "material-design-icons": "^3.0.1", "popper.js": "^1.14.6", "rxjs": "^6.3.3", - "zone.js": "^0.8.26" + "zone.js": "^0.8.27" }, "devDependencies": { - "@angular-devkit/build-angular": "^0.11.4", - "@angular/cli": "^7.1.4", - "@angular/compiler-cli": "^7.1.4", - "@angular/language-service": "^7.1.4", + "@angular-devkit/build-angular": "^0.12.1", + "@angular/cli": "^7.2.1", + "@angular/compiler-cli": "^7.2.0", + "@angular/language-service": "^7.2.0", "@types/jasmine": "^2.8.14", "@types/jasminewd2": "^2.0.6", "@types/node": "^10.12.18", @@ -54,7 +53,7 @@ "karma-jasmine-html-reporter": "^1.4.0", "protractor": "^5.4.1", "ts-node": "^7.0.1", - "tslint": "^5.12.0", - "typescript": "^3.1.6" + "tslint": "^5.12.1", + "typescript": "^3.2.2" } } From 5018daa1a4f48695ee1c39b6aa2aaa7bc54289b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Sun, 13 Jan 2019 16:49:24 +0100 Subject: [PATCH 34/36] added handling for instance link state change --- client/src/app/api/api/socket.service.ts | 2 +- client/src/app/model/model.service.ts | 11 +++++++---- client/src/app/model/store.service.ts | 9 ++++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/client/src/app/api/api/socket.service.ts b/client/src/app/api/api/socket.service.ts index cab81d57..3c0751e0 100644 --- a/client/src/app/api/api/socket.service.ts +++ b/client/src/app/api/api/socket.service.ts @@ -26,7 +26,7 @@ import { RegistryEvent } from '../../model/models/socketMessage'; import {ComponentTypeEnum, Instance, objIsInstance} from '../../model/models/instance'; -import {InstanceLink, objIsLink, InstanceLinkPayload} from '../../model/models/instanceLink'; +import {objIsLink, InstanceLinkPayload} from '../../model/models/instanceLink'; interface ObserverMap { diff --git a/client/src/app/model/model.service.ts b/client/src/app/model/model.service.ts index 204458b1..2b6f60e1 100644 --- a/client/src/app/model/model.service.ts +++ b/client/src/app/model/model.service.ts @@ -80,13 +80,16 @@ export class ModelService { this.storeService.removeFromState(removedInstance); }); // TODO: after interface changes in ir we will receive a tuple of instances which are now linked - this.socketService.subscribeForEvent(EventTypeEnum.LinkAddedEvent).subscribe((data) => { + this.socketService.subscribeForEvent(EventTypeEnum.LinkAddedEvent).subscribe((data: InstanceLinkPayload) => { console.log('received link added', data); + this.storeService.changeInstancesState([data.instanceFrom, data.instanceTo]); }); - this.socketService.subscribeForEvent(EventTypeEnum.LinkStateChangedEvent).subscribe((data) => { - console.log('received link state changed', data); - }); + this.socketService.subscribeForEvent(EventTypeEnum.LinkStateChangedEvent). + subscribe((data: InstanceLinkPayload) => { + console.log('received link state changed', data); + this.storeService.changeInstancesState([data.instanceFrom, data.instanceTo]); + }); } /** diff --git a/client/src/app/model/store.service.ts b/client/src/app/model/store.service.ts index 3d74639d..982299e2 100644 --- a/client/src/app/model/store.service.ts +++ b/client/src/app/model/store.service.ts @@ -139,10 +139,13 @@ export class StoreService { * Updates the given @param instance in the state. * The update is performed by overwriting the previously stored instance. */ - public changeInstanceState(instance: Instance) { - const newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); + public changeInstancesState(instances: Array) { + let newState: State; + for (const instance of instances) { + newState = StoreService.addNewInstanceToState(this.stateUpdateSubject.value.state, instance); + } // maybe calculate diff before - this.stateUpdateSubject.next({state: newState, change: {type: Actions.CHANGE, elements: [instance]}}); + this.stateUpdateSubject.next({state: newState, change: {type: Actions.CHANGE, elements: instances}}); } /** From acb052a6b8bce6f7b67d7ee9bf833aa650108ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Tue, 15 Jan 2019 17:13:12 +0100 Subject: [PATCH 35/36] hotfix for the bug causing an instance to be deleted wether the dialog result was confirmed or cancle --- .../dashboard/table-all/table-all.component.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/client/src/app/dashboard/table-all/table-all.component.ts b/client/src/app/dashboard/table-all/table-all.component.ts index c06e36b9..9c6a629c 100644 --- a/client/src/app/dashboard/table-all/table-all.component.ts +++ b/client/src/app/dashboard/table-all/table-all.component.ts @@ -77,13 +77,15 @@ export class TableAllComponent implements OnInit { console.log('data', this.dataSource.data); } else { - this.apiService.deleteInstance(id).subscribe((deleteResult: HttpEvent) => { - console.log('result', deleteResult); - }, err => { - console.log('error delete Instance'); - }); - this.removeAt(i); - } + if (result !== 'Cancle') { + this.apiService.deleteInstance(id).subscribe((deleteResult: HttpEvent) => { + console.log('result', deleteResult); + }, err => { + console.log('error delete Instance'); + }); + this.removeAt(i); + } + } this.dialogResult = result; }); } From 905426a38a6a44264eaba42f53733bb3550967f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan-Niclas=20Str=C3=BCwer?= Date: Tue, 15 Jan 2019 18:36:19 +0100 Subject: [PATCH 36/36] minor changes to dialog implementation to test behavior on firefox --- .../add-dialog/add-dialog.component.html | 33 +++++++++---------- .../delete-dialog.component.html | 15 ++++----- .../table-all/table-all.component.html | 4 +-- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/client/src/app/dashboard/add-dialog/add-dialog.component.html b/client/src/app/dashboard/add-dialog/add-dialog.component.html index d5520beb..2c92b594 100644 --- a/client/src/app/dashboard/add-dialog/add-dialog.component.html +++ b/client/src/app/dashboard/add-dialog/add-dialog.component.html @@ -1,17 +1,16 @@ -
-

Add Instance

- -
-
- - - {{getErrorMessage()}} - -
-
-
- - - - -
\ No newline at end of file + +

Add Instance

+
+
+
+ + + {{getErrorMessage()}} + +
+
+
+ + + + diff --git a/client/src/app/dashboard/delete-dialog/delete-dialog.component.html b/client/src/app/dashboard/delete-dialog/delete-dialog.component.html index bb66241a..baa62f4b 100644 --- a/client/src/app/dashboard/delete-dialog/delete-dialog.component.html +++ b/client/src/app/dashboard/delete-dialog/delete-dialog.component.html @@ -16,11 +16,10 @@ ~ limitations under the License. --> -
-

Delete Instance

- Are you sure you want to delete "{{data.name}}" instance? - - - - -
\ No newline at end of file + +

Delete Instance

+Are you sure you want to delete "{{data.name}}" instance? + + + + diff --git a/client/src/app/dashboard/table-all/table-all.component.html b/client/src/app/dashboard/table-all/table-all.component.html index 648e53ff..1e192cb9 100644 --- a/client/src/app/dashboard/table-all/table-all.component.html +++ b/client/src/app/dashboard/table-all/table-all.component.html @@ -64,8 +64,8 @@ -