From 1c5fafaceb088f1731f5a58e9b3e1df136e4b19e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 20:24:43 -0600 Subject: [PATCH 01/88] feat(property-list): add page routing --- src/app/app.routing.ts | 4 ++- src/app/properties/properties.module.ts | 4 ++- .../property-list-page.component.html | 3 +++ .../property-list-page.component.scss | 0 .../property-list-page.component.spec.ts | 25 +++++++++++++++++++ .../property-list-page.component.ts | 15 +++++++++++ 6 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 src/app/properties/property-list-page/property-list-page.component.html create mode 100644 src/app/properties/property-list-page/property-list-page.component.scss create mode 100644 src/app/properties/property-list-page/property-list-page.component.spec.ts create mode 100644 src/app/properties/property-list-page/property-list-page.component.ts diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 0e239d1..80af809 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -13,6 +13,7 @@ import {CreateListingPageComponent} from './properties/create-listing-page/creat import {RemoveListingPageComponent} from './properties/remove-listing-page/remove-listing-page.component'; import {AuthGuard} from './auth/auth.guard'; import {VisitorGuard} from './auth/visitor.guard'; +import {PropertyListPageComponent} from './properties/property-list-page/property-list-page.component'; const routes: Routes = [ {path: '', pathMatch: 'full', redirectTo: 'welcome'}, @@ -26,7 +27,8 @@ const routes: Routes = [ {path: 'account/info', component: AccountInfoPageComponent, canActivate: [AuthGuard]}, {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, - {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]} + {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, + {path: 'properties', component: PropertyListPageComponent} ]; @NgModule({ diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index 322b01e..de61146 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -13,6 +13,7 @@ import {PropertyCreateEffects} from './property-create.effects'; import {PropertyRemoveEffects} from './property-remove.effects'; import {RemoveListingPageComponent} from './remove-listing-page/remove-listing-page.component'; import {RouterModule} from '@angular/router'; +import { PropertyListPageComponent } from './property-list-page/property-list-page.component'; @NgModule({ imports: [ @@ -30,7 +31,8 @@ import {RouterModule} from '@angular/router'; PropertyFormComponent, AddressVerificationFormComponent, ImageFormComponent, - RemoveListingPageComponent + RemoveListingPageComponent, + PropertyListPageComponent ], providers: [PropertiesService, PropertyService] }) diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html new file mode 100644 index 0000000..e627486 --- /dev/null +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -0,0 +1,3 @@ +

+ property-list-page works! +

diff --git a/src/app/properties/property-list-page/property-list-page.component.scss b/src/app/properties/property-list-page/property-list-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/properties/property-list-page/property-list-page.component.spec.ts b/src/app/properties/property-list-page/property-list-page.component.spec.ts new file mode 100644 index 0000000..12e0b9b --- /dev/null +++ b/src/app/properties/property-list-page/property-list-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PropertyListPageComponent } from './property-list-page.component'; + +describe('PropertyListPageComponent', () => { + let component: PropertyListPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PropertyListPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PropertyListPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts new file mode 100644 index 0000000..72a3f59 --- /dev/null +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-property-list-page', + templateUrl: './property-list-page.component.html', + styleUrls: ['./property-list-page.component.scss'] +}) +export class PropertyListPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} From 253932ac9ea09a622019429cfbf7afddfd15e2eb Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 21:21:09 -0600 Subject: [PATCH 02/88] feat(property-list): add html layout --- .../property-list-page.component.html | 60 ++++++++++++++++++- .../property-list-page.component.scss | 22 +++++++ .../property-list-page.component.ts | 11 +++- 3 files changed, 88 insertions(+), 5 deletions(-) diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index e627486..4d0b4d0 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -1,3 +1,57 @@ -

- property-list-page works! -

+ +
+ Sidenav +
diff --git a/src/app/properties/property-list-page/property-list-page.component.scss b/src/app/properties/property-list-page/property-list-page.component.scss index e69de29..efc65b2 100644 --- a/src/app/properties/property-list-page/property-list-page.component.scss +++ b/src/app/properties/property-list-page/property-list-page.component.scss @@ -0,0 +1,22 @@ +div.property-list { + overflow-y: auto; + height: 100%; +} + +div.sort-controls { + padding-bottom: 1rem; + flex: 0 0 108px; + flex-grow: 0; + flex-shrink: 0; + flex-basis: 108px; + position: relative; + border-bottom: 1px solid #CCC; +} + +div.pull-right { + text-align: right; +} + +button.btn-more { + margin: 1rem 0; +} diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 72a3f59..46122a3 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, HostBinding, OnInit} from '@angular/core'; @Component({ selector: 'app-property-list-page', @@ -6,8 +6,15 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./property-list-page.component.scss'] }) export class PropertyListPageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; - constructor() { } + data: number[] = []; + + constructor() { + for (let i = 0; i < 20; i++) { + this.data.push(i); + } + } ngOnInit() { } From 696abda9125ff9029285c166a74a514f25d23af1 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 21:57:16 -0600 Subject: [PATCH 03/88] feat(properties-sort): add properties-sort component --- .../properties-sort.component.html | 3 +++ .../properties-sort.component.scss | 0 .../properties-sort.component.spec.ts | 25 +++++++++++++++++++ .../properties-sort.component.ts | 15 +++++++++++ src/app/properties/properties.module.ts | 4 ++- 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/app/properties/properties-sort/properties-sort.component.html create mode 100644 src/app/properties/properties-sort/properties-sort.component.scss create mode 100644 src/app/properties/properties-sort/properties-sort.component.spec.ts create mode 100644 src/app/properties/properties-sort/properties-sort.component.ts diff --git a/src/app/properties/properties-sort/properties-sort.component.html b/src/app/properties/properties-sort/properties-sort.component.html new file mode 100644 index 0000000..fb38835 --- /dev/null +++ b/src/app/properties/properties-sort/properties-sort.component.html @@ -0,0 +1,3 @@ +

+ properties-sort works! +

diff --git a/src/app/properties/properties-sort/properties-sort.component.scss b/src/app/properties/properties-sort/properties-sort.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/properties/properties-sort/properties-sort.component.spec.ts b/src/app/properties/properties-sort/properties-sort.component.spec.ts new file mode 100644 index 0000000..ca361d4 --- /dev/null +++ b/src/app/properties/properties-sort/properties-sort.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PropertiesSortComponent } from './properties-sort.component'; + +describe('PropertiesSortComponent', () => { + let component: PropertiesSortComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PropertiesSortComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PropertiesSortComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/properties/properties-sort/properties-sort.component.ts b/src/app/properties/properties-sort/properties-sort.component.ts new file mode 100644 index 0000000..9a38e50 --- /dev/null +++ b/src/app/properties/properties-sort/properties-sort.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-properties-sort', + templateUrl: './properties-sort.component.html', + styleUrls: ['./properties-sort.component.scss'] +}) +export class PropertiesSortComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index de61146..c1de58b 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -14,6 +14,7 @@ import {PropertyRemoveEffects} from './property-remove.effects'; import {RemoveListingPageComponent} from './remove-listing-page/remove-listing-page.component'; import {RouterModule} from '@angular/router'; import { PropertyListPageComponent } from './property-list-page/property-list-page.component'; +import { PropertiesSortComponent } from './properties-sort/properties-sort.component'; @NgModule({ imports: [ @@ -32,7 +33,8 @@ import { PropertyListPageComponent } from './property-list-page/property-list-pa AddressVerificationFormComponent, ImageFormComponent, RemoveListingPageComponent, - PropertyListPageComponent + PropertyListPageComponent, + PropertiesSortComponent ], providers: [PropertiesService, PropertyService] }) From d09d7c347d5e55ed2eabc118de73b55cd30a2582 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 22:55:58 -0600 Subject: [PATCH 04/88] feat(property-sort): add UI handlers --- .../properties-sort.component.spec.ts | 52 +++++++++++++++++++ .../properties-sort.component.ts | 37 ++++++++++++- 2 files changed, 87 insertions(+), 2 deletions(-) diff --git a/src/app/properties/properties-sort/properties-sort.component.spec.ts b/src/app/properties/properties-sort/properties-sort.component.spec.ts index ca361d4..948d74d 100644 --- a/src/app/properties/properties-sort/properties-sort.component.spec.ts +++ b/src/app/properties/properties-sort/properties-sort.component.spec.ts @@ -1,13 +1,21 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { PropertiesSortComponent } from './properties-sort.component'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('PropertiesSortComponent', () => { let component: PropertiesSortComponent; let fixture: ComponentFixture; + const testInput = { + sortBy: 'price', + direction: 'UP' + }; beforeEach(async(() => { TestBed.configureTestingModule({ + schemas: [ + CUSTOM_ELEMENTS_SCHEMA + ], declarations: [ PropertiesSortComponent ] }) .compileComponents(); @@ -16,10 +24,54 @@ describe('PropertiesSortComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(PropertiesSortComponent); component = fixture.componentInstance; + component.sortInput = testInput; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should receive category & sort direction through input', () => { + expect(component.sort).toEqual(testInput); + }); + + describe('Changing category', () => { + it('should emit ', () => { + spyOn(component.onSort, 'emit'); + + component.onSelect('recent'); + expect(component.onSort.emit).toHaveBeenCalledWith({ + sortBy: 'recent', + direction: 'UP' + }); + }); + }); + + describe('Clicking Up', () => { + it('should change direction to UP', () => { + spyOn(component.onSort, 'emit'); + component.sort.direction = 'DOWN'; + + component.sortAscending(); + + expect(component.onSort.emit).toHaveBeenCalledWith({ + sortBy: 'price', + direction: 'UP' + }); + }); + }); + + describe('Clicking down', () => { + it('should change direction to Down', () => { + spyOn(component.onSort, 'emit'); + + component.sortDescending(); + + expect(component.onSort.emit).toHaveBeenCalledWith({ + sortBy: 'price', + direction: 'DOWN' + }); + }); + }); }); diff --git a/src/app/properties/properties-sort/properties-sort.component.ts b/src/app/properties/properties-sort/properties-sort.component.ts index 9a38e50..703b8aa 100644 --- a/src/app/properties/properties-sort/properties-sort.component.ts +++ b/src/app/properties/properties-sort/properties-sort.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; @Component({ selector: 'app-properties-sort', @@ -6,10 +6,43 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./properties-sort.component.scss'] }) export class PropertiesSortComponent implements OnInit { + @Input() sortInput; + @Output() onSort = new EventEmitter(); - constructor() { } + public sort; + + public SORT_OPTIONS = { + CATEGORIES: [ + 'price', + 'recent' + ], + DIRECTION_UP: 'UP', + DIRECTION_DOWN: 'DOWN' + }; + + constructor() { + } ngOnInit() { + this.sort = Object.assign({}, this.sortInput); + } + + onSelect(value) { + this.sort.sortBy = value; + this.onSort.emit(this.sort); + } + + sortAscending() { + if (this.sort.direction !== this.SORT_OPTIONS.DIRECTION_UP) { + this.sort.direction = this.SORT_OPTIONS.DIRECTION_UP; + this.onSort.emit(this.sort); + } } + sortDescending() { + if (this.sort.direction !== this.SORT_OPTIONS.DIRECTION_DOWN) { + this.sort.direction = this.SORT_OPTIONS.DIRECTION_DOWN; + this.onSort.emit(this.sort); + } + } } From f2365284c2c39d71c5bd25e2ce0d2f6d88c93363 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 22:56:14 -0600 Subject: [PATCH 05/88] fix(property-list-page): add schema for clarity icons --- .../property-list-page/property-list-page.component.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/properties/property-list-page/property-list-page.component.spec.ts b/src/app/properties/property-list-page/property-list-page.component.spec.ts index 12e0b9b..87ef265 100644 --- a/src/app/properties/property-list-page/property-list-page.component.spec.ts +++ b/src/app/properties/property-list-page/property-list-page.component.spec.ts @@ -1,6 +1,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { PropertyListPageComponent } from './property-list-page.component'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('PropertyListPageComponent', () => { let component: PropertyListPageComponent; @@ -8,6 +9,7 @@ describe('PropertyListPageComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], declarations: [ PropertyListPageComponent ] }) .compileComponents(); From a6c419a6327be8fd61562a41bc8ed239c3464a71 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 22:56:43 -0600 Subject: [PATCH 06/88] refact(property-list): move sort html to properties-sort component and wire handlers --- .../properties-sort.component.html | 22 ++++++++++++++++--- .../properties-sort.component.scss | 3 +++ .../property-list-page.component.html | 18 +-------------- .../property-list-page.component.scss | 4 ---- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/src/app/properties/properties-sort/properties-sort.component.html b/src/app/properties/properties-sort/properties-sort.component.html index fb38835..5115c09 100644 --- a/src/app/properties/properties-sort/properties-sort.component.html +++ b/src/app/properties/properties-sort/properties-sort.component.html @@ -1,3 +1,19 @@ -

- properties-sort works! -

+
+ + + / + +
+ + +
+
diff --git a/src/app/properties/properties-sort/properties-sort.component.scss b/src/app/properties/properties-sort/properties-sort.component.scss index e69de29..d29bc01 100644 --- a/src/app/properties/properties-sort/properties-sort.component.scss +++ b/src/app/properties/properties-sort/properties-sort.component.scss @@ -0,0 +1,3 @@ +div.pull-right { + text-align: right; +} diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index 4d0b4d0..ed0ba89 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -1,22 +1,6 @@
-
- - - / - -
- - -
-
+
diff --git a/src/app/properties/property-list-page/property-list-page.component.scss b/src/app/properties/property-list-page/property-list-page.component.scss index efc65b2..cfe1415 100644 --- a/src/app/properties/property-list-page/property-list-page.component.scss +++ b/src/app/properties/property-list-page/property-list-page.component.scss @@ -13,10 +13,6 @@ div.sort-controls { border-bottom: 1px solid #CCC; } -div.pull-right { - text-align: right; -} - button.btn-more { margin: 1rem 0; } From 5b187b733244cf33e89f6b3376abc80de26c6e39 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Thu, 9 Nov 2017 23:01:05 -0600 Subject: [PATCH 07/88] feat(property-list-page): add i/o attributes to app-properties-sort element --- .../property-list-page/property-list-page.component.html | 2 +- .../property-list-page/property-list-page.component.ts | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index ed0ba89..4ac14a7 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -1,6 +1,6 @@
- +
diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 46122a3..f742296 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -9,6 +9,10 @@ export class PropertyListPageComponent implements OnInit { @HostBinding('class') cssClass = 'content-container'; data: number[] = []; + sortOptions = { + sortBy: 'recent', + direction: 'UP' + }; constructor() { for (let i = 0; i < 20; i++) { @@ -19,4 +23,7 @@ export class PropertyListPageComponent implements OnInit { ngOnInit() { } + sortList(sortOptions) { + console.log(sortOptions); + } } From 53bfd18200dac75536810c4076e1ff52d2cb42b6 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 09:42:15 -0600 Subject: [PATCH 08/88] style(properties-sort): formatting --- .../properties-sort/properties-sort.component.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/properties/properties-sort/properties-sort.component.spec.ts b/src/app/properties/properties-sort/properties-sort.component.spec.ts index 948d74d..384246c 100644 --- a/src/app/properties/properties-sort/properties-sort.component.spec.ts +++ b/src/app/properties/properties-sort/properties-sort.component.spec.ts @@ -1,6 +1,6 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PropertiesSortComponent } from './properties-sort.component'; +import {PropertiesSortComponent} from './properties-sort.component'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('PropertiesSortComponent', () => { @@ -16,9 +16,9 @@ describe('PropertiesSortComponent', () => { schemas: [ CUSTOM_ELEMENTS_SCHEMA ], - declarations: [ PropertiesSortComponent ] + declarations: [PropertiesSortComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { From 750c66204fb957dba8b0ccd01599905762fdb88e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 09:44:44 -0600 Subject: [PATCH 09/88] feat(properties): add main list component --- src/app/properties/properties.module.ts | 4 ++- .../properties/properties.component.html | 3 +++ .../properties/properties.component.scss | 0 .../properties/properties.component.spec.ts | 25 +++++++++++++++++++ .../properties/properties.component.ts | 19 ++++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 src/app/properties/properties/properties.component.html create mode 100644 src/app/properties/properties/properties.component.scss create mode 100644 src/app/properties/properties/properties.component.spec.ts create mode 100644 src/app/properties/properties/properties.component.ts diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index c1de58b..331ddbc 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -15,6 +15,7 @@ import {RemoveListingPageComponent} from './remove-listing-page/remove-listing-p import {RouterModule} from '@angular/router'; import { PropertyListPageComponent } from './property-list-page/property-list-page.component'; import { PropertiesSortComponent } from './properties-sort/properties-sort.component'; +import { PropertiesComponent } from './properties/properties.component'; @NgModule({ imports: [ @@ -34,7 +35,8 @@ import { PropertiesSortComponent } from './properties-sort/properties-sort.compo ImageFormComponent, RemoveListingPageComponent, PropertyListPageComponent, - PropertiesSortComponent + PropertiesSortComponent, + PropertiesComponent ], providers: [PropertiesService, PropertyService] }) diff --git a/src/app/properties/properties/properties.component.html b/src/app/properties/properties/properties.component.html new file mode 100644 index 0000000..e000ebc --- /dev/null +++ b/src/app/properties/properties/properties.component.html @@ -0,0 +1,3 @@ +

+ properties works! +

diff --git a/src/app/properties/properties/properties.component.scss b/src/app/properties/properties/properties.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/properties/properties/properties.component.spec.ts b/src/app/properties/properties/properties.component.spec.ts new file mode 100644 index 0000000..e82e976 --- /dev/null +++ b/src/app/properties/properties/properties.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PropertiesComponent } from './properties.component'; + +describe('PropertiesComponent', () => { + let component: PropertiesComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PropertiesComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PropertiesComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/properties/properties/properties.component.ts b/src/app/properties/properties/properties.component.ts new file mode 100644 index 0000000..3928740 --- /dev/null +++ b/src/app/properties/properties/properties.component.ts @@ -0,0 +1,19 @@ +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; + +@Component({ + selector: 'app-properties', + templateUrl: './properties.component.html', + styleUrls: ['./properties.component.scss'] +}) +export class PropertiesComponent implements OnInit { + @Input() properties; + @Output() requestMore = new EventEmitter(); + + constructor() { } + + ngOnInit() { + } + + getMore() { + } +} From d6fd30787dc76d76c7e24e4c0de2652dca016940 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 10:06:05 -0600 Subject: [PATCH 10/88] feat(properties): add getMore event emission --- .../properties/properties.component.spec.ts | 31 ++++++++++++++++--- .../properties/properties.component.ts | 5 ++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/app/properties/properties/properties.component.spec.ts b/src/app/properties/properties/properties.component.spec.ts index e82e976..d27d17a 100644 --- a/src/app/properties/properties/properties.component.spec.ts +++ b/src/app/properties/properties/properties.component.spec.ts @@ -1,25 +1,48 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PropertiesComponent } from './properties.component'; +import {PropertiesComponent} from './properties.component'; describe('PropertiesComponent', () => { let component: PropertiesComponent; let fixture: ComponentFixture; + let testProperties = [ + { + id: 1, + title: 'Test Title', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'https://s3.teststore.com/imageUrl.png' + } + ]; beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ PropertiesComponent ] + declarations: [PropertiesComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(PropertiesComponent); component = fixture.componentInstance; + component.properties = testProperties; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); + expect(component.properties).toBeDefined(); + }); + + describe('getMore', () => { + it('should emit request more signal', () => { + spyOn(component.requestMore, 'emit'); + + component.getMore(); + + expect(component.requestMore.emit).toHaveBeenCalled(); + }); }); }); diff --git a/src/app/properties/properties/properties.component.ts b/src/app/properties/properties/properties.component.ts index 3928740..fa7f8f8 100644 --- a/src/app/properties/properties/properties.component.ts +++ b/src/app/properties/properties/properties.component.ts @@ -1,4 +1,5 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import {PropertySummary} from '../../_domains/property-summary'; @Component({ selector: 'app-properties', @@ -6,7 +7,7 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; styleUrls: ['./properties.component.scss'] }) export class PropertiesComponent implements OnInit { - @Input() properties; + @Input() properties: PropertySummary[]; @Output() requestMore = new EventEmitter(); constructor() { } @@ -15,5 +16,7 @@ export class PropertiesComponent implements OnInit { } getMore() { + + this.requestMore.emit(); } } From c254856a070209d8c8dffb089e76a69dc3d57a23 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 10:54:18 -0600 Subject: [PATCH 11/88] style(properties): formatting --- src/app/properties/properties/properties.component.spec.ts | 4 ++-- src/app/properties/properties/properties.component.ts | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/app/properties/properties/properties.component.spec.ts b/src/app/properties/properties/properties.component.spec.ts index d27d17a..0abc240 100644 --- a/src/app/properties/properties/properties.component.spec.ts +++ b/src/app/properties/properties/properties.component.spec.ts @@ -5,7 +5,7 @@ import {PropertiesComponent} from './properties.component'; describe('PropertiesComponent', () => { let component: PropertiesComponent; let fixture: ComponentFixture; - let testProperties = [ + const testProperties = [ { id: 1, title: 'Test Title', @@ -13,7 +13,7 @@ describe('PropertiesComponent', () => { price: 500, startDate: '2017-10-01T00:00:00', duration: 6, - thumbnailUrl: 'https://s3.teststore.com/imageUrl.png' + thumbnailUrl: 'assets/images/eachProperty.jpg' } ]; diff --git a/src/app/properties/properties/properties.component.ts b/src/app/properties/properties/properties.component.ts index fa7f8f8..50e1581 100644 --- a/src/app/properties/properties/properties.component.ts +++ b/src/app/properties/properties/properties.component.ts @@ -10,7 +10,8 @@ export class PropertiesComponent implements OnInit { @Input() properties: PropertySummary[]; @Output() requestMore = new EventEmitter(); - constructor() { } + constructor() { + } ngOnInit() { } From 2f9ffce070446a633d56782eeb23bd6f94fcff7b Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 10:54:41 -0600 Subject: [PATCH 12/88] feat(properties): move dummy html to properties component & wire --- .../properties/properties.component.html | 30 +++++++++++++++-- .../property-list-page.component.html | 32 +------------------ 2 files changed, 28 insertions(+), 34 deletions(-) diff --git a/src/app/properties/properties/properties.component.html b/src/app/properties/properties/properties.component.html index e000ebc..ef05985 100644 --- a/src/app/properties/properties/properties.component.html +++ b/src/app/properties/properties/properties.component.html @@ -1,3 +1,27 @@ -

- properties works! -

+ + diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index 4ac14a7..1efa8c2 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -3,37 +3,7 @@
From 17b5e9add21e380c82b33432c1dcda6ade28265e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 10:55:04 -0600 Subject: [PATCH 13/88] style(property-list-page): formatting --- .../property-list-page.component.spec.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/properties/property-list-page/property-list-page.component.spec.ts b/src/app/properties/property-list-page/property-list-page.component.spec.ts index 87ef265..84b1fda 100644 --- a/src/app/properties/property-list-page/property-list-page.component.spec.ts +++ b/src/app/properties/property-list-page/property-list-page.component.spec.ts @@ -1,6 +1,6 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PropertyListPageComponent } from './property-list-page.component'; +import {PropertyListPageComponent} from './property-list-page.component'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('PropertyListPageComponent', () => { @@ -10,9 +10,9 @@ describe('PropertyListPageComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], - declarations: [ PropertyListPageComponent ] + declarations: [PropertyListPageComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { From c39e85f250c914c2b231e56f32167e04c5026a0c Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 10:55:27 -0600 Subject: [PATCH 14/88] refact(property-list-page): add dummy data --- .../property-list-page.component.ts | 63 +++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index f742296..1965b08 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -1,4 +1,5 @@ import {Component, HostBinding, OnInit} from '@angular/core'; +import {Properties} from '../../_domains/properties'; @Component({ selector: 'app-property-list-page', @@ -8,16 +9,70 @@ import {Component, HostBinding, OnInit} from '@angular/core'; export class PropertyListPageComponent implements OnInit { @HostBinding('class') cssClass = 'content-container'; - data: number[] = []; + data: Properties = { + list: [ + { + id: 1, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + { + id: 2, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + { + id: 3, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + { + id: 4, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + { + id: 5, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + { + id: 6, + title: 'Lorem Ipsum Dolores', + address: '123 Test Ave., Madison, WI', + price: 500, + startDate: '2017-10-01T00:00:00', + duration: 6, + thumbnailUrl: 'assets/images/eachProperty.jpg' + }, + ] + }; sortOptions = { sortBy: 'recent', direction: 'UP' }; constructor() { - for (let i = 0; i < 20; i++) { - this.data.push(i); - } } ngOnInit() { From fbdc83f39db15647106142971f38384ef6ff2f60 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 10 Nov 2017 11:00:12 -0600 Subject: [PATCH 15/88] feat(requestMore): add handler for getMore event --- src/app/properties/properties/properties.component.scss | 3 +++ .../property-list-page/property-list-page.component.html | 2 +- .../property-list-page/property-list-page.component.scss | 4 ---- .../property-list-page/property-list-page.component.ts | 4 ++++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/app/properties/properties/properties.component.scss b/src/app/properties/properties/properties.component.scss index e69de29..11eff71 100644 --- a/src/app/properties/properties/properties.component.scss +++ b/src/app/properties/properties/properties.component.scss @@ -0,0 +1,3 @@ +button.btn-more { + margin: 1rem 0; +} diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index 1efa8c2..ea936a3 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -3,7 +3,7 @@
- +
diff --git a/src/app/properties/property-list-page/property-list-page.component.scss b/src/app/properties/property-list-page/property-list-page.component.scss index cfe1415..7e5a546 100644 --- a/src/app/properties/property-list-page/property-list-page.component.scss +++ b/src/app/properties/property-list-page/property-list-page.component.scss @@ -12,7 +12,3 @@ div.sort-controls { position: relative; border-bottom: 1px solid #CCC; } - -button.btn-more { - margin: 1rem 0; -} diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 1965b08..75a7439 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -81,4 +81,8 @@ export class PropertyListPageComponent implements OnInit { sortList(sortOptions) { console.log(sortOptions); } + + requestMore() { + console.log('getMore'); + } } From ac42242e1f6b62e7d324165d1cbbbd4225edf961 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:13:42 -0600 Subject: [PATCH 16/88] build(env): add local env --- .angular-cli.json | 1 + src/environments/environment.local.ts | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 src/environments/environment.local.ts diff --git a/.angular-cli.json b/.angular-cli.json index 73eeec3..f9413a9 100644 --- a/.angular-cli.json +++ b/.angular-cli.json @@ -30,6 +30,7 @@ "environmentSource": "environments/environment.ts", "environments": { "dev": "environments/environment.ts", + "local": "environments/environment.local.ts", "prod": "environments/environment.prod.ts" } } diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts new file mode 100644 index 0000000..7e1fe75 --- /dev/null +++ b/src/environments/environment.local.ts @@ -0,0 +1,9 @@ +/** + * Created by yclee on 11/11/2017. + */ +export const environment = { + production: false, + API_ENDPOINT: { + SERVER: 'http://localhost:3000/api' + } +}; From b25f082fd2f2dfe148af8171a58623761beea626 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:16:57 -0600 Subject: [PATCH 17/88] fix(access-purchase): fix data structure --- src/app/_domains/pricing.ts | 2 +- .../access-purchase-form/access-purchase-form.component.html | 2 +- .../access-purchase-form/access-purchase-form.component.spec.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/_domains/pricing.ts b/src/app/_domains/pricing.ts index 0d87c60..526d2eb 100644 --- a/src/app/_domains/pricing.ts +++ b/src/app/_domains/pricing.ts @@ -2,6 +2,6 @@ export interface Pricing { id: number; type: 'VENDOR_SUBSCRIPTION' | 'VENDOR_ADDITIONAL' | 'CUSTOMER_SUBSCRIPTION'; alias: string; - pricePerItem: number; + price: number; canHaveMultiple: boolean; } diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html index dd60e42..81d544c 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html @@ -13,7 +13,7 @@
Price:
-
${{item.pricePerItem * count | number:'1.2-2'}}
+
${{item.price * count | number:'1.2-2'}}
diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts index 839e2f4..e2ec96b 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts @@ -22,7 +22,7 @@ describe('AccessPurchaseFormComponent', () => { component = fixture.componentInstance; component.item = { title: 'Subleaser Access Subscription', - pricePerItem: 10.99, + price: 10.99, canHaveMultiple: false }; fixture.detectChanges(); From c36546a7b03e11ace190c619f0c0b0cf01a96615 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:17:18 -0600 Subject: [PATCH 18/88] fix(access-purchase): fix token handler scope error --- .../access-purchase-form.component.ts | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts index 57372de..baf7b1d 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts @@ -13,7 +13,8 @@ export class AccessPurchaseFormComponent implements OnInit { count = 1; hasToken = false; - constructor() { } + constructor() { + } ngOnInit() { } @@ -42,14 +43,7 @@ export class AccessPurchaseFormComponent implements OnInit { const handler = (window).StripeCheckout.configure({ key: 'pk_test_oi0sKPJYLGjdvOXOM8tE8cMa', locale: 'auto', - token: function (token: any) { - this.onTokenReceived.emit({ - item: this.item, - count: this.count, - token: token - }); - this.hasToken = true; - } + token: this.emitToken.bind(this) }); handler.open({ @@ -58,4 +52,13 @@ export class AccessPurchaseFormComponent implements OnInit { amount: this.count * this.item.pricePerItem * 100 }); } + + emitToken(token: any) { + this.onTokenReceived.emit({ + item: this.item, + count: this.count, + token: token + }); + this.hasToken = true; + } } From 951f6522872a99a086433a0ee69f60bb023a8a4d Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:17:39 -0600 Subject: [PATCH 19/88] fix(access-purchase-page): add missing submit method binding --- .../access-purchase-page/access-purchase-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.html b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.html index c7f0345..f1393c2 100644 --- a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.html +++ b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.html @@ -7,6 +7,6 @@

Access Purchase

- + From 48c8cf4eef29f16acc2659c6904f16a98745422e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:17:51 -0600 Subject: [PATCH 20/88] fix(api-endpoints): update pricings api endpoint --- src/app/core/api-endpoints.constant.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index 6a97f72..5e5856b 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -104,7 +104,7 @@ export const API = { ACCESSES: { GET_PRICE_INFO: { method: 'GET', - url: '/pricing' + url: '/pricings' }, ADD: { method: 'POST', From 10eb2f1db82b64ec9ef7fcc0fd975ffd6f964400 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 10:21:59 -0600 Subject: [PATCH 21/88] fix(access-purchase-page): fix type error --- .../access-purchase-page/access-purchase-page.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts index faa7be5..6830c43 100644 --- a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts +++ b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts @@ -16,7 +16,7 @@ export class AccessPurchasePageComponent implements OnInit { id: null, type: null, alias: null, - pricePerItem: null, + price: null, canHaveMultiple: null }; hasToken = false; From a4e3f2f691abe1622e303832c83e25380cb70877 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:44:29 -0600 Subject: [PATCH 22/88] feat(properties): add reducer to app --- src/app/app.module.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 02f772b..3281dee 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,6 +18,7 @@ import * as MyProperties from './_actions/my-properties.reducer'; import * as UserInfo from './_actions/user-info.reducer'; import * as Wishlist from './_actions/wishlist.reducer'; import * as Pricings from './_actions/pricings.reducer'; +import * as Properties from './_actions/properties.reducer'; import {EffectsModule} from '@ngrx/effects'; import {UserModule} from './user/user.module'; import {PropertiesModule} from './properties/properties.module'; @@ -41,7 +42,8 @@ import { MyPropertiesListComponent } from './user/my-properties-list/my-properti userInfo: UserInfo.reducer, wishlist: Wishlist.reducer, routerReducer: routerReducer, - pricings: Pricings.reducer + pricings: Pricings.reducer, + properties: Properties.reducer }), EffectsModule.forRoot([]), StoreDevtoolsModule.instrument({ From 88fbc3f3e0c592f2791b8520b410b16f1cfc97ea Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:45:29 -0600 Subject: [PATCH 23/88] feat(properties): add cursor field to query param & properties --- src/app/_actions/properties.reducer.ts | 5 +++-- src/app/_domains/properties.ts | 1 + src/app/_domains/property-query-params.ts | 5 +++-- src/app/user/user-info-get.effects.ts | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/app/_actions/properties.reducer.ts b/src/app/_actions/properties.reducer.ts index 088ffbc..616bcd7 100644 --- a/src/app/_actions/properties.reducer.ts +++ b/src/app/_actions/properties.reducer.ts @@ -6,14 +6,15 @@ import {Properties} from '../_domains/properties'; const prefix = PropertiesActions.ACTION_NAME; const INIT = 'INIT'; const initialState: Properties = { - list: [] + list: [], + cursor: null }; export function reducer(state = initialState, action: Action = {type: INIT}): Properties { switch (action.type) { case PropertiesActions.INCREASE_LIST: return { - ...state, + cursor: (action).payload.cursor, list: [...state.list, ...((action).payload.list)] }; diff --git a/src/app/_domains/properties.ts b/src/app/_domains/properties.ts index 3e9f859..61713d5 100644 --- a/src/app/_domains/properties.ts +++ b/src/app/_domains/properties.ts @@ -2,4 +2,5 @@ import {PropertySummary} from './property-summary'; export interface Properties { list: PropertySummary[]; + cursor: string; } diff --git a/src/app/_domains/property-query-params.ts b/src/app/_domains/property-query-params.ts index c69429d..714bd90 100644 --- a/src/app/_domains/property-query-params.ts +++ b/src/app/_domains/property-query-params.ts @@ -1,6 +1,7 @@ export interface PropertyQueryParams { - sortBy?: string; - sortOrder?: boolean; + sortBy: string; + direction: string; + cursor?: string; searchBy?: string; filters?: any; } diff --git a/src/app/user/user-info-get.effects.ts b/src/app/user/user-info-get.effects.ts index 433be78..ef6441f 100644 --- a/src/app/user/user-info-get.effects.ts +++ b/src/app/user/user-info-get.effects.ts @@ -41,7 +41,7 @@ export class UserInfoGetEffects { new UserInfoActions.Set({phone: data.phone, notification: data.notification}), new WishlistActions.Set({list: data.wishlist}), new AccessesActions.Set({list: data.access}), - new MyPropertiesActions.Set({list: data.listing}) + new MyPropertiesActions.Set({list: data.listing, cursor: null}) ]); @Effect() onError$: Observable = this.actions$ From e3a03ef43bf1d4c4ba0e75a1e7486dc55a352bc7 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:45:53 -0600 Subject: [PATCH 24/88] feat(properties-query): add api --- .../properties-query.actions.ts | 20 +++++++++ .../properties/properties-query.effects.ts | 45 +++++++++++++++++++ src/app/properties/properties.module.ts | 4 +- 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/app/_effect-actions/properties-query.actions.ts create mode 100644 src/app/properties/properties-query.effects.ts diff --git a/src/app/_effect-actions/properties-query.actions.ts b/src/app/_effect-actions/properties-query.actions.ts new file mode 100644 index 0000000..c2dda13 --- /dev/null +++ b/src/app/_effect-actions/properties-query.actions.ts @@ -0,0 +1,20 @@ +import {Action} from '@ngrx/store'; +import {RequestError} from '../_domains/request-error'; +import {PropertyQueryParams} from '../_domains/property-query-params'; + +export const REQUEST = 'PropertiesQueryEffects.REQUEST'; +export const ERROR = 'PropertiesQueryEffects.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: PropertyQueryParams) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/properties/properties-query.effects.ts b/src/app/properties/properties-query.effects.ts new file mode 100644 index 0000000..c4877cf --- /dev/null +++ b/src/app/properties/properties-query.effects.ts @@ -0,0 +1,45 @@ +import {Action} from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {RestApiService} from '../core/rest-api.service'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import 'rxjs/add/operator/switchMap'; +import {AlertActions} from '../_actions/alert.actions'; +import {RequestError} from '../_domains/request-error'; +import 'rxjs/add/operator/do'; +import {Injectable} from '@angular/core'; +import 'rxjs/add/observable/of'; +import * as PropertiesQueryActions from '../_effect-actions/properties-query.actions'; +import * as PropertiesActions from '../_actions/properties.actions'; + +@Injectable() +export class PropertiesQueryEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(PropertiesQueryActions.REQUEST) + .map((action: PropertiesQueryActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.PROPERTIES.QUERY); + request.setUrlParams(payload); + + if (payload.cursor) { + return this._api.request(request) + .map(response => new PropertiesActions.IncreaseList(response)) + .catch(error => Observable.of(new PropertiesQueryActions.Error(error))); + } else { + return this._api.request(request) + .map(response => new PropertiesActions.Set(response)) + .catch(error => Observable.of(new PropertiesQueryActions.Error(error))); + } + }); + + @Effect() onError$: Observable = this.actions$ + .ofType(PropertiesQueryActions.ERROR) + .map((action: PropertiesQueryActions.Error) => action.payload) + .map((error: RequestError) => { + return new AlertActions.SetError('Unknown Error'); + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index 331ddbc..aa3207f 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -16,6 +16,7 @@ import {RouterModule} from '@angular/router'; import { PropertyListPageComponent } from './property-list-page/property-list-page.component'; import { PropertiesSortComponent } from './properties-sort/properties-sort.component'; import { PropertiesComponent } from './properties/properties.component'; +import {PropertiesQueryEffects} from './properties-query.effects'; @NgModule({ imports: [ @@ -25,7 +26,8 @@ import { PropertiesComponent } from './properties/properties.component'; ClarityModule.forChild(), EffectsModule.forFeature([ PropertyCreateEffects, - PropertyRemoveEffects + PropertyRemoveEffects, + PropertiesQueryEffects ]) ], declarations: [ From 74fe0d5ba52516b19c27f63fd1cc7be45e89ee94 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:46:08 -0600 Subject: [PATCH 25/88] feat(properties.service): implement query --- src/app/properties/properties.service.ts | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/app/properties/properties.service.ts b/src/app/properties/properties.service.ts index 1dea00f..4140e29 100644 --- a/src/app/properties/properties.service.ts +++ b/src/app/properties/properties.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; import {Properties} from '../_domains/properties'; +import * as PropertiesQueryActions from '../_effect-actions/properties-query.actions'; +import {PropertyQueryParams} from '../_domains/property-query-params'; @Injectable() export class PropertiesService { @@ -11,19 +13,8 @@ export class PropertiesService { this.properties$ = this._store.select('properties'); } - query() { - - } - - filter(filterParams: any) { - - } - - search(searchParams: any) { - - } - - sort(category, order) { + query(params: PropertyQueryParams) { + this._store.dispatch(new PropertiesQueryActions.Request(params)); } } From f751fa5ca12cc9e23f552a79d4589360fd9fa0bf Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:46:21 -0600 Subject: [PATCH 26/88] fix(properties.component): add default image --- src/app/properties/properties/properties.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/properties/properties/properties.component.html b/src/app/properties/properties/properties.component.html index ef05985..cccb8f5 100644 --- a/src/app/properties/properties/properties.component.html +++ b/src/app/properties/properties/properties.component.html @@ -2,7 +2,7 @@
- ... + ...
From e9c9b7c5eba021455f2780ece4afa313e845917c Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:46:38 -0600 Subject: [PATCH 27/88] feat(property-list-page): implement properties data component --- .../property-list-page.component.html | 2 +- .../property-list-page.component.spec.ts | 14 +++++++ .../property-list-page.component.ts | 41 +++++++++++++++---- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index ea936a3..9e89e56 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -1,6 +1,6 @@
- +
diff --git a/src/app/properties/property-list-page/property-list-page.component.spec.ts b/src/app/properties/property-list-page/property-list-page.component.spec.ts index 84b1fda..33c99dd 100644 --- a/src/app/properties/property-list-page/property-list-page.component.spec.ts +++ b/src/app/properties/property-list-page/property-list-page.component.spec.ts @@ -2,14 +2,28 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {PropertyListPageComponent} from './property-list-page.component'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {PropertiesService} from '../properties.service'; +import {RouterTestingModule} from '@angular/router/testing'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; describe('PropertyListPageComponent', () => { let component: PropertyListPageComponent; let fixture: ComponentFixture; + const mockService = { + query: jasmine.createSpy('query'), + properties$: Observable.of({list: [], cursor: null}) + }; beforeEach(async(() => { TestBed.configureTestingModule({ schemas: [CUSTOM_ELEMENTS_SCHEMA], + imports: [ + RouterTestingModule + ], + providers: [ + {provide: PropertiesService, useValue: mockService} + ], declarations: [PropertyListPageComponent] }) .compileComponents(); diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 75a7439..24528e5 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -1,5 +1,8 @@ import {Component, HostBinding, OnInit} from '@angular/core'; import {Properties} from '../../_domains/properties'; +import {ActivatedRoute, Router} from '@angular/router'; +import {PropertiesService} from '../properties.service'; +import {PropertyQueryParams} from '../../_domains/property-query-params'; @Component({ selector: 'app-property-list-page', @@ -9,6 +12,7 @@ import {Properties} from '../../_domains/properties'; export class PropertyListPageComponent implements OnInit { @HostBinding('class') cssClass = 'content-container'; + queryParams: any; data: Properties = { list: [ { @@ -65,24 +69,45 @@ export class PropertyListPageComponent implements OnInit { duration: 6, thumbnailUrl: 'assets/images/eachProperty.jpg' }, - ] - }; - sortOptions = { - sortBy: 'recent', - direction: 'UP' + ], + cursor: null }; - constructor() { + constructor(private _propertiesService: PropertiesService, + private _activatedRoute: ActivatedRoute, + private _router: Router) { + const urlQueryParams = this._activatedRoute.snapshot.queryParams; + if (!urlQueryParams.sortBy || !urlQueryParams.direction) { + const newQueryParams = { + sortBy: urlQueryParams.sortBy || 'recent', + direction: urlQueryParams.direction || 'UP' + }; + this._router.navigate(['properties'], {queryParams: newQueryParams}); + } } ngOnInit() { + this._activatedRoute.queryParams.subscribe((params) => { + if (params.sortBy && params.direction) { + this.queryParams = params; + this._propertiesService.query(params); + } + }); + this._propertiesService.properties$.subscribe((properties) => { + this.data = properties; + }); } sortList(sortOptions) { - console.log(sortOptions); + const newQueryParams = Object.assign({}, this.queryParams, sortOptions); + delete newQueryParams.cursor; + + this._router.navigate(['properties'], {queryParams: newQueryParams}); } requestMore() { - console.log('getMore'); + const newQueryParams = Object.assign({}, this.queryParams, {cursor: this.data.cursor}); + + this._router.navigate(['properties'], {queryParams: newQueryParams}); } } From cae62e92cd99316ee6bbe9e24b962b57491b63be Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 11:56:35 -0600 Subject: [PATCH 28/88] feat(landing-page): add link to properties page --- src/app/landing-page/landing-page.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/landing-page/landing-page.component.html b/src/app/landing-page/landing-page.component.html index ea201ae..063d6f5 100644 --- a/src/app/landing-page/landing-page.component.html +++ b/src/app/landing-page/landing-page.component.html @@ -2,7 +2,7 @@
- +
From f74016a674598959083a555b6fa5947afb3fabac Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 13:13:28 -0600 Subject: [PATCH 29/88] feat(property-create): get options from server --- src/app/_actions/property-options.actions.ts | 15 ++ src/app/_actions/property-options.reducer.ts | 17 +++ src/app/_actions/property.reducer.ts | 4 +- src/app/_domains/property-option.ts | 7 + src/app/_domains/property-options.ts | 5 + .../property-options.actions.ts | 25 ++++ src/app/app.module.ts | 4 +- src/app/core/api-endpoints.constant.ts | 4 + .../create-listing-page.component.html | 6 +- .../create-listing-page.component.ts | 14 ++ src/app/properties/properties.module.ts | 10 +- .../property-form.component.html | 26 ++-- .../property-form/property-form.component.ts | 140 +----------------- .../property-options-get.effects.ts | 42 ++++++ src/app/properties/property.service.ts | 11 +- 15 files changed, 173 insertions(+), 157 deletions(-) create mode 100644 src/app/_actions/property-options.actions.ts create mode 100644 src/app/_actions/property-options.reducer.ts create mode 100644 src/app/_domains/property-option.ts create mode 100644 src/app/_domains/property-options.ts create mode 100644 src/app/_effect-actions/property-options.actions.ts create mode 100644 src/app/properties/property-options-get.effects.ts diff --git a/src/app/_actions/property-options.actions.ts b/src/app/_actions/property-options.actions.ts new file mode 100644 index 0000000..a53a4cd --- /dev/null +++ b/src/app/_actions/property-options.actions.ts @@ -0,0 +1,15 @@ +import * as CrudActions from './crud.actions'; +import {PropertyOptions} from '../_domains/property-options'; + +export const ACTION_NAME = 'PropertyOptionsActions'; + +export const SET = ACTION_NAME + CrudActions.SET; + +export class Set extends CrudActions.Set { + constructor(public payload: PropertyOptions) { + super(ACTION_NAME); + } +} + +export type All + = Set; diff --git a/src/app/_actions/property-options.reducer.ts b/src/app/_actions/property-options.reducer.ts new file mode 100644 index 0000000..e3e1b09 --- /dev/null +++ b/src/app/_actions/property-options.reducer.ts @@ -0,0 +1,17 @@ +import {Action} from '@ngrx/store'; +import * as PropertyOptionsActions from './property-options.actions'; +import * as Crud from './crud.reducer'; +import {Property} from '../_domains/property'; +import {PropertyOptions} from '../_domains/property-options'; + +const prefix = PropertyOptionsActions.ACTION_NAME; +const INIT = 'INIT'; +const initialState: PropertyOptions = { + list: [] +}; + +export function reducer(state = initialState, action: Action = {type: INIT}): Property { + const newState = Crud.reducer(state, action, prefix, initialState); + + return newState === null ? initialState : newState; +} diff --git a/src/app/_actions/property.reducer.ts b/src/app/_actions/property.reducer.ts index 82ca91d..2f2fe07 100644 --- a/src/app/_actions/property.reducer.ts +++ b/src/app/_actions/property.reducer.ts @@ -1,9 +1,9 @@ import {Action, ActionReducer} from '@ngrx/store'; -import * as UserInfoActions from './user-info.actions'; +import * as PropertyActions from './property.actions'; import * as Crud from './crud.reducer'; import {Property} from '../_domains/property'; -const prefix = UserInfoActions.ACTION_NAME; +const prefix = PropertyActions.ACTION_NAME; const INIT = 'INIT'; const initialState = null; diff --git a/src/app/_domains/property-option.ts b/src/app/_domains/property-option.ts new file mode 100644 index 0000000..24a9142 --- /dev/null +++ b/src/app/_domains/property-option.ts @@ -0,0 +1,7 @@ +export interface PropertyOption { + id: number; + alias: string; + type: string; + createTime?: string; + updateTime?: string; +} diff --git a/src/app/_domains/property-options.ts b/src/app/_domains/property-options.ts new file mode 100644 index 0000000..93ca34c --- /dev/null +++ b/src/app/_domains/property-options.ts @@ -0,0 +1,5 @@ +import {PropertyOption} from './property-option'; + +export interface PropertyOptions { + list: PropertyOption[] +} diff --git a/src/app/_effect-actions/property-options.actions.ts b/src/app/_effect-actions/property-options.actions.ts new file mode 100644 index 0000000..15409c8 --- /dev/null +++ b/src/app/_effect-actions/property-options.actions.ts @@ -0,0 +1,25 @@ +import {Action} from '@ngrx/store'; +import {RequestError} from '../_domains/request-error'; +import {PropertyOptions} from '../_domains/property-options'; + +export const REQUEST = 'PropertyOptions.REQUEST'; +export const SUCCESS = 'PropertyOptions.SUCCESS'; +export const ERROR = 'PropertyOptions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; +} + +export class Success implements Action { + readonly type = SUCCESS; + + constructor(public payload: PropertyOptions) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 3281dee..5204625 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -19,6 +19,7 @@ import * as UserInfo from './_actions/user-info.reducer'; import * as Wishlist from './_actions/wishlist.reducer'; import * as Pricings from './_actions/pricings.reducer'; import * as Properties from './_actions/properties.reducer'; +import * as PropertyOptions from './_actions/property-options.reducer'; import {EffectsModule} from '@ngrx/effects'; import {UserModule} from './user/user.module'; import {PropertiesModule} from './properties/properties.module'; @@ -43,7 +44,8 @@ import { MyPropertiesListComponent } from './user/my-properties-list/my-properti wishlist: Wishlist.reducer, routerReducer: routerReducer, pricings: Pricings.reducer, - properties: Properties.reducer + properties: Properties.reducer, + propertyOptions: PropertyOptions.reducer }), EffectsModule.forRoot([]), StoreDevtoolsModule.instrument({ diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index 5e5856b..43b3bcf 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -41,6 +41,10 @@ export const API = { GET_SINGLE: { method: 'GET', url: '/properties/${propertyId}' + }, + GET_OPTIONS: { + method: 'GET', + url: '/properties/options' } }, USER: { diff --git a/src/app/properties/create-listing-page/create-listing-page.component.html b/src/app/properties/create-listing-page/create-listing-page.component.html index 6f3cbf8..37e389c 100644 --- a/src/app/properties/create-listing-page/create-listing-page.component.html +++ b/src/app/properties/create-listing-page/create-listing-page.component.html @@ -1,9 +1,9 @@
-
+
-
- +
+
diff --git a/src/app/properties/create-listing-page/create-listing-page.component.ts b/src/app/properties/create-listing-page/create-listing-page.component.ts index cf03e17..0404b44 100644 --- a/src/app/properties/create-listing-page/create-listing-page.component.ts +++ b/src/app/properties/create-listing-page/create-listing-page.component.ts @@ -9,10 +9,24 @@ import {PropertyService} from '../property.service'; export class CreateListingPageComponent implements OnInit { @HostBinding('class') cssClass = 'content-container'; + options = { + amenities: [], + pets: [], + houseRules: [] + }; + constructor(private _propertyService: PropertyService) { + this._propertyService.propertyOptions$.subscribe((options) => { + if (options.list.length > 0) { + this.options.amenities = options.list.filter((option) => option.type === 'AMENITIES'); + this.options.pets = options.list.filter((option) => option.type === 'PETS'); + this.options.houseRules = options.list.filter((option) => option.type === 'HOUSE_RULES'); + } + }); } ngOnInit() { + this._propertyService.getOptions(); } onSubmit(form) { diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index aa3207f..eb54628 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -13,10 +13,11 @@ import {PropertyCreateEffects} from './property-create.effects'; import {PropertyRemoveEffects} from './property-remove.effects'; import {RemoveListingPageComponent} from './remove-listing-page/remove-listing-page.component'; import {RouterModule} from '@angular/router'; -import { PropertyListPageComponent } from './property-list-page/property-list-page.component'; -import { PropertiesSortComponent } from './properties-sort/properties-sort.component'; -import { PropertiesComponent } from './properties/properties.component'; +import {PropertyListPageComponent} from './property-list-page/property-list-page.component'; +import {PropertiesSortComponent} from './properties-sort/properties-sort.component'; +import {PropertiesComponent} from './properties/properties.component'; import {PropertiesQueryEffects} from './properties-query.effects'; +import {PropertyOptionsEffects} from './property-options-get.effects'; @NgModule({ imports: [ @@ -27,7 +28,8 @@ import {PropertiesQueryEffects} from './properties-query.effects'; EffectsModule.forFeature([ PropertyCreateEffects, PropertyRemoveEffects, - PropertiesQueryEffects + PropertiesQueryEffects, + PropertyOptionsEffects ]) ], declarations: [ diff --git a/src/app/properties/property-form/property-form.component.html b/src/app/properties/property-form/property-form.component.html index e012373..4faeba7 100644 --- a/src/app/properties/property-form/property-form.component.html +++ b/src/app/properties/property-form/property-form.component.html @@ -1,4 +1,4 @@ -
+
@@ -80,10 +80,10 @@
-
-
- - +
+
+ +
@@ -92,10 +92,10 @@
-
-
- - +
+
+ +
@@ -103,10 +103,10 @@
-
-
- - +
+
+ +
diff --git a/src/app/properties/property-form/property-form.component.ts b/src/app/properties/property-form/property-form.component.ts index ddd4b85..3cf8491 100644 --- a/src/app/properties/property-form/property-form.component.ts +++ b/src/app/properties/property-form/property-form.component.ts @@ -9,6 +9,7 @@ import {PropertyForm} from '../../_domains/property-form'; }) export class PropertyFormComponent implements OnInit { @Input() type: string; + @Input() options: any; @Output() submit = new EventEmitter(); propertyForm: FormGroup; @@ -86,124 +87,6 @@ export class PropertyFormComponent implements OnInit { alias: '1 year' } ]; - amenityOptions = [ - { - id: 1, - alias: 'Elevator' - }, - { - id: 2, - alias: 'Wifi' - }, - { - id: 3, - alias: 'Internet' - }, - { - id: 4, - alias: 'Kitchen' - }, - { - id: 5, - alias: 'TV' - }, - { - id: 6, - alias: 'Washer' - }, - { - id: 7, - alias: 'Dryer' - }, - { - id: 8, - alias: 'Free Parking' - }, - { - id: 9, - alias: 'Paid Parking' - }, - { - id: 10, - alias: 'AC' - }, - { - id: 11, - alias: 'Heating' - }, - { - id: 12, - alias: 'Hot Tub' - }, - { - id: 13, - alias: 'Pool' - }, - { - id: 14, - alias: 'Gym' - }, - { - id: 15, - alias: 'Indoor Fireplace' - }, - { - id: 16, - alias: 'Cable TV' - }, - { - id: 17, - alias: 'Doorman' - }, - { - id: 18, - alias: 'Bathtub' - }, - { - id: 19, - alias: 'Game Console' - } - ]; - petOptions = [ - { - id: 1, - alias: 'Has Dogs' - }, - { - id: 2, - alias: 'Has Cats' - }, - { - id: 3, - alias: 'Has Other Pets' - } - ]; - houseRulesOptions = [ - { - id: 1, - alias: 'Dogs OK' - }, - { - id: 2, - alias: 'Cats OK' - }, - { - id: 3, - alias: 'Other Pets OK' - }, - { - id: 4, - alias: 'No Smoking' - }, - { - id: 5, - alias: 'No Drinking' - }, - { - id: 6, - alias: 'Couples OK' - } - ]; constructor(private _formBuilder: FormBuilder) { } @@ -217,18 +100,9 @@ export class PropertyFormComponent implements OnInit { price: [0, Validators.required], startDate: ['', Validators.required], duration: [3, Validators.required], - amenities: this._formBuilder.group(this.amenityOptions.reduce((obj, option) => { - obj[option.alias] = [false]; - return obj; - }, {})), - pets: this._formBuilder.group(this.petOptions.reduce((obj, option) => { - obj[option.alias] = [false]; - return obj; - }, {})), - houseRules: this._formBuilder.group(this.houseRulesOptions.reduce((obj, option) => { - obj[option.alias] = [false]; - return obj; - }, {})) + amenities: this._formBuilder.array(this.options.amenities.map((option) => this._formBuilder.control(false))), + pets: this._formBuilder.array(this.options.pets.map((option) => this._formBuilder.control(false))), + houseRules: this._formBuilder.array(this.options.houseRules.map((option) => this._formBuilder.control(false))), }); } @@ -243,11 +117,11 @@ export class PropertyFormComponent implements OnInit { price: value.price, startDate: value.startDate, duration: value.duration, - amenities: this.amenityOptions.filter((option) => value.amenities[option.alias]) + amenities: this.options.amenities.filter((option) => value.amenities[option.id]) .map((option) => option.id), - pets: this.petOptions.filter((option) => value.pets[option.alias]) + pets: this.options.pets.filter((option) => value.pets[option.id]) .map((option) => option.id), - houseRules: this.houseRulesOptions.filter((option) => value.houseRules[option.alias]) + houseRules: this.options.houseRules.filter((option) => value.houseRules[option.id]) .map((option) => option.id), imageUrls: [] }); diff --git a/src/app/properties/property-options-get.effects.ts b/src/app/properties/property-options-get.effects.ts new file mode 100644 index 0000000..796579f --- /dev/null +++ b/src/app/properties/property-options-get.effects.ts @@ -0,0 +1,42 @@ +import {Action} from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {RestApiService} from '../core/rest-api.service'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import {RequestError} from '../_domains/request-error'; +import {Injectable} from '@angular/core'; +import {AlertActions} from '../_actions/alert.actions'; +import 'rxjs/add/operator/do'; +import 'rxjs/add/observable/of'; +import 'rxjs/add/operator/switchMap'; +import * as PropertyOptionsGetActions from '../_effect-actions/property-options.actions'; +import * as PropertyOptionsActions from '../_actions/property-options.actions'; + +@Injectable() +export class PropertyOptionsEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(PropertyOptionsGetActions.REQUEST) + .switchMap(() => { + const request = new RestApiRequest(API.PROPERTIES.GET_OPTIONS); + + return this._api.request(request) + .map(response => new PropertyOptionsGetActions.Success({list: response})) + .catch(error => Observable.of(new PropertyOptionsGetActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(PropertyOptionsGetActions.SUCCESS) + .map((action: PropertyOptionsGetActions.Success) => action.payload) + .map((payload) => new PropertyOptionsActions.Set(payload)); + + @Effect() onError$: Observable = this.actions$ + .ofType(PropertyOptionsGetActions.ERROR) + .map((action: PropertyOptionsGetActions.Error) => action.payload) + .map((error: RequestError) => { + return new AlertActions.SetError('Unknown Error'); + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/properties/property.service.ts b/src/app/properties/property.service.ts index d30e7e5..9a38b3a 100644 --- a/src/app/properties/property.service.ts +++ b/src/app/properties/property.service.ts @@ -2,17 +2,21 @@ import {Injectable} from '@angular/core'; import {Property} from '../_domains/property'; import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; +import * as PropertyOptionsActions from '../_effect-actions/property-options.actions'; // import * as PropertyGetActions from '../_effect-actions/property-get.actions'; // import * as PropertyUpdateActions from '../_effect-actions/property-update.actions'; import * as PropertyCreateActions from '../_effect-actions/property-create.actions'; import * as PropertyRemoveActions from '../_effect-actions/property-remove.actions'; -import {RestApiRequest} from '../core/rest-api-request'; +import {PropertyOptions} from '../_domains/property-options'; + @Injectable() export class PropertyService { public property$: Observable; + public propertyOptions$: Observable; constructor(private _store: Store) { this.property$ = this._store.select('property'); + this.propertyOptions$ = this._store.select('propertyOptions'); } get(id) { @@ -30,4 +34,9 @@ export class PropertyService { remove(id, form) { this._store.dispatch(new PropertyRemoveActions.Request({id: id, form: form})); } + + getOptions() { + + this._store.dispatch(new PropertyOptionsActions.Request()); + } } From 7d69c1640bc0b66b44ceea773d16d6dd51de5961 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 11 Nov 2017 14:10:17 -0600 Subject: [PATCH 30/88] fix(property-create): update to match server API --- src/app/_domains/property-form.ts | 5 +- src/app/_domains/property-options.ts | 2 +- .../create-listing-page.component.html | 2 +- src/app/properties/property-create.effects.ts | 2 +- .../property-form.component.html | 2 +- .../property-form/property-form.component.ts | 108 +++++++++++++++--- src/app/properties/property.service.spec.ts | 8 +- 7 files changed, 97 insertions(+), 32 deletions(-) diff --git a/src/app/_domains/property-form.ts b/src/app/_domains/property-form.ts index 27b9c29..0d54d7a 100644 --- a/src/app/_domains/property-form.ts +++ b/src/app/_domains/property-form.ts @@ -2,13 +2,10 @@ export interface PropertyForm { title: string; address: any; description: string; - propertyType: string; roomType: string; price: number; startDate: string; duration: number; - amenities: number[]; - pets: number[]; - houseRules: number[]; + options: number[]; imageUrls: string[]; } diff --git a/src/app/_domains/property-options.ts b/src/app/_domains/property-options.ts index 93ca34c..0dfb16c 100644 --- a/src/app/_domains/property-options.ts +++ b/src/app/_domains/property-options.ts @@ -1,5 +1,5 @@ import {PropertyOption} from './property-option'; export interface PropertyOptions { - list: PropertyOption[] + list: PropertyOption[]; } diff --git a/src/app/properties/create-listing-page/create-listing-page.component.html b/src/app/properties/create-listing-page/create-listing-page.component.html index 37e389c..0af3474 100644 --- a/src/app/properties/create-listing-page/create-listing-page.component.html +++ b/src/app/properties/create-listing-page/create-listing-page.component.html @@ -3,7 +3,7 @@
- +
diff --git a/src/app/properties/property-create.effects.ts b/src/app/properties/property-create.effects.ts index 695d31d..4ac41aa 100644 --- a/src/app/properties/property-create.effects.ts +++ b/src/app/properties/property-create.effects.ts @@ -30,7 +30,7 @@ export class PropertyCreateEffects { @Effect({dispatch: false}) onSuccess$: Observable = this.actions$ .ofType(PropertyCreateActions.SUCCESS) - .do(() => this._router.navigate(['accountInfo'])); + .do(() => this._router.navigate(['account/info'])); @Effect() onError$: Observable = this.actions$ .ofType(PropertyCreateActions.ERROR) diff --git a/src/app/properties/property-form/property-form.component.html b/src/app/properties/property-form/property-form.component.html index 4faeba7..101bd98 100644 --- a/src/app/properties/property-form/property-form.component.html +++ b/src/app/properties/property-form/property-form.component.html @@ -25,7 +25,7 @@
- +
diff --git a/src/app/properties/property-form/property-form.component.ts b/src/app/properties/property-form/property-form.component.ts index 3cf8491..65858e2 100644 --- a/src/app/properties/property-form/property-form.component.ts +++ b/src/app/properties/property-form/property-form.component.ts @@ -10,30 +10,40 @@ import {PropertyForm} from '../../_domains/property-form'; export class PropertyFormComponent implements OnInit { @Input() type: string; @Input() options: any; - @Output() submit = new EventEmitter(); + @Output() formSubmit = new EventEmitter(); propertyForm: FormGroup; addressVerification = { verified: false, - address: {} + address: { + components: [], + location: { + lat: null, + lng: null + } + } }; roomTypeOptions = [ { - value: '1_BR', + value: 'STUDIO', + alias: 'STUDIO' + }, + { + value: '1BR', alias: '1BR' }, { - value: '2_BR', + value: '2BR', alias: '2BR' }, { - value: '3_BR', + value: '3BR', alias: '3BR' }, { - value: '4_BR', + value: '4BR', alias: '4BR' } ]; @@ -95,8 +105,8 @@ export class PropertyFormComponent implements OnInit { this.propertyForm = this._formBuilder.group({ title: ['', Validators.required], description: [''], - propertyType: ['APT', Validators.required], - roomType: ['1_BR', Validators.required], + propertyType: ['APARTMENT', Validators.required], + roomType: ['1BR', Validators.required], price: [0, Validators.required], startDate: ['', Validators.required], duration: [3, Validators.required], @@ -107,26 +117,86 @@ export class PropertyFormComponent implements OnInit { } onSubmit({value, valid}) { + const amenities = this.options.amenities + .filter((option, index) => value.amenities[index]) + .map((option) => option.id); + const pets = this.options.pets + .filter((option, index) => value.pets[index]) + .map((option) => option.id); + const houseRules = this.options.houseRules + .filter((option, index) => value.houseRules[index]) + .map((option) => option.id); - this.submit.emit({ + const options = [...amenities, ...pets, ...houseRules]; + let level1Type; + switch (value.propertyType) { + case 'APARTMENT': + level1Type = 'street_number'; + break; + case 'HOUSE': + level1Type = 'street_number'; + break; + } + + this.formSubmit.emit({ title: value.title, - address: this.addressVerification.address, - description: value.description, - propertyType: value.propertyType, + address: this.buildAddress(value.propertyType), roomType: value.roomType, - price: value.price, + description: value.description, startDate: value.startDate, duration: value.duration, - amenities: this.options.amenities.filter((option) => value.amenities[option.id]) - .map((option) => option.id), - pets: this.options.pets.filter((option) => value.pets[option.id]) - .map((option) => option.id), - houseRules: this.options.houseRules.filter((option) => value.houseRules[option.id]) - .map((option) => option.id), + price: value.price, + options: options, imageUrls: [] }); } + private buildAddress(type) { + const includedTypes = [ + 'subpremise', + 'street_number', + 'route', + 'locality', + 'administrative_area_level_1', + 'postal_code' + ]; + + const address = this.addressVerification.address.components.filter((component) => { + return component.types.reduce((prev, curr) => { + return prev || includedTypes.includes(curr); + }, false); + }); + const level1 = address + .shift() + .long_name; + const level2 = address + .filter((component) => component.types.includes('street_number') || component.types.includes('route')) + .map((component) => component.long_name).join(' '); + const city = address + .filter((component) => component.types.includes('locality')) + .map((component) => component.long_name) + .join(' '); + const state = address + .filter((component) => component.types.includes('administrative_area_level_1')) + .map((component) => component.long_name) + .join(' '); + const zipcode = address + .filter((component) => component.types.includes('postal_code')) + .map((component) => component.long_name) + .join(' '); + const geocode = this.addressVerification.address.location; + + return { + type: type, + detailLevel1: level1, + detailLevel2: level2, + city: city, + state: state, + zipcode: zipcode, + geocode: geocode + }; + } + updateAddressVerification(addressVerification) { this.addressVerification = addressVerification; } diff --git a/src/app/properties/property.service.spec.ts b/src/app/properties/property.service.spec.ts index adfa623..ab52f33 100644 --- a/src/app/properties/property.service.spec.ts +++ b/src/app/properties/property.service.spec.ts @@ -28,16 +28,14 @@ describe('PropertyService', () => { inject([PropertyService], (service: PropertyService) => { const testForm: PropertyForm = { title: 'testTitle', - address: {}, + address: { + }, description: '', - propertyType: '', roomType: '', price: 0, startDate: '', duration: 0, - amenities: [], - pets: [], - houseRules: [], + options: [], imageUrls: [], }; From 2f5d8b920e6fdd265be6c33109e496611c1818e5 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Wed, 15 Nov 2017 13:01:41 -0600 Subject: [PATCH 31/88] fix(user-info): update user info get logics --- src/app/_actions/accesses.reducer.ts | 3 +- src/app/_domains/access.ts | 4 +- src/app/_domains/accesses.ts | 3 +- .../my-properties-list.component.ts | 43 ------------------- .../subscription-list.component.html | 2 +- .../subscription-list.component.ts | 37 ++++------------ src/app/user/user-info-get.effects.ts | 25 ++++++++++- 7 files changed, 38 insertions(+), 79 deletions(-) diff --git a/src/app/_actions/accesses.reducer.ts b/src/app/_actions/accesses.reducer.ts index 52c64e9..fb9e367 100644 --- a/src/app/_actions/accesses.reducer.ts +++ b/src/app/_actions/accesses.reducer.ts @@ -6,7 +6,8 @@ import {Accesses} from '../_domains/accesses'; const prefix = AccessesActions.ACTION_NAME; const INIT = 'INIT'; const initialState: Accesses = { - list: [] + vendor: null, + customer: null }; export function reducer(state = initialState, action: Action = {type: INIT}): Accesses { diff --git a/src/app/_domains/access.ts b/src/app/_domains/access.ts index 616f470..2a1edd1 100644 --- a/src/app/_domains/access.ts +++ b/src/app/_domains/access.ts @@ -1,4 +1,4 @@ export interface Access { - id: number; - // TODO: Needs configuration + nextPaymentDate: string; + paymentAmount: number; } diff --git a/src/app/_domains/accesses.ts b/src/app/_domains/accesses.ts index 9abb469..ccc3f5e 100644 --- a/src/app/_domains/accesses.ts +++ b/src/app/_domains/accesses.ts @@ -1,5 +1,6 @@ import {Access} from './access'; export interface Accesses { - list: Access[]; + vendor: Access, + customer: Access } diff --git a/src/app/user/my-properties-list/my-properties-list.component.ts b/src/app/user/my-properties-list/my-properties-list.component.ts index ef7337d..396670b 100644 --- a/src/app/user/my-properties-list/my-properties-list.component.ts +++ b/src/app/user/my-properties-list/my-properties-list.component.ts @@ -11,51 +11,8 @@ import {Router} from '@angular/router'; export class MyPropertiesListComponent implements OnInit { properties: PropertySummary[]; - private _mockData = {list: [ - { - id: 1, - title: 'Lorem Ipsum Dolores 1', - address: '123 Test Ave., Madison, WI', - price: 550, - startDate: '2017-10-31T00:00:00', - duration: 3, - thumbnailUrl: 'assets/images/bedroom.jpg', - }, - { - id: 2, - title: 'Lorem Ipsum Dolores 2', - address: '223 Test Ave., Madison, WI', - price: 550, - startDate: '2017-10-31T00:00:00', - duration: 3, - thumbnailUrl: 'assets/images/bedroom.jpg', - }, - { - id: 3, - title: 'Lorem Ipsum Dolores 3', - address: '323 Test Ave., Madison, WI', - price: 350, - startDate: '2017-10-31T00:00:00', - duration: 2, - thumbnailUrl: 'assets/images/bedroom.jpg', - }, - { - id: 4, - title: 'Lorem Ipsum Dolores 4', - address: '124 Test Ave., Madison, WI', - price: 750, - startDate: '2017-11-31T00:00:00', - duration: 8, - thumbnailUrl: 'assets/images/bedroom.jpg', - } - ]}; - constructor(private _store: Store, private _router: Router) { this._store.select('myProperties').subscribe((data) => { - if (data.list.length > 0) { - } else { - data = this._mockData; - } this.properties = data.list; }); diff --git a/src/app/user/subscription-list/subscription-list.component.html b/src/app/user/subscription-list/subscription-list.component.html index dbb7c38..3f56d71 100644 --- a/src/app/user/subscription-list/subscription-list.component.html +++ b/src/app/user/subscription-list/subscription-list.component.html @@ -8,7 +8,7 @@
Subleaser Access
View Access
- +
Next Payment: {{customerAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
diff --git a/src/app/user/subscription-list/subscription-list.component.ts b/src/app/user/subscription-list/subscription-list.component.ts index 46407e0..b91c61a 100644 --- a/src/app/user/subscription-list/subscription-list.component.ts +++ b/src/app/user/subscription-list/subscription-list.component.ts @@ -10,39 +10,18 @@ export class SubscriptionListComponent implements OnInit { vendorAccess: any = null; customerAccess: any = null; - private _mockData = { - customer_next_payment_date: '2013-08-14T00:01:00.234Z', - customer_payment_amount: '5', - customer_end_date: '2013-07-14T00:01:00.234Z', - vendor_next_payment_date: '2013-06-14T00:01:00.234Z', - vendor_payment_amount: '5', - vendor_end_date: '2013-05-14T00:01:00.234Z' - }; - constructor(private _store: Store) { this._store.select('accesses').subscribe((accesses) => { - if (accesses.list.length > 0) { + if (accesses.vendor) { + this.vendorAccess = accesses.vendor; } else { - const data = this._mockData; - if (data.vendor_next_payment_date) { - this.vendorAccess = { - nextPaymentDate: data.vendor_next_payment_date, - paymentAmount: data.vendor_payment_amount, - endDate: data.vendor_end_date - }; - } else { - this.vendorAccess = null; - } + this.vendorAccess = null; + } - if (data.customer_next_payment_date) { - this.customerAccess = { - nextPaymentDate: data.customer_next_payment_date, - paymentAmount: data.customer_payment_amount, - endDate: data.customer_end_date - }; - } else { - this.customerAccess = null; - } + if (accesses.customer) { + this.customerAccess = accesses.customer; + } else { + this.customerAccess = null; } }); } diff --git a/src/app/user/user-info-get.effects.ts b/src/app/user/user-info-get.effects.ts index ef6441f..9d0ce32 100644 --- a/src/app/user/user-info-get.effects.ts +++ b/src/app/user/user-info-get.effects.ts @@ -40,8 +40,8 @@ export class UserInfoGetEffects { .mergeMap((data) => [ new UserInfoActions.Set({phone: data.phone, notification: data.notification}), new WishlistActions.Set({list: data.wishlist}), - new AccessesActions.Set({list: data.access}), - new MyPropertiesActions.Set({list: data.listing, cursor: null}) + new AccessesActions.Set(this.processAccess(data.access)), + new MyPropertiesActions.Set({list: data.properties, cursor: null}) ]); @Effect() onError$: Observable = this.actions$ @@ -57,4 +57,25 @@ export class UserInfoGetEffects { constructor(private _api: RestApiService, private actions$: Actions) { } + + processAccess(response) { + let accesses = { + vendor: null, + customer: null + }; + if (response.vendor_next_payment_date) { + accesses.vendor = { + nextPaymentDate: response.vendor_next_payment_date, + paymentAmount: response.vendor_payment_amount + }; + } + if (response.customer_next_payment_date) { + accesses.customer = { + nextPaymentDate: response.customer_next_payment_date, + paymentAmount: response.customer_payment_amount + }; + } + + return accesses; + } } From 3a23dd0e95b75969e078393cedafbcce846d52fa Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Wed, 15 Nov 2017 16:25:06 -0600 Subject: [PATCH 32/88] fix(access): fix access purchase --- src/app/_domains/auth.ts | 2 +- src/app/_domains/purchase-form.ts | 1 - .../_effect-actions/user-info-get.actions.ts | 2 +- .../access-purchase-form.component.html | 7 +---- .../access-purchase-form.component.ts | 27 +++---------------- .../access-purchase-page.component.ts | 5 ++-- .../my-properties-list.component.html | 2 +- .../subscription-list.component.html | 4 +-- src/app/user/user-info-get.effects.ts | 2 ++ src/app/user/user-info.service.ts | 2 +- 10 files changed, 14 insertions(+), 40 deletions(-) diff --git a/src/app/_domains/auth.ts b/src/app/_domains/auth.ts index 3c21dbc..aeb9733 100644 --- a/src/app/_domains/auth.ts +++ b/src/app/_domains/auth.ts @@ -2,6 +2,6 @@ export class Auth { constructor(public token: string = null, public email: string = null, - public id: number = null) { + public id: number | string = null) { } } diff --git a/src/app/_domains/purchase-form.ts b/src/app/_domains/purchase-form.ts index 768753c..87b7d5d 100644 --- a/src/app/_domains/purchase-form.ts +++ b/src/app/_domains/purchase-form.ts @@ -2,5 +2,4 @@ import {StripeToken} from './stripe-token'; export interface PurchaseForm { token: StripeToken; type: string; - count: number; } diff --git a/src/app/_effect-actions/user-info-get.actions.ts b/src/app/_effect-actions/user-info-get.actions.ts index 23cd186..4cd9bf5 100644 --- a/src/app/_effect-actions/user-info-get.actions.ts +++ b/src/app/_effect-actions/user-info-get.actions.ts @@ -8,7 +8,7 @@ export const ERROR = 'UserInfoGet.ERROR'; export class Request implements Action { readonly type = REQUEST; - constructor(public payload: number) { + constructor(public payload: number | string) { } } diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html index 81d544c..ec17e97 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.html @@ -5,15 +5,10 @@
-
count: {{count}}
-
- - -
Price:
-
${{item.price * count | number:'1.2-2'}}
+
${{item.price | number:'1.2-2'}}
diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts index baf7b1d..d19226c 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.ts @@ -10,7 +10,6 @@ export class AccessPurchaseFormComponent implements OnInit { @Input() item: any; @Output() onTokenReceived: EventEmitter = new EventEmitter(); - count = 1; hasToken = false; constructor() { @@ -19,29 +18,10 @@ export class AccessPurchaseFormComponent implements OnInit { ngOnInit() { } - incrementCount() { - this.count++; - this.hasToken = false; - this.onTokenReceived.emit({ - item: this.item, - count: this.count, - token: null - }); - } - - decrementCount() { - this.count -= 1 < this.count ? 1 : 0; - this.hasToken = false; - this.onTokenReceived.emit({ - item: this.item, - count: this.count, - token: null - }); - } - openCheckout() { // based on http://blog.mgechev.com/2016/07/05/using-stripe-payment-with-angular-2/ + const ONE_DOLLAR_IN_CENTS = 100; const handler = (window).StripeCheckout.configure({ - key: 'pk_test_oi0sKPJYLGjdvOXOM8tE8cMa', + key: 'pk_test_RrXUdTG5pJMkuNh7R5USxmxe', locale: 'auto', token: this.emitToken.bind(this) }); @@ -49,14 +29,13 @@ export class AccessPurchaseFormComponent implements OnInit { handler.open({ name: 'Madison Sublease', description: this.item.alias, - amount: this.count * this.item.pricePerItem * 100 + amount: this.item.pricePerItem * ONE_DOLLAR_IN_CENTS }); } emitToken(token: any) { this.onTokenReceived.emit({ item: this.item, - count: this.count, token: token }); this.hasToken = true; diff --git a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts index 6830c43..4b80735 100644 --- a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts +++ b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.ts @@ -44,9 +44,8 @@ export class AccessPurchasePageComponent implements OnInit { if (purchaseData.token !== null) { this.hasToken = true; this.purchaseForm = { - stripeToken: purchaseData.token, - type: purchaseData.item.type, - count: purchaseData.count + token: purchaseData.token, + type: purchaseData.item }; } else { this.hasToken = false; diff --git a/src/app/user/my-properties-list/my-properties-list.component.html b/src/app/user/my-properties-list/my-properties-list.component.html index 6fea97c..a527142 100644 --- a/src/app/user/my-properties-list/my-properties-list.component.html +++ b/src/app/user/my-properties-list/my-properties-list.component.html @@ -1,7 +1,7 @@
-
+
diff --git a/src/app/user/subscription-list/subscription-list.component.html b/src/app/user/subscription-list/subscription-list.component.html index 3f56d71..f731d08 100644 --- a/src/app/user/subscription-list/subscription-list.component.html +++ b/src/app/user/subscription-list/subscription-list.component.html @@ -1,6 +1,6 @@
Subleaser Access
- +
Next Payment: {{vendorAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{vendorAccess.paymentAmount | number: '1.2-2' }}
@@ -8,7 +8,7 @@
Subleaser Access
View Access
- +
Next Payment: {{customerAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
diff --git a/src/app/user/user-info-get.effects.ts b/src/app/user/user-info-get.effects.ts index 9d0ce32..1d15de5 100644 --- a/src/app/user/user-info-get.effects.ts +++ b/src/app/user/user-info-get.effects.ts @@ -27,8 +27,10 @@ export class UserInfoGetEffects { .map((action: UserInfoGetEffectsActions.Request) => action.payload) .switchMap((payload) => { const request = new RestApiRequest(API.USER.GET_INFO); + console.log('setting path param: ', payload); request.setPathParams({userId: payload}); + console.log('making request'); return this._api.request(request) .map(response => new UserInfoGetEffectsActions.Success(response)) .catch(error => Observable.of(new UserInfoGetEffectsActions.Error(error))); diff --git a/src/app/user/user-info.service.ts b/src/app/user/user-info.service.ts index cb2dc9e..8422779 100644 --- a/src/app/user/user-info.service.ts +++ b/src/app/user/user-info.service.ts @@ -20,7 +20,7 @@ export class UserInfoService { } get() { - + console.log('dispatch user info get with ', this._auth.id); this._store.dispatch(new UserInfoGetActions.Request(this._auth.id)); } From 81a9c147de92ee80e3e5b53cb85bc909372559bd Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 18 Nov 2017 12:46:24 -0600 Subject: [PATCH 33/88] fix(property-create): fix property create success handling --- src/app/access-purchase/access-add.effects.ts | 2 +- src/app/properties/property-create.effects.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/app/access-purchase/access-add.effects.ts b/src/app/access-purchase/access-add.effects.ts index 30d1bb7..e495bf8 100644 --- a/src/app/access-purchase/access-add.effects.ts +++ b/src/app/access-purchase/access-add.effects.ts @@ -31,7 +31,7 @@ export class AccessAddEffects { @Effect({dispatch: false}) onSuccess$: Observable = this.actions$ .ofType(AccessAddActions.SUCCESS) - .do(() => this._router.navigate(['accountInfo'])); + .do(() => this._router.navigate(['account/info'])); @Effect() onError$: Observable = this.actions$ .ofType(AccessAddActions.ERROR) diff --git a/src/app/properties/property-create.effects.ts b/src/app/properties/property-create.effects.ts index 4ac41aa..ddb0674 100644 --- a/src/app/properties/property-create.effects.ts +++ b/src/app/properties/property-create.effects.ts @@ -28,9 +28,10 @@ export class PropertyCreateEffects { .catch(error => Observable.of(new PropertyCreateActions.Error(error))); }); - @Effect({dispatch: false}) onSuccess$: Observable = this.actions$ + @Effect() onSuccess$: Observable = this.actions$ .ofType(PropertyCreateActions.SUCCESS) - .do(() => this._router.navigate(['account/info'])); + .do(() => this._router.navigate(['account/info'])) + .map(() => new AlertActions.SetInfo('Property Created')); @Effect() onError$: Observable = this.actions$ .ofType(PropertyCreateActions.ERROR) @@ -38,8 +39,12 @@ export class PropertyCreateEffects { .map((error: RequestError) => { switch (error.status) { case HttpStatus.PAYMENT_REQUIRED: - this._router.navigate(['access']); - return new AlertActions.SetInfo('Payment Required'); + this._router.navigate(['access/vendor-add']); + return new AlertActions.SetInfo('Payment Required for additional properties'); + + case HttpStatus.FORBIDDEN: + this._router.navigate(['access/vendor']); + return new AlertActions.SetInfo('Payment Required for subscription'); default: return new AlertActions.SetError('Unknown Error'); From c675f67ecad5c1cefb94658b085ae05b7300205e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 18 Nov 2017 13:48:10 -0600 Subject: [PATCH 34/88] fix(my-properties/access): fix integration test errors --- .../my-properties-card/my-properties-card.component.html | 8 +++++++- .../my-properties-card/my-properties-card.component.scss | 4 ++++ .../my-properties-card/my-properties-card.component.ts | 4 ++++ .../property-summary-card.component.html | 2 +- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/user/my-properties-card/my-properties-card.component.html b/src/app/user/my-properties-card/my-properties-card.component.html index 8760500..5634c64 100644 --- a/src/app/user/my-properties-card/my-properties-card.component.html +++ b/src/app/user/my-properties-card/my-properties-card.component.html @@ -1,5 +1,11 @@
- + +
diff --git a/src/app/user/my-properties-card/my-properties-card.component.scss b/src/app/user/my-properties-card/my-properties-card.component.scss index efec266..fea58e5 100644 --- a/src/app/user/my-properties-card/my-properties-card.component.scss +++ b/src/app/user/my-properties-card/my-properties-card.component.scss @@ -3,4 +3,8 @@ position: absolute; top: 2.25rem; right: 1.75rem; + + button { + cursor: pointer; + } } diff --git a/src/app/user/my-properties-card/my-properties-card.component.ts b/src/app/user/my-properties-card/my-properties-card.component.ts index 3c2070a..560862d 100644 --- a/src/app/user/my-properties-card/my-properties-card.component.ts +++ b/src/app/user/my-properties-card/my-properties-card.component.ts @@ -15,6 +15,10 @@ export class MyPropertiesCardComponent implements OnInit { ngOnInit() { } + onEdit() { + + } + onRemove() { this.remove.emit(this.data.id); } diff --git a/src/app/user/property-summary-card/property-summary-card.component.html b/src/app/user/property-summary-card/property-summary-card.component.html index 0f93e43..25eb9ce 100644 --- a/src/app/user/property-summary-card/property-summary-card.component.html +++ b/src/app/user/property-summary-card/property-summary-card.component.html @@ -3,7 +3,7 @@
- {{data.title}} + {{data.title}}Payment Required {{data.address}}
From c27b7c31e4e29dbfa749c3f91a0e1508d63c371b Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 18 Nov 2017 13:54:11 -0600 Subject: [PATCH 35/88] style(app): fix lint & test errors --- src/app/_domains/accesses.ts | 4 ++-- .../access-purchase-form.component.spec.ts | 17 ----------------- .../access-purchase-page.component.spec.ts | 5 ++--- src/app/user/user-info-get.effects.ts | 4 +--- 4 files changed, 5 insertions(+), 25 deletions(-) diff --git a/src/app/_domains/accesses.ts b/src/app/_domains/accesses.ts index ccc3f5e..2dc9431 100644 --- a/src/app/_domains/accesses.ts +++ b/src/app/_domains/accesses.ts @@ -1,6 +1,6 @@ import {Access} from './access'; export interface Accesses { - vendor: Access, - customer: Access + vendor: Access; + customer: Access; } diff --git a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts index e2ec96b..9c02d06 100644 --- a/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts +++ b/src/app/access-purchase/access-purchase-form/access-purchase-form.component.spec.ts @@ -30,22 +30,5 @@ describe('AccessPurchaseFormComponent', () => { it('should create and have default count = 1', () => { expect(component).toBeTruthy(); - expect(component.count).toEqual(1); - }); - - describe('increment/decrementCount', () => { - it('should increment & decrement count appropriately, with min value 1', () => { - expect(component.count).toEqual(1); - component.incrementCount(); - expect(component.count).toEqual(2); - component.incrementCount(); - expect(component.count).toEqual(3); - component.decrementCount(); - expect(component.count).toEqual(2); - component.decrementCount(); - expect(component.count).toEqual(1); - component.decrementCount(); - expect(component.count).toEqual(1); - }); }); }); diff --git a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.spec.ts b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.spec.ts index 64cdde0..b15b367 100644 --- a/src/app/access-purchase/access-purchase-page/access-purchase-page.component.spec.ts +++ b/src/app/access-purchase/access-purchase-page/access-purchase-page.component.spec.ts @@ -63,9 +63,8 @@ describe('AccessPurchasePageComponent', () => { expect(component.hasToken).toBeTruthy(); expect(component.purchaseForm).toEqual({ - type: testPurchaseData.item.type, - count: testPurchaseData.count, - stripeToken: testPurchaseData.token + type: testPurchaseData.item, + token: testPurchaseData.token }); }); diff --git a/src/app/user/user-info-get.effects.ts b/src/app/user/user-info-get.effects.ts index 1d15de5..15dc7e1 100644 --- a/src/app/user/user-info-get.effects.ts +++ b/src/app/user/user-info-get.effects.ts @@ -27,10 +27,8 @@ export class UserInfoGetEffects { .map((action: UserInfoGetEffectsActions.Request) => action.payload) .switchMap((payload) => { const request = new RestApiRequest(API.USER.GET_INFO); - console.log('setting path param: ', payload); request.setPathParams({userId: payload}); - console.log('making request'); return this._api.request(request) .map(response => new UserInfoGetEffectsActions.Success(response)) .catch(error => Observable.of(new UserInfoGetEffectsActions.Error(error))); @@ -61,7 +59,7 @@ export class UserInfoGetEffects { } processAccess(response) { - let accesses = { + const accesses = { vendor: null, customer: null }; From 0108045476768e7987a81489bb74de3c98bce0e9 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 19 Nov 2017 12:48:34 -0600 Subject: [PATCH 36/88] feat(property-page): add UI layout --- package-lock.json | 8815 +++++++++++++++++ package.json | 1 + src/app/app.routing.ts | 4 +- src/app/properties/properties.module.ts | 10 +- .../properties/properties.component.html | 2 +- .../property-page.component.html | 59 + .../property-page.component.scss | 11 + .../property-page.component.spec.ts | 35 + .../property-page/property-page.component.ts | 81 + 9 files changed, 9014 insertions(+), 4 deletions(-) create mode 100644 package-lock.json create mode 100644 src/app/properties/property-page/property-page.component.html create mode 100644 src/app/properties/property-page/property-page.component.scss create mode 100644 src/app/properties/property-page/property-page.component.spec.ts create mode 100644 src/app/properties/property-page/property-page.component.ts diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..346ca08 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,8815 @@ +{ + "name": "ms3-web", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@agm/core": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@agm/core/-/core-1.0.0-beta.2.tgz", + "integrity": "sha512-3bdfvkWDmJszpj/F6Fzgv7sks0cs/cUEQPfs37tcJFz3jc62SsXy4TGb/WJT8FpH2nSGE6DonP8lXuFxB0lblQ==" + }, + "@angular-devkit/build-optimizer": { + "version": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.21.tgz", + "integrity": "sha1-0xAKF5xXDTxFugL4dIbJMeiEXhM=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "typescript": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "webpack-sources": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz" + } + }, + "@angular-devkit/core": { + "version": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.14.tgz", + "integrity": "sha1-AbG/iaOzVIQ+1Lj+xOeA7Goxymw=", + "dev": true + }, + "@angular-devkit/schematics": { + "version": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.24.tgz", + "integrity": "sha1-XkwvAcla6nL9sOgyUEvD0kdZNPY=", + "dev": true, + "requires": { + "@angular-devkit/core": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.0.14.tgz", + "@ngtools/json-schema": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "rxjs": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz" + } + }, + "@angular/animations": { + "version": "https://registry.npmjs.org/@angular/animations/-/animations-4.4.3.tgz", + "integrity": "sha1-OWxKW/sihH+eRYJFuplfnBMMDPM=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/cli": { + "version": "https://registry.npmjs.org/@angular/cli/-/cli-1.4.3.tgz", + "integrity": "sha1-g4nU7q3+NKux0W5Tg2QWqPhDD7M=", + "dev": true, + "requires": { + "@angular-devkit/build-optimizer": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.0.21.tgz", + "@angular-devkit/schematics": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.0.24.tgz", + "@ngtools/json-schema": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "@ngtools/webpack": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.7.1.tgz", + "@schematics/angular": "https://registry.npmjs.org/@schematics/angular/-/angular-0.0.36.tgz", + "autoprefixer": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "circular-dependency-plugin": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-3.0.0.tgz", + "common-tags": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", + "copy-webpack-plugin": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz", + "core-object": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "css-loader": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "cssnano": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "denodeify": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "ember-cli-string-utils": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "exports-loader": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "extract-text-webpack-plugin": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz", + "file-loader": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", + "fs-extra": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "get-caller-file": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "heimdalljs": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz", + "heimdalljs-logger": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz", + "html-webpack-plugin": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "istanbul-instrumenter-loader": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz", + "karma-source-map-support": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", + "less": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", + "less-loader": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", + "license-webpack-plugin": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.0.1.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "memory-fs": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "node-modules-path": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "node-sass": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "nopt": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "opn": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "portfinder": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "postcss-loader": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", + "postcss-url": "https://registry.npmjs.org/postcss-url/-/postcss-url-5.1.2.tgz", + "raw-loader": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "rxjs": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", + "sass-loader": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "silent-error": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "source-map-loader": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.1.tgz", + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "style-loader": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "stylus": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "stylus-loader": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", + "typescript": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "url-loader": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "webpack": "https://registry.npmjs.org/webpack/-/webpack-3.5.6.tgz", + "webpack-concat-plugin": "https://registry.npmjs.org/webpack-concat-plugin/-/webpack-concat-plugin-1.4.0.tgz", + "webpack-dev-middleware": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "webpack-dev-server": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.7.1.tgz", + "webpack-merge": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.0.tgz", + "zone.js": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.17.tgz" + } + }, + "@angular/common": { + "version": "https://registry.npmjs.org/@angular/common/-/common-4.4.3.tgz", + "integrity": "sha1-+SrGiwK+xfDm02A6hDKU3JbJYHQ=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/compiler": { + "version": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.4.3.tgz", + "integrity": "sha1-jwEWPa19s0CEl9mdOHVUtrGFrWY=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/compiler-cli": { + "version": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-4.4.3.tgz", + "integrity": "sha1-GDr4HxQRhrjWYLBkKVktQLdUCko=", + "dev": true, + "requires": { + "@angular/tsc-wrapped": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.4.3.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "reflect-metadata": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz" + } + }, + "@angular/core": { + "version": "https://registry.npmjs.org/@angular/core/-/core-4.4.3.tgz", + "integrity": "sha1-5x0rB76qy6tIq39R1OIobqXXDhU=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/forms": { + "version": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.3.tgz", + "integrity": "sha1-JbQburWL8dqHJBHIUXwQ18U3PY4=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/http": { + "version": "https://registry.npmjs.org/@angular/http/-/http-4.4.3.tgz", + "integrity": "sha1-tVftJBRKrMRLE2zUd+hNL1eAiQM=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/language-service": { + "version": "https://registry.npmjs.org/@angular/language-service/-/language-service-4.4.3.tgz", + "integrity": "sha1-RScBGllJZ6OW7/PAXtFb1MhtUbc=", + "dev": true + }, + "@angular/platform-browser": { + "version": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.3.tgz", + "integrity": "sha1-I/mkW9Pcf0TZeHf7+OYDLez8ncs=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/platform-browser-dynamic": { + "version": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.3.tgz", + "integrity": "sha1-5B3dglJDJ3UxDqtZQM3Y3wYY8IQ=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/router": { + "version": "https://registry.npmjs.org/@angular/router/-/router-4.4.3.tgz", + "integrity": "sha1-JsyUd1o4YJRq6vHC6PYPTUTpCZE=", + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "@angular/tsc-wrapped": { + "version": "https://registry.npmjs.org/@angular/tsc-wrapped/-/tsc-wrapped-4.4.3.tgz", + "integrity": "sha1-LT84IQodTbA/yG3PHglYErhc0Rk=", + "dev": true, + "requires": { + "tsickle": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz" + } + }, + "@ngrx/effects": { + "version": "https://registry.npmjs.org/@ngrx/effects/-/effects-4.0.5.tgz", + "integrity": "sha1-EiR2OABiG3MF+bGLwX7gmyXIYdE=" + }, + "@ngrx/router-store": { + "version": "https://registry.npmjs.org/@ngrx/router-store/-/router-store-4.0.4.tgz", + "integrity": "sha1-q1nzWq6TRlCIOE+vAJ4hsi7dRWo=" + }, + "@ngrx/store": { + "version": "https://registry.npmjs.org/@ngrx/store/-/store-4.0.3.tgz", + "integrity": "sha1-Nqus36Gb+4UG5A3oC64GBQoeFek=" + }, + "@ngrx/store-devtools": { + "version": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-4.0.0.tgz", + "integrity": "sha1-t5wkdzIX33/Zc1rSH5y/JTPJbgQ=" + }, + "@ngtools/json-schema": { + "version": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz", + "integrity": "sha1-w6DFRNYjkqzCgTpCyKDcb1j4aSI=", + "dev": true + }, + "@ngtools/webpack": { + "version": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.7.1.tgz", + "integrity": "sha1-OD3daJhFz0L8dVl19kQPdVNfUBY=", + "dev": true, + "requires": { + "enhanced-resolve": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "magic-string": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "@schematics/angular": { + "version": "https://registry.npmjs.org/@schematics/angular/-/angular-0.0.36.tgz", + "integrity": "sha1-YMTwprB8lpWuVuq32Eq598eNZho=", + "dev": true + }, + "@types/jasmine": { + "version": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.54.tgz", + "integrity": "sha1-prXyrir7bgMHd06MfGCOA31JHGM=", + "dev": true + }, + "@types/jasminewd2": { + "version": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", + "integrity": "sha1-DSiGsMva5MDuulXjB5L1hL8ECpU=", + "dev": true, + "requires": { + "@types/jasmine": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.5.54.tgz" + } + }, + "@types/node": { + "version": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz", + "integrity": "sha1-9hjxGpRPahjZK1xHIChyij49S2Y=", + "dev": true + }, + "@types/q": { + "version": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", + "integrity": "sha1-dMt3+2BS7a/yqJhN2v2I1BnyXKw=", + "dev": true + }, + "@webcomponents/custom-elements": { + "version": "https://registry.npmjs.org/@webcomponents/custom-elements/-/custom-elements-1.0.0.tgz", + "integrity": "sha1-sXJuEgdLVWqjG5Pzb/agOkNSWcQ=" + }, + "abbrev": { + "version": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true + }, + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + } + }, + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", + "integrity": "sha1-kRy1PgNoB88Pp3jcXTcPvYZCRtc=", + "dev": true + }, + "acorn-dynamic-import": { + "version": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz" + }, + "dependencies": { + "acorn": { + "version": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adm-zip": { + "version": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "dev": true + }, + "after": { + "version": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz" + }, + "dependencies": { + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", + "integrity": "sha1-wG9Zh3jETGsWGrr+NGa4GtGBTtI=", + "dev": true, + "requires": { + "co": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "fast-deep-equal": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "json-schema-traverse": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "json-stable-stringify": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz" + } + }, + "ajv-keywords": { + "version": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", + "integrity": "sha1-opbhf3v658HOT34N5T0pyzIWLfA=", + "dev": true + }, + "align-text": { + "version": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "longest": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + } + }, + "alphanum-sort": { + "version": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-html": { + "version": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha1-VT3Lj5HjyImEXf26NMd3IbkLnXo=", + "dev": true, + "requires": { + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + } + }, + "app-root-path": { + "version": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "append-transform": { + "version": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz", + "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", + "dev": true, + "requires": { + "default-require-extensions": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz" + } + }, + "aproba": { + "version": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha1-aALmJk79GMeQobDVF/DyYnvyyUo=", + "dev": true + }, + "are-we-there-yet": { + "version": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + } + }, + "argparse": { + "version": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } + }, + "arr-diff": { + "version": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + } + }, + "arr-flatten": { + "version": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true + }, + "array-find-index": { + "version": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-slice": { + "version": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz" + } + }, + "array-uniq": { + "version": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arraybuffer.slice": { + "version": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "integrity": "sha1-SLokC0WpKA6UdImQull9IWYX/UA=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz" + } + }, + "assert": { + "version": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "https://registry.npmjs.org/util/-/util-0.10.3.tgz" + } + }, + "assert-plus": { + "version": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "async": { + "version": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "integrity": "sha1-hDGQ/WtzV6C54clW7d3V7IRitU0=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "async-each": { + "version": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "autoprefixer": { + "version": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz", + "normalize-range": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "num2fraction": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "aws-sign2": { + "version": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + }, + "dependencies": { + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "detect-indent": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "trim-right": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz" + }, + "dependencies": { + "jsesc": { + "version": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + } + } + }, + "babel-messages": { + "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" + } + }, + "babel-runtime": { + "version": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "regenerator-runtime": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz" + } + }, + "babel-template": { + "version": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "babel-traverse": { + "version": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "babel-messages": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "globals": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "invariant": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "babel-types": { + "version": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "esutils": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "to-fast-properties": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" + } + }, + "babylon": { + "version": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=", + "dev": true + }, + "backo2": { + "version": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-arraybuffer": { + "version": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha1-qRlH2h9KUW6jjltOwOw3c2deCIY=", + "dev": true + }, + "base64id": { + "version": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "better-assert": { + "version": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz" + } + }, + "big.js": { + "version": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=", + "dev": true + }, + "binary-extensions": { + "version": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true + }, + "blob": { + "version": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "blocking-proxy": { + "version": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", + "integrity": "sha1-RikF4Nz76pcPQao3Ij3anAexkSs=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" + } + }, + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", + "dev": true + }, + "bn.js": { + "version": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=", + "dev": true + }, + "body-parser": { + "version": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "raw-body": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz" + }, + "dependencies": { + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + } + } + }, + "bonjour": { + "version": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "deep-equal": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "dns-equal": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "dns-txt": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "multicast-dns": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", + "multicast-dns-service-types": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz" + } + }, + "boolbase": { + "version": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" + } + }, + "brace-expansion": { + "version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "concat-map": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + } + }, + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "preserve": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz" + } + }, + "brorand": { + "version": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", + "integrity": "sha1-yPo7G3WFu3unfFVgtgmW3extUwk=", + "dev": true, + "requires": { + "buffer-xor": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "cipher-base": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "evp_bytestokey": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "browserify-cipher": { + "version": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", + "browserify-des": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "evp_bytestokey": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz" + } + }, + "browserify-des": { + "version": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "des.js": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "browserify-rsa": { + "version": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "randombytes": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz" + } + }, + "browserify-sign": { + "version": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "browserify-rsa": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "create-hmac": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "elliptic": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "parse-asn1": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz" + } + }, + "browserify-zlib": { + "version": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", + "dev": true, + "requires": { + "pako": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" + } + }, + "browserslist": { + "version": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz", + "electron-to-chromium": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz" + } + }, + "buffer": { + "version": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "ieee754": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + }, + "buffer-indexof": { + "version": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=", + "dev": true + }, + "buffer-xor": { + "version": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "integrity": "sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=", + "dev": true + }, + "callsite": { + "version": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camel-case": { + "version": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "upper-case": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz" + } + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz" + } + }, + "caniuse-api": { + "version": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-db": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz", + "lodash.memoize": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "lodash.uniq": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" + } + }, + "caniuse-db": { + "version": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000738.tgz", + "integrity": "sha1-hICavEmjkOWowiSrk2nT+NAaogI=", + "dev": true + }, + "caseless": { + "version": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" + }, + "dependencies": { + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + } + } + }, + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "integrity": "sha1-rFvs8U+iG5nGySynp9fP1bF+dD4=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + }, + "dependencies": { + "ansi-styles": { + "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha1-wVm41b4PnlpvNG2rlPFs4CIWG4g=", + "dev": true, + "requires": { + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz" + } + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "charenc": { + "version": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "chokidar": { + "version": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "async-each": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "fsevents": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "is-binary-path": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "readdirp": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "cipher-base": { + "version": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha1-h2Dk7MJy9MNjUy+SbYdKriwTl94=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "circular-dependency-plugin": { + "version": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-3.0.0.tgz", + "integrity": "sha1-m2hpLjWw41EJmNAWS2rlARvqV2A=", + "dev": true + }, + "clap": { + "version": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha1-TzZ0WzIAhJJVf0ZBLWbVDLmbzlE=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" + }, + "dependencies": { + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "clarity-angular": { + "version": "https://registry.npmjs.org/clarity-angular/-/clarity-angular-0.10.6.tgz", + "integrity": "sha1-RaOnj0c8RjMVCCCOhEV6m5K9uDs=" + }, + "clarity-icons": { + "version": "https://registry.npmjs.org/clarity-icons/-/clarity-icons-0.10.6.tgz", + "integrity": "sha1-zECH5gSK71wRmor1B4xZqqHDQNQ=" + }, + "clarity-ui": { + "version": "https://registry.npmjs.org/clarity-ui/-/clarity-ui-0.10.6.tgz", + "integrity": "sha1-CkZn79iVryV8mXYnJIC+SBn3P4s=" + }, + "clean-css": { + "version": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "integrity": "sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wrap-ansi": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz" + } + }, + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", + "dev": true + }, + "clone-deep": { + "version": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", + "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "is-plain-object": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "shallow-clone": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz" + } + }, + "co": { + "version": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "https://registry.npmjs.org/q/-/q-1.5.0.tgz" + } + }, + "code-point-at": { + "version": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "https://registry.npmjs.org/codelyzer/-/codelyzer-3.1.2.tgz", + "integrity": "sha1-n/HwQfubXuXb60W6hm368EmDrwQ=", + "dev": true, + "requires": { + "app-root-path": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "css-selector-tokenizer": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "cssauron": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "semver-dsl": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "sprintf-js": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + } + }, + "color": { + "version": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", + "color-convert": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "color-string": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz" + } + }, + "color-convert": { + "version": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", + "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", + "dev": true, + "requires": { + "color-name": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + } + }, + "color-name": { + "version": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + } + }, + "colormin": { + "version": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "css-color-names": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz" + } + }, + "colors": { + "version": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "combined-stream": { + "version": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + } + }, + "commander": { + "version": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha1-FXFS/R56bI2YpbcVzzdt+SgARWM=", + "dev": true + }, + "common-tags": { + "version": "https://registry.npmjs.org/common-tags/-/common-tags-1.4.0.tgz", + "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", + "dev": true, + "requires": { + "babel-runtime": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz" + } + }, + "component-bind": { + "version": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "component-inherit": { + "version": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", + "integrity": "sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz" + } + }, + "compression": { + "version": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "integrity": "sha1-AwyfGY8WQ6BX13anOOki2kNzAS0=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "bytes": "https://registry.npmjs.org/bytes/-/bytes-2.5.0.tgz", + "compressible": "https://registry.npmjs.org/compressible/-/compressible-2.0.11.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "on-headers": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "vary": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + } + } + }, + "concat-map": { + "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect": { + "version": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "finalhandler": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + }, + "dependencies": { + "utils-merge": { + "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "dev": true + }, + "console-browserify": { + "version": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz" + } + }, + "console-control-strings": { + "version": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=", + "dev": true + }, + "convert-source-map": { + "version": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookie": { + "version": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.0.1.tgz", + "integrity": "sha1-lyjjg7lDFgUNDHRjlY8rhcCqggA=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "fs-extra": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "node-dir": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz" + }, + "dependencies": { + "fs-extra": { + "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz", + "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "klaw": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "loader-utils": { + "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "emojis-list": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + } + } + }, + "core-js": { + "version": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + }, + "core-object": { + "version": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "integrity": "sha1-+mJ7h1Aq3JgEXkRnjpqOw7nA0qk=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz" + } + }, + "core-util-is": { + "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha1-YXPOvVb6wELB9DkO33r2wHx8uJI=", + "dev": true, + "requires": { + "is-directory": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "require-from-string": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz" + } + }, + "create-ecdh": { + "version": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "elliptic": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz" + } + }, + "create-hash": { + "version": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "sha.js": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz" + } + }, + "create-hmac": { + "version": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "ripemd160": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "sha.js": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz" + } + }, + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + } + }, + "crypt": { + "version": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "cryptiles": { + "version": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz" + }, + "dependencies": { + "boom": { + "version": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha1-XdnabuOl8wIHdDYpDLcX0/SlTgI=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" + } + } + } + }, + "crypto-browserify": { + "version": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "integrity": "sha1-lIlF78Z1ekANbl5a9HGU0QBkJ58=", + "dev": true, + "requires": { + "browserify-cipher": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "browserify-sign": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "create-ecdh": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "create-hmac": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "diffie-hellman": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "pbkdf2": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "public-encrypt": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "randombytes": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz" + } + }, + "css-color-names": { + "version": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "integrity": "sha1-Xy7pid0y7dkHcX+VMxdlYWCZnBs=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "css-selector-tokenizer": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "cssnano": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "icss-utils": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "lodash.camelcase": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-modules-extract-imports": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "postcss-modules-local-by-default": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "postcss-modules-scope": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "postcss-modules-values": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "source-list-map": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz" + } + }, + "css-parse": { + "version": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "css-what": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "nth-check": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz" + } + }, + "css-selector-tokenizer": { + "version": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "fastparse": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "regexpu-core": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz" + } + }, + "css-what": { + "version": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssauron": { + "version": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + } + }, + "cssesc": { + "version": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "defined": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-calc": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "postcss-colormin": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "postcss-convert-values": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "postcss-discard-comments": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "postcss-discard-duplicates": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "postcss-discard-empty": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "postcss-discard-overridden": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "postcss-discard-unused": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "postcss-filter-plugins": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "postcss-merge-idents": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "postcss-merge-longhand": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "postcss-merge-rules": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "postcss-minify-font-values": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "postcss-minify-gradients": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "postcss-minify-params": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "postcss-minify-selectors": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "postcss-normalize-charset": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "postcss-normalize-url": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "postcss-ordered-values": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "postcss-reduce-idents": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "postcss-reduce-initial": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "postcss-reduce-transforms": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "postcss-svgo": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "postcss-unique-selectors": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "postcss-zindex": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz" + } + }, + "csso": { + "version": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "currently-unhandled": { + "version": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" + } + }, + "custom-event": { + "version": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "d": { + "version": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "dashdash": { + "version": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + } + }, + "date-now": { + "version": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + }, + "decamelize": { + "version": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-equal": { + "version": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "default-require-extensions": { + "version": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz", + "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", + "dev": true, + "requires": { + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + } + }, + "defined": { + "version": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "p-map": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + }, + "dependencies": { + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "delayed-stream": { + "version": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "denodeify": { + "version": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "des.js": { + "version": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz" + } + }, + "destroy": { + "version": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + } + }, + "detect-node": { + "version": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "di": { + "version": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "integrity": "sha1-qoVnpu7QPFMfyJ0/cRzQ5SWd7HU=", + "dev": true + }, + "diffie-hellman": { + "version": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "miller-rabin": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "randombytes": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz" + } + }, + "directory-encoder": { + "version": "https://registry.npmjs.org/directory-encoder/-/directory-encoder-0.7.2.tgz", + "integrity": "sha1-WbTiqk8lQi9sY7UntGL14tDdLFg=", + "dev": true, + "requires": { + "fs-extra": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", + "handlebars": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "img-stats": "https://registry.npmjs.org/img-stats/-/img-stats-0.5.2.tgz" + }, + "dependencies": { + "fs-extra": { + "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz", + "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + } + } + } + }, + "dns-equal": { + "version": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", + "integrity": "sha1-qKJr7HZGQ4lj/Ibgb4+LFtbIv3o=", + "dev": true, + "requires": { + "ip": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "dns-txt": { + "version": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz" + } + }, + "dom-converter": { + "version": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz" + }, + "dependencies": { + "utila": { + "version": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serialize": { + "version": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "ent": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "void-elements": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + } + }, + "dom-serializer": { + "version": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "entities": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz" + }, + "dependencies": { + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "domelementtype": { + "version": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "domutils": { + "version": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "ecc-jsbn": { + "version": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" + } + }, + "ee-first": { + "version": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "electron-to-chromium": { + "version": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.22.tgz", + "integrity": "sha1-QyLVLBUUBuPq73StAmdog+hBZBg=", + "dev": true + }, + "elliptic": { + "version": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "brorand": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "hash.js": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "hmac-drbg": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "minimalistic-crypto-utils": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + } + }, + "ember-cli-string-utils": { + "version": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emojis-list": { + "version": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", + "dev": true + }, + "engine.io": { + "version": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "base64id": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-parser": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "ws": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz" + }, + "dependencies": { + "accepts": { + "version": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "negotiator": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz" + } + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "component-inherit": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-parser": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "has-cors": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "parsejson": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "parseqs": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "parseuri": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "ws": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "xmlhttprequest-ssl": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "yeast": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + }, + "dependencies": { + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "arraybuffer.slice": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "base64-arraybuffer": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "blob": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "wtf-8": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz" + } + }, + "enhanced-resolve": { + "version": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "memory-fs": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "tapable": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz" + } + }, + "ent": { + "version": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz" + } + }, + "error-ex": { + "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + } + }, + "es5-ext": { + "version": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "integrity": "sha1-cUGhaDZpfbq/qq7uQUlc4p9SyTk=", + "dev": true, + "requires": { + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "es6-iterator": { + "version": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "integrity": "sha1-jjGcnwRTv1ddN0lAplWSDlnKVRI=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "es6-map": { + "version": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-set": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } + }, + "es6-set": { + "version": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "event-emitter": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + } + }, + "es6-symbol": { + "version": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "es6-weak-map": { + "version": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz", + "es6-iterator": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.1.tgz", + "es6-symbol": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz" + } + }, + "escape-html": { + "version": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escope": { + "version": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "es6-weak-map": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "esrecurse": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz" + } + }, + "esprima": { + "version": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", + "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", + "dev": true, + "requires": { + "estraverse": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "estraverse": { + "version": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "es5-ext": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.30.tgz" + } + }, + "eventemitter3": { + "version": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", + "dev": true + }, + "events": { + "version": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "https://registry.npmjs.org/original/-/original-1.0.0.tgz" + } + }, + "evp_bytestokey": { + "version": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha1-f8vbGY3HGVlDLv4ThCaE4FJaywI=", + "dev": true, + "requires": { + "md5.js": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "execa": { + "version": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "get-stream": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "is-stream": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "npm-run-path": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "p-finally": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "strip-eof": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + }, + "dependencies": { + "cross-spawn": { + "version": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "shebang-command": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + } + } + } + }, + "exit": { + "version": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz" + }, + "dependencies": { + "braces": { + "version": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz" + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz" + } + }, + "expand-range": { + "version": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" + } + }, + "exports-loader": { + "version": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "express": { + "version": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", + "integrity": "sha1-ZwI1ypWYiQpa6BcLg9tyK4Qu2Sc=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "array-flatten": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "content-disposition": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "content-type": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "cookie": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "cookie-signature": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "finalhandler": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "merge-descriptors": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "methods": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "path-to-regexp": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "proxy-addr": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "send": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", + "serve-static": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", + "setprototypeof": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "type-is": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "utils-merge": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "vary": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + }, + "dependencies": { + "array-flatten": { + "version": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.5.0.tgz", + "integrity": "sha1-jQSVTTZN7z78VbWgeT4eLIsebkk=", + "dev": true + } + } + }, + "extend": { + "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extglob": { + "version": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz", + "integrity": "sha1-kMqnkHvESfM1AF46x1MrQbAN5hI=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "schema-utils": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "webpack-sources": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz" + } + }, + "extsprintf": { + "version": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fastparse": { + "version": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz" + } + }, + "file-loader": { + "version": "https://registry.npmjs.org/file-loader/-/file-loader-0.10.1.tgz", + "integrity": "sha1-gVA0EZiR/GRB+1pkwRvJPCLd2EI=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz" + } + }, + "filename-regex": { + "version": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + } + }, + "fill-range": { + "version": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "isobject": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "randomatic": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "repeat-element": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "repeat-string": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + }, + "dependencies": { + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + } + } + } + }, + "finalhandler": { + "version": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + } + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "flatten": { + "version": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + } + }, + "forever-agent": { + "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz" + } + }, + "forwarded": { + "version": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-access": { + "version": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz" + } + }, + "fs-extra": { + "version": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", + "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "jsonfile": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "universalify": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz" + }, + "dependencies": { + "jsonfile": { + "version": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } + } + } + }, + "fs.realpath": { + "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=", + "dev": true, + "optional": true, + "requires": { + "nan": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "node-pre-gyp": "0.6.36" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "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" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.36", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", + "dev": true, + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "dev": true, + "optional": true, + "requires": { + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": 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 + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.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.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } + }, + "fstream": { + "version": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + } + }, + "function-bind": { + "version": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "gauge": { + "version": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "console-control-strings": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "has-unicode": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "wide-align": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz" + } + }, + "gaze": { + "version": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "optional": true, + "requires": { + "globule": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz" + } + }, + "get-caller-file": { + "version": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" + } + }, + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "glob-base": { + "version": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "glob-parent": { + "version": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "globals": { + "version": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=", + "dev": true + }, + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "globule": { + "version": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "optional": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + } + }, + "graceful-fs": { + "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "handle-thing": { + "version": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "https://registry.npmjs.org/handlebars/-/handlebars-1.3.0.tgz", + "integrity": "sha1-npsTCpPjiUkTItl1zz7BgYw3zjQ=", + "dev": true, + "requires": { + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true, + "optional": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.3.6.tgz", + "integrity": "sha1-+gmEdwtCi3qbKoBY9GNV0U/vIRo=", + "dev": true, + "optional": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + } + } + } + }, + "har-schema": { + "version": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", + "har-schema": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz" + } + }, + "has": { + "version": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + } + }, + "has-ansi": { + "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "has-binary": { + "version": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-unicode": { + "version": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "hash.js": { + "version": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha1-NA3tvmKQGHFRweodd3o0SJNd+EY=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz" + } + }, + "hawk": { + "version": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha1-r02RTrBl+bXOTZ0RwcshJu7MMDg=", + "dev": true, + "requires": { + "boom": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "cryptiles": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "sntp": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz" + } + }, + "he": { + "version": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "heimdalljs": { + "version": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz", + "integrity": "sha1-aqVDCO7nk7ZCz/nPlHgURfN3MKw=", + "dev": true, + "requires": { + "rsvp": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz" + } + }, + "heimdalljs-logger": { + "version": "https://registry.npmjs.org/heimdalljs-logger/-/heimdalljs-logger-0.1.9.tgz", + "integrity": "sha1-12raTkW3u294b8nAEKaOsuL68XY=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "heimdalljs": "https://registry.npmjs.org/heimdalljs/-/heimdalljs-0.2.5.tgz" + } + }, + "hmac-drbg": { + "version": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "minimalistic-crypto-utils": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz" + } + }, + "hoek": { + "version": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha1-ctnQdU9/4lyi0BrY+PmpRJqJUm0=", + "dev": true + }, + "homedir-polyfill": { + "version": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz" + } + }, + "hosted-git-info": { + "version": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha1-bWDjSzq7yDEwYsO3mO+NkBoHrzw=", + "dev": true + }, + "hpack.js": { + "version": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "obuf": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "wbuf": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz" + } + }, + "html-comment-regex": { + "version": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.5.tgz", + "integrity": "sha1-O9yUJ+Y4u+Pb3pbA65iLBE8Cc54=", + "dev": true, + "requires": { + "camel-case": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "clean-css": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.9.tgz", + "commander": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "he": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "ncname": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "param-case": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "relateurl": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.2.tgz" + } + }, + "html-webpack-plugin": { + "version": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "html-minifier": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.5.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "pretty-error": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "toposort": "https://registry.npmjs.org/toposort/-/toposort-1.0.4.tgz" + }, + "dependencies": { + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "loader-utils": { + "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "emojis-list": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + } + } + }, + "htmlparser2": { + "version": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "domhandler": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "domutils": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" + }, + "dependencies": { + "domutils": { + "version": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "setprototypeof": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + } + }, + "http-parser-js": { + "version": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz", + "integrity": "sha1-dj91xLdxoLtEZTsHBwv/bKe8VWE=", + "dev": true + }, + "http-proxy": { + "version": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "dev": true, + "requires": { + "eventemitter3": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "requires-port": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + } + }, + "http-proxy-middleware": { + "version": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "micromatch": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" + } + }, + "http-signature": { + "version": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "jsprim": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "sshpk": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz" + } + }, + "https-browserify": { + "version": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "integrity": "sha1-P5E2XKvmC3ftDruiS0VOPgnZWoI=", + "dev": true + }, + "https-proxy-agent": { + "version": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz" + } + }, + "iconv-lite": { + "version": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", + "dev": true + }, + "icss-replace-symbols": { + "version": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz" + }, + "dependencies": { + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", + "integrity": "sha1-awFVCJ0tIS971qDOzUxYwAdANTU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "ieee754": { + "version": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "image-size": { + "version": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "img-stats": { + "version": "https://registry.npmjs.org/img-stats/-/img-stats-0.5.2.tgz", + "integrity": "sha1-wgNJbELy2esuWrgjL6dWurMsnis=", + "dev": true, + "requires": { + "xmldom": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz" + } + }, + "in-publish": { + "version": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz" + } + }, + "indexes-of": { + "version": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "internal-ip": { + "version": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz" + } + }, + "interpret": { + "version": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "dev": true + }, + "invariant": { + "version": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" + } + }, + "invert-kv": { + "version": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", + "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=", + "dev": true + }, + "is-absolute-url": { + "version": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz" + } + }, + "is-buffer": { + "version": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", + "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", + "dev": true + }, + "is-builtin-module": { + "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + } + }, + "is-directory": { + "version": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz" + } + }, + "is-extendable": { + "version": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + } + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + } + }, + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + } + }, + "is-path-cwd": { + "version": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz" + } + }, + "is-path-inside": { + "version": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", + "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", + "dev": true, + "requires": { + "path-is-inside": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz" + } + }, + "is-plain-obj": { + "version": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, + "requires": { + "isobject": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + } + }, + "is-posix-bracket": { + "version": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-stream": { + "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz" + } + }, + "is-typedarray": { + "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-wsl": { + "version": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", + "integrity": "sha1-JbxXAffGgMD//5E95G42GaOm5oA=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "fileset": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "istanbul-lib-coverage": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "istanbul-lib-hook": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "istanbul-lib-instrument": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", + "istanbul-lib-report": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "istanbul-lib-source-maps": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "istanbul-reports": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + } + }, + "istanbul-instrumenter-loader": { + "version": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-2.0.0.tgz", + "integrity": "sha1-5UkpAKsLuoNe+oAkywC+mz7qJwA=", + "dev": true, + "requires": { + "convert-source-map": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "istanbul-lib-instrument": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + }, + "dependencies": { + "loader-utils": { + "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "emojis-list": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "integrity": "sha1-c7+5mIhSmUFck9OKPprfeEp3qdo=", + "dev": true + }, + "istanbul-lib-hook": { + "version": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.7.tgz", + "integrity": "sha1-3WYH8DB2V4/n1vKmMM8UO0m6zdw=", + "dev": true, + "requires": { + "append-transform": "https://registry.npmjs.org/append-transform/-/append-transform-0.4.0.tgz" + } + }, + "istanbul-lib-instrument": { + "version": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz", + "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=", + "dev": true, + "requires": { + "babel-generator": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "babel-template": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "babel-traverse": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "babel-types": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "babylon": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "istanbul-lib-coverage": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + } + }, + "istanbul-lib-report": { + "version": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", + "integrity": "sha1-8OVfVmVf+jQiIIC3oM1HYOFAX8k=", + "dev": true, + "requires": { + "istanbul-lib-coverage": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + } + }, + "istanbul-lib-source-maps": { + "version": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz", + "integrity": "sha1-pv4ay6jOCO68Y45XLilNJnAIqgw=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "istanbul-lib-coverage": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "istanbul-reports": { + "version": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.1.2.tgz", + "integrity": "sha1-D7Lj9qqZIr085F0F2KtNXo4HvU8=", + "dev": true, + "requires": { + "handlebars": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + }, + "dependencies": { + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "handlebars": { + "version": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz", + "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + } + } + } + }, + "jasmine": { + "version": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "jasmine-core": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz" + }, + "dependencies": { + "jasmine-core": { + "version": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.6.4.tgz", + "integrity": "sha1-3skmzQqfoof7bbXHVfpIfnTOysU=", + "dev": true + }, + "jasmine-marbles": { + "version": "https://registry.npmjs.org/jasmine-marbles/-/jasmine-marbles-0.2.0.tgz", + "integrity": "sha1-uJPYUIt1eQtjSHbTob6hNF1lwVY=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "jasmine-spec-reporter": { + "version": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.1.1.tgz", + "integrity": "sha1-Wm1Yq11hvqcwn7wnkjlRF1axtYg=", + "dev": true, + "requires": { + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz" + } + }, + "jasminewd2": { + "version": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz", + "integrity": "sha1-2llSddGuYx3nNqwKfH2Fyfc+9lI=", + "dev": true + }, + "js-base64": { + "version": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "integrity": "sha1-p5qSNmY3K1gPjif1GEXG9+j7+68=", + "dev": true + }, + "js-tokens": { + "version": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "esprima": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" + } + }, + "jsbn": { + "version": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "json-loader": { + "version": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha1-3KFKcCNf+C8KyaOr62DTN6NlGF0=", + "dev": true + }, + "json-schema": { + "version": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" + } + }, + "json-stringify-safe": { + "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonfile": { + "version": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } + }, + "jsonify": { + "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "json-schema": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "verror": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" + } + }, + "karma": { + "version": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha1-hcwI6eCiLXzpzKN8ShvoJPaisa4=", + "dev": true, + "requires": { + "bluebird": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "body-parser": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "combine-lists": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "connect": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "core-js": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "di": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "dom-serialize": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "expand-braces": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "http-proxy": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "isbinaryfile": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "log4js": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "qjobs": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "socket.io": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "useragent": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz" + }, + "dependencies": { + "bluebird": { + "version": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=", + "dev": true + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + } + } + }, + "karma-chrome-launcher": { + "version": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.1.1.tgz", + "integrity": "sha1-IWh5xorATY1RQOmWGboEtZr9Rs8=", + "dev": true, + "requires": { + "fs-access": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + } + }, + "karma-cli": { + "version": "https://registry.npmjs.org/karma-cli/-/karma-cli-1.0.1.tgz", + "integrity": "sha1-rmw8WKMTodALRRZMRVubhs4X+WA=", + "dev": true, + "requires": { + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-1.3.0.tgz", + "integrity": "sha1-0ULNnFVzHJ42Pvc3To7xoxvr+ts=", + "dev": true, + "requires": { + "istanbul-api": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.1.14.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + } + }, + "karma-jasmine": { + "version": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz", + "integrity": "sha1-IuTAa/mhguUpTR9wXjczgRuBCs8=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true, + "requires": { + "karma-jasmine": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.0.tgz" + } + }, + "karma-junit-reporter": { + "version": "https://registry.npmjs.org/karma-junit-reporter/-/karma-junit-reporter-1.2.0.tgz", + "integrity": "sha1-T5xAzt+xo5X4rvh2q/lhiZF8Y5Y=", + "requires": { + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz" + }, + "dependencies": { + "xmlbuilder": { + "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=" + } + } + }, + "karma-source-map-support": { + "version": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", + "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", + "dev": true, + "requires": { + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + }, + "klaw": { + "version": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } + }, + "lazy-cache": { + "version": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + }, + "lcid": { + "version": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz" + } + }, + "less": { + "version": "https://registry.npmjs.org/less/-/less-2.7.2.tgz", + "integrity": "sha1-No1sxz4fsDmBGDKAkYdDxdz5s98=", + "dev": true, + "requires": { + "errno": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "image-size": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "promise": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "less-loader": { + "version": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.5.tgz", + "integrity": "sha1-rhVadAbKxqzSk9eFWH/P8PR4xN0=", + "dev": true, + "requires": { + "clone": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + }, + "dependencies": { + "clone": { + "version": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + } + } + }, + "license-webpack-plugin": { + "version": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.0.1.tgz", + "integrity": "sha1-q+s6sWipkw8v1XMRlR3AlKrzPkU=", + "dev": true, + "requires": { + "ejs": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz" + } + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz" + } + }, + "loader-runner": { + "version": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "emojis-list": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz" + } + }, + "locate-path": { + "version": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "path-exists": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz" + }, + "dependencies": { + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash.assign": { + "version": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.camelcase": { + "version": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.memoize": { + "version": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.uniq": { + "version": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log4js": { + "version": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz" + }, + "dependencies": { + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "loglevel": { + "version": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.0.tgz", + "integrity": "sha1-OGOYSiwya5hvu5ZfN4dYptyKQyQ=", + "dev": true + }, + "longest": { + "version": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" + } + }, + "loud-rejection": { + "version": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "signal-exit": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz" + } + }, + "lower-case": { + "version": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha1-Yi4y6CSItJJ5EUpPns9F581rulU=", + "dev": true, + "requires": { + "pseudomap": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "yallist": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + } + }, + "macaddress": { + "version": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "magic-string": { + "version": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", + "integrity": "sha1-MQObTkA2Y5VhjB1s+Bk8U5F0df8=", + "dev": true, + "requires": { + "vlq": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz" + } + }, + "make-error": { + "version": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "integrity": "sha1-Uq06M5zPEM5itAQLcI/nByRLi5Y=", + "dev": true + }, + "map-obj": { + "version": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "math-expression-evaluator": { + "version": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5": { + "version": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "crypt": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + }, + "md5.js": { + "version": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + }, + "dependencies": { + "hash-base": { + "version": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + } + } + }, + "media-typer": { + "version": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz" + } + }, + "memory-fs": { + "version": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + } + }, + "meow": { + "version": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "loud-rejection": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "map-obj": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "redent": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "trim-newlines": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz" + } + }, + "merge-descriptors": { + "version": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "array-unique": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "braces": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "expand-brackets": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "extglob": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "filename-regex": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "normalize-path": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "object.omit": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "parse-glob": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "regex-cache": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "miller-rabin": { + "version": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.0.tgz", + "integrity": "sha1-SmL7HUKTPAVYOYL0xxb2+55sbT0=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "brorand": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz" + } + }, + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha1-Eh+evEnjdm8xGnbh+hyAA8SwOqY=", + "dev": true + }, + "mime-db": { + "version": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz" + } + }, + "mimic-fn": { + "version": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", + "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", + "dev": true + }, + "minimalistic-assert": { + "version": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "dev": true, + "requires": { + "brace-expansion": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mixin-object": { + "version": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + }, + "dependencies": { + "for-in": { + "version": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.1.1.tgz", + "integrity": "sha1-bn3oalcIcqsXBYrepxYLvsqBTd4=", + "dev": true, + "requires": { + "dns-packet": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.2.2.tgz", + "thunky": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz" + } + }, + "multicast-dns-service-types": { + "version": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "dev": true, + "optional": true + }, + "ncname": { + "version": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz" + } + }, + "negotiator": { + "version": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "no-case": { + "version": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=", + "dev": true, + "requires": { + "lower-case": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz" + } + }, + "node-dir": { + "version": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", + "integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=", + "dev": true, + "requires": { + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + } + }, + "node-forge": { + "version": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz", + "integrity": "sha1-RjgRh59XPUUVWtap9D3ClujoXrw=", + "dev": true + }, + "node-gyp": { + "version": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "optional": true, + "requires": { + "fstream": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nopt": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "npmlog": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "tar": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "which": "https://registry.npmjs.org/which/-/which-1.3.0.tgz" + }, + "dependencies": { + "nopt": { + "version": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + } + } + }, + "node-libs-browser": { + "version": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "integrity": "sha1-o6WeyXAkmFtG6Vg3lkb5bEthZkY=", + "dev": true, + "requires": { + "assert": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "browserify-zlib": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz", + "buffer": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "console-browserify": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "constants-browserify": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "crypto-browserify": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.11.1.tgz", + "domain-browser": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "events": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "https-browserify": "https://registry.npmjs.org/https-browserify/-/https-browserify-0.0.1.tgz", + "os-browserify": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "path-browserify": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "process": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "querystring-es3": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "stream-browserify": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "stream-http": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "timers-browserify": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "tty-browserify": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "url": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "util": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "vm-browserify": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz" + }, + "dependencies": { + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "node-modules-path": { + "version": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", + "dev": true + }, + "node-sass": { + "version": "https://registry.npmjs.org/node-sass/-/node-sass-4.5.3.tgz", + "integrity": "sha1-0JydEXlkEjnRuX/8YjH9zsU+FWg=", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "cross-spawn": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "gaze": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "in-publish": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "lodash.assign": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "lodash.clonedeep": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "lodash.mergewith": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "meow": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "nan": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", + "node-gyp": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "npmlog": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", + "sass-graph": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "stdout-stream": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz" + }, + "dependencies": { + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true, + "optional": true + } + } + }, + "nopt": { + "version": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "osenv": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz" + } + }, + "normalize-package-data": { + "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", + "dev": true, + "requires": { + "hosted-git-info": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "is-builtin-module": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "validate-npm-package-license": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz" + } + }, + "normalize-path": { + "version": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + } + }, + "normalize-range": { + "version": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "prepend-http": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "query-string": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "sort-keys": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz" + } + }, + "npm-run-path": { + "version": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + } + }, + "npmlog": { + "version": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", + "dev": true, + "requires": { + "are-we-there-yet": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "console-control-strings": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "gauge": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "set-blocking": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + } + }, + "nth-check": { + "version": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + } + }, + "null-check": { + "version": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object.omit": { + "version": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + }, + "dependencies": { + "for-own": { + "version": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + } + } + } + }, + "obuf": { + "version": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "dev": true + }, + "on-finished": { + "version": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + } + }, + "on-headers": { + "version": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + } + }, + "opn": { + "version": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha1-cs4jBqF9vqWP8QQYUzUrSo/HdRk=", + "dev": true, + "requires": { + "is-wsl": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz" + } + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", + "dev": true, + "requires": { + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + }, + "options": { + "version": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz" + }, + "dependencies": { + "url-parse": { + "version": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "requires-port": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + } + } + } + }, + "os-browserify": { + "version": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.2.1.tgz", + "integrity": "sha1-Y/xMzuXS13Y9Jrv4YBB45sLgBE8=", + "dev": true + }, + "os-homedir": { + "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" + } + }, + "os-tmpdir": { + "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "p-finally": { + "version": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz" + } + }, + "p-map": { + "version": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=", + "dev": true + }, + "pako": { + "version": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=", + "dev": true + }, + "param-case": { + "version": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz" + } + }, + "parse-asn1": { + "version": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.1.tgz", + "browserify-aes": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.0.8.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "evp_bytestokey": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "pbkdf2": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz" + } + }, + "parse-glob": { + "version": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "is-dotfile": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "is-glob": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz" + }, + "dependencies": { + "is-extglob": { + "version": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz" + } + } + } + }, + "parse-json": { + "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz" + } + }, + "parse-passwd": { + "version": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parsejson": { + "version": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseqs": { + "version": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseuri": { + "version": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz" + } + }, + "parseurl": { + "version": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "path-browserify": { + "version": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-exists": { + "version": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "path-is-absolute": { + "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "pbkdf2": { + "version": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha1-o14TxkeZsGzhUyD0WcIw5o5zut4=", + "dev": true, + "requires": { + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "create-hmac": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "ripemd160": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "sha.js": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz" + } + }, + "performance-now": { + "version": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" + } + }, + "portfinder": { + "version": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "integrity": "sha1-z09Ze4ZNZcikkrLqvp1wbIecOIs=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz" + }, + "dependencies": { + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + }, + "dependencies": { + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + } + } + }, + "postcss-calc": { + "version": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-message-helpers": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "reduce-css-calc": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz" + } + }, + "postcss-colormin": { + "version": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-convert-values": { + "version": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-discard-comments": { + "version": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-discard-duplicates": { + "version": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-discard-empty": { + "version": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-discard-overridden": { + "version": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-discard-unused": { + "version": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-filter-plugins": { + "version": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "uniqid": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz" + } + }, + "postcss-load-config": { + "version": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss-load-options": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "postcss-load-plugins": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz" + } + }, + "postcss-load-options": { + "version": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "postcss-load-plugins": { + "version": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "postcss-loader": { + "version": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", + "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-load-config": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz" + } + }, + "postcss-merge-idents": { + "version": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-merge-longhand": { + "version": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-merge-rules": { + "version": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "caniuse-api": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-selector-parser": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "vendors": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz" + } + }, + "postcss-message-helpers": { + "version": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-minify-gradients": { + "version": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-minify-params": { + "version": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-minify-selectors": { + "version": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-selector-parser": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz" + } + }, + "postcss-modules-extract-imports": { + "version": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz" + }, + "dependencies": { + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", + "integrity": "sha1-awFVCJ0tIS971qDOzUxYwAdANTU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz" + }, + "dependencies": { + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", + "integrity": "sha1-awFVCJ0tIS971qDOzUxYwAdANTU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "postcss-modules-scope": { + "version": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz" + }, + "dependencies": { + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", + "integrity": "sha1-awFVCJ0tIS971qDOzUxYwAdANTU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "postcss-modules-values": { + "version": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz" + }, + "dependencies": { + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "https://registry.npmjs.org/postcss/-/postcss-6.0.12.tgz", + "integrity": "sha1-awFVCJ0tIS971qDOzUxYwAdANTU=", + "dev": true, + "requires": { + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + } + } + }, + "postcss-normalize-charset": { + "version": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-normalize-url": { + "version": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "normalize-url": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-ordered-values": { + "version": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-reduce-idents": { + "version": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-reduce-initial": { + "version": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-reduce-transforms": { + "version": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz" + } + }, + "postcss-selector-parser": { + "version": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "indexes-of": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "uniq": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" + } + }, + "postcss-svgo": { + "version": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "postcss-value-parser": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "svgo": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz" + } + }, + "postcss-unique-selectors": { + "version": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "postcss-url": { + "version": "https://registry.npmjs.org/postcss-url/-/postcss-url-5.1.2.tgz", + "integrity": "sha1-mLMWW+jVkkccsMqt3iwNH4MvEz4=", + "dev": true, + "requires": { + "directory-encoder": "https://registry.npmjs.org/directory-encoder/-/directory-encoder-0.7.2.tgz", + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz" + } + }, + "postcss-value-parser": { + "version": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "postcss": "https://registry.npmjs.org/postcss/-/postcss-5.2.17.tgz", + "uniqs": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz" + } + }, + "prepend-http": { + "version": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "utila": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz" + } + }, + "process": { + "version": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise": { + "version": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", + "dev": true, + "optional": true, + "requires": { + "asap": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" + } + }, + "protractor": { + "version": "https://registry.npmjs.org/protractor/-/protractor-5.1.2.tgz", + "integrity": "sha1-myIXQXCaTGLVzVPGqt1UpxE36V8=", + "dev": true, + "requires": { + "@types/node": "https://registry.npmjs.org/@types/node/-/node-6.0.88.tgz", + "@types/q": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "@types/selenium-webdriver": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", + "blocking-proxy": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-0.0.5.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "jasmine": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "jasminewd2": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.1.0.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "saucelabs": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "selenium-webdriver": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz", + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "webdriver-js-extender": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "webdriver-manager": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz" + }, + "dependencies": { + "chalk": { + "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "escape-string-regexp": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "has-ansi": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz" + } + }, + "del": { + "version": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "is-path-cwd": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "is-path-in-cwd": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz" + } + }, + "globby": { + "version": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", + "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", + "dev": true, + "requires": { + "adm-zip": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "del": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "ini": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "q": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "request": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "xml2js": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + } + } + }, + "proxy-addr": { + "version": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", + "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", + "dev": true, + "requires": { + "forwarded": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "ipaddr.js": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz" + } + }, + "prr": { + "version": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "browserify-rsa": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "create-hash": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "parse-asn1": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "randombytes": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz" + } + }, + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "https://registry.npmjs.org/q/-/q-1.5.0.tgz", + "integrity": "sha1-3QG6ydBtMObyGa7LglPunr3DCPE=", + "dev": true + }, + "qjobs": { + "version": "https://registry.npmjs.org/qjobs/-/qjobs-1.1.5.tgz", + "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=", + "dev": true + }, + "qs": { + "version": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha1-NJzfbu+J7EXBLX1es/wMhwNDptg=", + "dev": true + }, + "query-string": { + "version": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "strict-uri-encode": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" + } + }, + "querystring": { + "version": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha1-x6vpzIuHwLqodrGf3oP9RkeX44w=", + "dev": true, + "requires": { + "is-number": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + }, + "dependencies": { + "is-number": { + "version": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + } + } + }, + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + } + } + }, + "randombytes": { + "version": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha1-3ACaJGuNCaF3tLegrne8Vw9LG3k=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "range-parser": { + "version": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "iconv-lite": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "unpipe": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + }, + "dependencies": { + "bytes": { + "version": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + } + } + }, + "raw-loader": { + "version": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz" + } + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz" + } + }, + "readable-stream": { + "version": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", + "dev": true, + "requires": { + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "process-nextick-args": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "string_decoder": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "util-deprecate": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + } + }, + "readdirp": { + "version": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "set-immediate-shim": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz" + } + }, + "redent": { + "version": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "strip-indent": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz" + } + }, + "reduce-css-calc": { + "version": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "math-expression-evaluator": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "reduce-function-call": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" + }, + "dependencies": { + "balanced-match": { + "version": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reflect-metadata": { + "version": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", + "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=", + "dev": true + }, + "regenerate": { + "version": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha1-DDNtOYBVPXVcObWGrjsgqknIK38=", + "dev": true + }, + "regenerator-runtime": { + "version": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha1-flT+W1zNXWYk6mJVw0c74JC4AuE=", + "dev": true + }, + "regex-cache": { + "version": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=", + "dev": true, + "requires": { + "is-equal-shallow": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz" + } + }, + "regexpu-core": { + "version": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "regjsgen": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "regjsparser": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz" + } + }, + "regjsgen": { + "version": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + } + }, + "relateurl": { + "version": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "dom-converter": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "htmlparser2": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "utila": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz" + }, + "dependencies": { + "utila": { + "version": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz" + } + }, + "request": { + "version": "https://registry.npmjs.org/request/-/request-2.82.0.tgz", + "integrity": "sha1-K6ipLNesRWYOorEKU65nzSR1Fuo=", + "dev": true, + "requires": { + "aws-sign2": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "aws4": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "caseless": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "combined-stream": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "extend": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "forever-agent": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "form-data": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "har-validator": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "hawk": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "http-signature": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "is-typedarray": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "oauth-sign": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "performance-now": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "qs": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "stringstream": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "tough-cookie": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "tunnel-agent": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz" + } + }, + "require-directory": { + "version": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "integrity": "sha1-p1vgHFPaJdk0qY69DkxKcxL5KoY=", + "dev": true, + "requires": { + "path-parse": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz" + } + }, + "right-align": { + "version": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz" + } + }, + "rimraf": { + "version": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha1-LtgVDSShbqhlHm1u8PR8QVjOejY=", + "dev": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz" + } + }, + "ripemd160": { + "version": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "rsvp": { + "version": "https://registry.npmjs.org/rsvp/-/rsvp-3.2.1.tgz", + "integrity": "sha1-B8tKXfJa3Z6Cbrxn3Mn9idsn2Eo=", + "dev": true + }, + "rxjs": { + "version": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", + "integrity": "sha1-B1jN3uYDPWjg/VNnbw81ls49SD8=", + "requires": { + "symbol-observable": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz" + } + }, + "safe-buffer": { + "version": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", + "dev": true + }, + "sass-graph": { + "version": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "scss-tokenizer": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz" + } + }, + "sass-loader": { + "version": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", + "integrity": "sha1-6dXmwfFV+qMqSybXqbcQfCJeQPk=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "clone-deep": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "lodash.tail": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz" + }, + "dependencies": { + "pify": { + "version": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "saucelabs": { + "version": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "dev": true, + "requires": { + "https-proxy-agent": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz" + } + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=", + "dev": true + }, + "schema-utils": { + "version": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz" + } + }, + "scss-tokenizer": { + "version": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz" + }, + "dependencies": { + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "select-hose": { + "version": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.0.1.tgz", + "integrity": "sha1-ot6l2kqX9mcuiefKcnbO+jZRR6c=", + "dev": true, + "requires": { + "adm-zip": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "xml2js": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz" + }, + "dependencies": { + "tmp": { + "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + } + } + }, + "selfsigned": { + "version": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "integrity": "sha1-v4y3uDJWxFUeMTR8YxF3jbme7FI=", + "dev": true, + "requires": { + "node-forge": "https://registry.npmjs.org/node-forge/-/node-forge-0.6.33.tgz" + } + }, + "semver": { + "version": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=", + "dev": true + }, + "semver-dsl": { + "version": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz" + } + }, + "send": { + "version": "https://registry.npmjs.org/send/-/send-0.15.6.tgz", + "integrity": "sha1-IPI6nJJbdiq4JwX+L52yUqzkfjQ=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "depd": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "destroy": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "etag": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "fresh": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "on-finished": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "statuses": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz" + }, + "dependencies": { + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "dev": true + } + } + }, + "serve-index": { + "version": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "dev": true, + "requires": { + "accepts": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "batch": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "http-errors": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + } + } + } + }, + "serve-static": { + "version": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.6.tgz", + "integrity": "sha1-uXN3P2NEmTTaVOW+ul4x2fQhFXc=", + "dev": true, + "requires": { + "encodeurl": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", + "escape-html": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "parseurl": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "send": "https://registry.npmjs.org/send/-/send-0.15.6.tgz" + } + }, + "set-blocking": { + "version": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + }, + "sha.js": { + "version": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha1-mPZIgEdLdPSji42p08Dy0QRjPn0=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "shallow-clone": { + "version": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "kind-of": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "lazy-cache": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "mixin-object": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz" + }, + "dependencies": { + "kind-of": { + "version": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz" + } + } + } + }, + "shebang-command": { + "version": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + } + }, + "shebang-regex": { + "version": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + } + }, + "sntp": { + "version": "https://registry.npmjs.org/sntp/-/sntp-2.0.2.tgz", + "integrity": "sha1-UGQRDwr4X3z9t9a2ekACjOUrSys=", + "dev": true, + "requires": { + "hoek": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz" + } + }, + "socket.io": { + "version": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "socket.io-adapter": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "socket.io-client": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "component-bind": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "engine.io-client": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "has-binary": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "object-component": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "parseuri": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "socket.io-parser": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "to-array": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + }, + "dependencies": { + "component-emitter": { + "version": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" + } + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "isarray": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz" + }, + "dependencies": { + "debug": { + "version": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz" + } + }, + "isarray": { + "version": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "dev": true, + "requires": { + "faye-websocket": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "uuid": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz" + }, + "dependencies": { + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "sockjs-client": { + "version": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "eventsource": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "faye-websocket": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "json3": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "url-parse": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz" + }, + "dependencies": { + "faye-websocket": { + "version": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz" + } + } + } + }, + "sort-keys": { + "version": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz" + } + }, + "source-list-map": { + "version": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha1-qqR0A/eyRakvvJfqCPJQ1gh+0IU=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-loader": { + "version": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.1.tgz", + "integrity": "sha1-SBJr6SML1H+tBeRqjDwuPS2r5Qc=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + }, + "dependencies": { + "async": { + "version": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "loader-utils": { + "version": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "emojis-list": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + } + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "source-map-support": { + "version": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "spdx-correct": { + "version": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz" + } + }, + "spdx-expression-parse": { + "version": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "spdy": { + "version": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "handle-thing": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "http-deceiver": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "select-hose": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "spdy-transport": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz" + } + }, + "spdy-transport": { + "version": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "detect-node": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "hpack.js": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "obuf": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "wbuf": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz" + } + }, + "sprintf-js": { + "version": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "bcrypt-pbkdf": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "dashdash": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "ecc-jsbn": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "getpass": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "jsbn": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "tweetnacl": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" + } + }, + "statuses": { + "version": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + }, + "stdout-stream": { + "version": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + } + }, + "stream-browserify": { + "version": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz" + } + }, + "stream-http": { + "version": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha1-QKBQ7I3DtTsz2ZCUFcAsC/Gr+60=", + "dev": true, + "requires": { + "builtin-status-codes": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "readable-stream": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "to-arraybuffer": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "xtend": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" + } + }, + "strict-uri-encode": { + "version": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "string_decoder": { + "version": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "stringstream": { + "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz" + } + }, + "strip-eof": { + "version": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz" + } + }, + "strip-json-comments": { + "version": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "https://registry.npmjs.org/style-loader/-/style-loader-0.13.2.tgz", + "integrity": "sha1-dFMzhM9pjHEEx5URULSXF63C87s=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz" + } + }, + "stylus": { + "version": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "debug": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + }, + "dependencies": { + "glob": { + "version": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "inflight": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "minimatch": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "once": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + } + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "source-map": { + "version": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + } + } + } + }, + "stylus-loader": { + "version": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.1.tgz", + "integrity": "sha1-d/SzT9Aw0lsmF7z1UT21sHMMQIk=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "lodash.clonedeep": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "when": "https://registry.npmjs.org/when/-/when-3.6.4.tgz" + } + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" + } + }, + "svgo": { + "version": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "csso": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "js-yaml": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "sax": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "whet.extend": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz" + } + }, + "symbol-observable": { + "version": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", + "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" + }, + "tapable": { + "version": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "fstream": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + } + }, + "through": { + "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "thunky": { + "version": "https://registry.npmjs.org/thunky/-/thunky-0.1.0.tgz", + "integrity": "sha1-vzAUaCTituZ7Dy16Ssi+smkIaE4=", + "dev": true + }, + "time-stamp": { + "version": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha1-lspT9LeUpefA4b18yIo3Ipj6AeY=", + "dev": true, + "requires": { + "setimmediate": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + } + }, + "tmp": { + "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + } + }, + "to-array": { + "version": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "toposort": { + "version": "https://registry.npmjs.org/toposort/-/toposort-1.0.4.tgz", + "integrity": "sha1-qGEHaQy+6MrkOzSdL2AWJQCSTfw=", + "dev": true + }, + "tough-cookie": { + "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + } + }, + "trim-newlines": { + "version": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "ts-node": { + "version": "https://registry.npmjs.org/ts-node/-/ts-node-3.2.2.tgz", + "integrity": "sha1-u9KOOK9Kqj6WB2xGbhsiAZfBo84=", + "dev": true, + "requires": { + "arrify": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "chalk": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", + "diff": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "make-error": "https://registry.npmjs.org/make-error/-/make-error-1.3.0.tgz", + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "tsconfig": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "v8flags": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", + "yn": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz" + } + }, + "tsconfig": { + "version": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "requires": { + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "strip-json-comments": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + }, + "dependencies": { + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "tsickle": { + "version": "https://registry.npmjs.org/tsickle/-/tsickle-0.21.6.tgz", + "integrity": "sha1-U7Abl5xcE/2xOvs/uVgXflmRWI0=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "source-map-support": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz" + } + }, + "tslib": { + "version": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", + "integrity": "sha1-vIAEFkaRkjp5/oN4u+s9ogF1OOw=" + }, + "tslint": { + "version": "https://registry.npmjs.org/tslint/-/tslint-5.3.2.tgz", + "integrity": "sha1-5WRZ+wlacwfxA7hAUhdPXju+9u0=", + "dev": true, + "requires": { + "babel-code-frame": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "colors": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "diff": "https://registry.npmjs.org/diff/-/diff-3.3.1.tgz", + "glob": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "optimist": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "resolve": "https://registry.npmjs.org/resolve/-/resolve-1.4.0.tgz", + "semver": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz", + "tsutils": "https://registry.npmjs.org/tsutils/-/tsutils-2.9.0.tgz" + }, + "dependencies": { + "minimist": { + "version": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + }, + "optimist": { + "version": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz" + } + } + } + }, + "tsutils": { + "version": "https://registry.npmjs.org/tsutils/-/tsutils-2.9.0.tgz", + "integrity": "sha1-fhU3tVa6tocvp+ZIXf9FsHbVUz0=", + "dev": true, + "requires": { + "tslib": "https://registry.npmjs.org/tslib/-/tslib-1.7.1.tgz" + } + }, + "tty-browserify": { + "version": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz" + } + }, + "tweetnacl": { + "version": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-is": { + "version": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", + "dev": true, + "requires": { + "media-typer": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "mime-types": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz" + } + }, + "typescript": { + "version": "https://registry.npmjs.org/typescript/-/typescript-2.3.4.tgz", + "integrity": "sha1-PTgyGCgjHkNPKHUUlZw3qCtin0I=", + "dev": true + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.1.2.tgz", + "integrity": "sha1-tQvPFaX9np7UCvvN7ztZ1okbKR8=", + "dev": true, + "requires": { + "commander": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "uglify-to-browserify": { + "version": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "webpack-sources": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + } + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + } + } + } + }, + "ultron": { + "version": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "uniq": { + "version": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz" + } + }, + "uniqs": { + "version": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "universalify": { + "version": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unpipe": { + "version": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "upper-case": { + "version": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "url": { + "version": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "querystring": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + }, + "dependencies": { + "punycode": { + "version": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha1-zI/qgse5Bud3cBklCGnlaemVwpU=", + "dev": true, + "requires": { + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz" + }, + "dependencies": { + "mime": { + "version": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + } + } + }, + "url-parse": { + "version": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", + "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "dev": true, + "requires": { + "querystringify": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "requires-port": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + }, + "dependencies": { + "querystringify": { + "version": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "useragent": { + "version": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", + "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "dev": true, + "requires": { + "lru-cache": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz" + }, + "dependencies": { + "lru-cache": { + "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", + "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", + "dev": true + } + } + }, + "util": { + "version": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz" + }, + "dependencies": { + "inherits": { + "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utila": { + "version": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "dev": true + }, + "uuid": { + "version": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", + "dev": true + }, + "v8flags": { + "version": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.1.tgz", + "integrity": "sha1-3Oj8N5wX2fLJ6e142JzgAFKxt2s=", + "dev": true, + "requires": { + "homedir-polyfill": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz" + } + }, + "validate-npm-package-license": { + "version": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "spdx-expression-parse": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz" + } + }, + "vary": { + "version": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "core-util-is": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "extsprintf": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" + } + }, + "vlq": { + "version": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz", + "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE=", + "dev": true + }, + "vm-browserify": { + "version": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + } + }, + "void-elements": { + "version": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" + } + }, + "wbuf": { + "version": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz" + } + }, + "webdriver-js-extender": { + "version": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.42.tgz", + "selenium-webdriver": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz" + }, + "dependencies": { + "adm-zip": { + "version": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", + "dev": true + }, + "sax": { + "version": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", + "dev": true + }, + "selenium-webdriver": { + "version": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", + "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", + "dev": true, + "requires": { + "adm-zip": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "rimraf": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "tmp": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "ws": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "xml2js": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz" + } + }, + "tmp": { + "version": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", + "dev": true + }, + "xml2js": { + "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", + "dev": true, + "requires": { + "sax": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz" + } + } + } + }, + "webpack": { + "version": "https://registry.npmjs.org/webpack/-/webpack-3.5.6.tgz", + "integrity": "sha1-pJL7bB7X9XOBb5DgDI+7WiDMXDY=", + "dev": true, + "requires": { + "acorn": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", + "acorn-dynamic-import": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "ajv": "https://registry.npmjs.org/ajv/-/ajv-5.2.3.tgz", + "ajv-keywords": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.0.tgz", + "async": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", + "enhanced-resolve": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "escope": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "interpret": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "json-loader": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "json5": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "loader-runner": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "loader-utils": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "memory-fs": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "node-libs-browser": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.0.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "tapable": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "uglifyjs-webpack-plugin": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "watchpack": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "webpack-sources": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz" + }, + "dependencies": { + "ansi-regex": { + "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "find-up": { + "version": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz" + } + }, + "has-flag": { + "version": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "load-json-file": { + "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "parse-json": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "strip-bom": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + } + }, + "os-locale": { + "version": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, + "requires": { + "execa": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "lcid": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "mem": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz" + } + }, + "path-type": { + "version": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" + } + }, + "read-pkg": { + "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "normalize-package-data": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "path-type": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz" + } + }, + "read-pkg-up": { + "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "read-pkg": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz" + } + }, + "string-width": { + "version": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", + "dev": true, + "requires": { + "is-fullwidth-code-point": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz" + } + }, + "strip-ansi": { + "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz" + } + }, + "strip-bom": { + "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "supports-color": { + "version": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "dev": true, + "requires": { + "has-flag": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz" + } + }, + "which-module": { + "version": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "get-caller-file": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "require-directory": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "require-main-filename": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "set-blocking": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "which-module": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "yargs-parser": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz" + } + }, + "yargs-parser": { + "version": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz" + } + } + } + }, + "webpack-concat-plugin": { + "version": "https://registry.npmjs.org/webpack-concat-plugin/-/webpack-concat-plugin-1.4.0.tgz", + "integrity": "sha1-pus/AILQPHnY7i8VGMf0jkTuEsU=", + "dev": true, + "requires": { + "md5": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "uglify-js": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "right-align": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "wordwrap": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz" + } + }, + "uglify-js": { + "version": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "uglify-to-browserify": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz" + } + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "window-size": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz" + } + } + } + }, + "webpack-dev-middleware": { + "version": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "integrity": "sha1-007++y7dp+HTtdvgcolRMhllFwk=", + "dev": true, + "requires": { + "memory-fs": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "mime": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "path-is-absolute": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "range-parser": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "time-stamp": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz" + } + }, + "webpack-dev-server": { + "version": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.7.1.tgz", + "integrity": "sha1-IVgPWgjNBlxxFEz29hw0W8pZqLg=", + "dev": true, + "requires": { + "ansi-html": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "bonjour": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "chokidar": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "compression": "https://registry.npmjs.org/compression/-/compression-1.7.0.tgz", + "connect-history-api-fallback": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", + "del": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "express": "https://registry.npmjs.org/express/-/express-4.15.5.tgz", + "html-entities": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "http-proxy-middleware": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "internal-ip": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "ip": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "loglevel": "https://registry.npmjs.org/loglevel/-/loglevel-1.5.0.tgz", + "opn": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "portfinder": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "selfsigned": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.1.tgz", + "serve-index": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", + "sockjs": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", + "sockjs-client": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "spdy": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "supports-color": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "webpack-dev-middleware": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz", + "yargs": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "opn": { + "version": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "dev": true, + "requires": { + "object-assign": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "pinkie-promise": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz" + } + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "get-caller-file": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "require-directory": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "require-main-filename": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "set-blocking": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "which-module": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "yargs-parser": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz" + } + }, + "yargs-parser": { + "version": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + } + } + } + }, + "webpack-merge": { + "version": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.0.tgz", + "integrity": "sha1-atciI7PguDflMeRZfBmfkJNhUR4=", + "dev": true, + "requires": { + "lodash": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz" + } + }, + "webpack-sources": { + "version": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", + "integrity": "sha1-xzVkNqTRMSO+LiQmoF0drZy+Zc8=", + "dev": true, + "requires": { + "source-list-map": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + } + }, + "websocket-driver": { + "version": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.8.tgz", + "websocket-extensions": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz" + } + }, + "websocket-extensions": { + "version": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.2.tgz", + "integrity": "sha1-Dhh4HeYpoYMIzhSBZQ9n/6JpOl0=", + "dev": true + }, + "when": { + "version": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "whet.extend": { + "version": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, + "requires": { + "isexe": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + } + }, + "which-module": { + "version": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + } + }, + "window-size": { + "version": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "strip-ansi": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + } + }, + "wrappy": { + "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "ultron": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz" + } + }, + "wtf-8": { + "version": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xml-char-classes": { + "version": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xml2js": { + "version": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "dev": true, + "requires": { + "sax": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "xmlbuilder": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz" + } + }, + "xmlbuilder": { + "version": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz", + "integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8=", + "dev": true + }, + "xmldom": { + "version": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "cliui": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "decamelize": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "get-caller-file": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "os-locale": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "read-pkg-up": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "require-directory": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "require-main-filename": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "set-blocking": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "string-width": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "which-module": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "y18n": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "yargs-parser": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yargs-parser": { + "version": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz" + }, + "dependencies": { + "camelcase": { + "version": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yeast": { + "version": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.17.tgz", + "integrity": "sha1-TF5RhahX2o2nk9rzkZNxxaNrKgs=" + } + } +} diff --git a/package.json b/package.json index 6697662..3214de9 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ }, "private": true, "dependencies": { + "@agm/core": "^1.0.0-beta.2", "@angular/animations": "^4.2.4", "@angular/common": "^4.2.4", "@angular/compiler": "^4.2.4", diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 80af809..31cffb5 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -14,6 +14,7 @@ import {RemoveListingPageComponent} from './properties/remove-listing-page/remov import {AuthGuard} from './auth/auth.guard'; import {VisitorGuard} from './auth/visitor.guard'; import {PropertyListPageComponent} from './properties/property-list-page/property-list-page.component'; +import {PropertyPageComponent} from './properties/property-page/property-page.component'; const routes: Routes = [ {path: '', pathMatch: 'full', redirectTo: 'welcome'}, @@ -28,7 +29,8 @@ const routes: Routes = [ {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, - {path: 'properties', component: PropertyListPageComponent} + {path: 'properties', component: PropertyListPageComponent}, + {path: 'properties/:id', component: PropertyPageComponent} ]; @NgModule({ diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index eb54628..eb79ff8 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -18,6 +18,8 @@ import {PropertiesSortComponent} from './properties-sort/properties-sort.compone import {PropertiesComponent} from './properties/properties.component'; import {PropertiesQueryEffects} from './properties-query.effects'; import {PropertyOptionsEffects} from './property-options-get.effects'; +import {PropertyPageComponent} from './property-page/property-page.component'; +import {AgmCoreModule} from '@agm/core'; @NgModule({ imports: [ @@ -30,7 +32,10 @@ import {PropertyOptionsEffects} from './property-options-get.effects'; PropertyRemoveEffects, PropertiesQueryEffects, PropertyOptionsEffects - ]) + ]), + AgmCoreModule.forRoot({ + apiKey: 'AIzaSyAyBEPHoazpK_80ozU_Hq1wGK8cHj9QqMQ' + }) ], declarations: [ CreateListingPageComponent, @@ -40,7 +45,8 @@ import {PropertyOptionsEffects} from './property-options-get.effects'; RemoveListingPageComponent, PropertyListPageComponent, PropertiesSortComponent, - PropertiesComponent + PropertiesComponent, + PropertyPageComponent ], providers: [PropertiesService, PropertyService] }) diff --git a/src/app/properties/properties/properties.component.html b/src/app/properties/properties/properties.component.html index cccb8f5..84d08fe 100644 --- a/src/app/properties/properties/properties.component.html +++ b/src/app/properties/properties/properties.component.html @@ -1,6 +1,6 @@
- +
...
diff --git a/src/app/properties/property-page/property-page.component.html b/src/app/properties/property-page/property-page.component.html new file mode 100644 index 0000000..a21505e --- /dev/null +++ b/src/app/properties/property-page/property-page.component.html @@ -0,0 +1,59 @@ + +
+ + + + + + +
+

Get Access

+

For more detailed information on the property

+
+
+ + +
+ +
+ +
+

{{data.title}}

+

{{ data.address.detailLevel1 }}, {{ data.address.detailLevel2 }}, {{ data.address.city }}, {{ data.address.state + }}, {{ data.address.zipcode }}

+
    + +
  • ${{data.price | number: '1.2-2'}}/Month
  • +
  • Starts: {{data.startDate | date: 'yMd'}}, {{data.duration}} months
  • +
  • {{data.address.type}} / {{data.roomType}}
  • +
+ +
+ +
+

{{ data.description }}

+
+ +
+
+
+

Amenities

+
    +
  • {{option.alias}}
  • +
+
+
+

Pets

+
    +
  • {{option.alias}}
  • +
+
+
+

House Rules

+
    +
  • {{option.alias}}
  • +
+
+
+
+
diff --git a/src/app/properties/property-page/property-page.component.scss b/src/app/properties/property-page/property-page.component.scss new file mode 100644 index 0000000..30a6f3b --- /dev/null +++ b/src/app/properties/property-page/property-page.component.scss @@ -0,0 +1,11 @@ +div.content-area > section:not(:last-of-type) { + border-bottom: 1px solid #CCC; + padding-bottom: 24px; +} + +div.sidenav > section { + padding: 0 16px; +} +agm-map { + height: 250px; +} diff --git a/src/app/properties/property-page/property-page.component.spec.ts b/src/app/properties/property-page/property-page.component.spec.ts new file mode 100644 index 0000000..67b0fe6 --- /dev/null +++ b/src/app/properties/property-page/property-page.component.spec.ts @@ -0,0 +1,35 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {PropertyPageComponent} from './property-page.component'; +import {PropertyService} from '../property.service'; +import {Observable} from 'rxjs/Observable'; + +describe('PropertyPageComponent', () => { + let component: PropertyPageComponent; + let fixture: ComponentFixture; + const mockPropertyService = { + propertyOptions$: Observable.of({ + list: [] + }) + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + providers: [ + {provide: PropertyService, useValue: mockPropertyService} + ], + declarations: [PropertyPageComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PropertyPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/properties/property-page/property-page.component.ts b/src/app/properties/property-page/property-page.component.ts new file mode 100644 index 0000000..a5baa72 --- /dev/null +++ b/src/app/properties/property-page/property-page.component.ts @@ -0,0 +1,81 @@ +import {Component, HostBinding, OnInit} from '@angular/core'; +import {PropertyService} from '../property.service'; + +@Component({ + selector: 'app-property-page', + templateUrl: './property-page.component.html', + styleUrls: ['./property-page.component.scss'] +}) +export class PropertyPageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; + + data = { + "id": "5636139285217280", + "duration": 5, + "price": 530.59, + "description": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam cursus felis est, et luctus lorem hendrerit nec. Aliquam mauris urna, euismod consequat ultricies eget, vehicula ut lacus. In hac habitasse platea dictumst. Sed at feugiat mi. Integer congue, dui id lobortis dignissim, nunc lacus feugiat lectus, ac mollis purus risus ut justo. Suspendisse ut lorem ante. Nunc at sem quis massa suscipit luctus et vitae neque. Quisque pharetra justo arcu, vitae sagittis nulla volutpat eu.\nEtiam gravida id mauris et placerat. Aliquam iaculis feugiat commodo. Praesent fermentum commodo ex at tincidunt. In bibendum lorem magna, nec pretium urna convallis vel. Pellentesque condimentum vestibulum neque vel vehicula. Morbi lobortis metus urna, id semper diam tristique nec. Phasellus interdum, nisi sed.", + "options": [ + 1, + 2, + 3, + 4, + 5, + 11, + 13 + ], + "address": { + "geocode": { + "lat": 43.0730257, + "lng": -89.3928802 + }, + "detailLevel1": "Apt. 6B", + "detailLevel2": "430 W Johnson St.", + "city": "Madison", + "state": "WI", + "zipcode": "53703", + "type": "APARTMENT" + }, + "status": false, + "owner": "5702666986455040", + "imageUrls": [], + "title": "Test Object 3", + "roomType": "1BR", + "startDate": "2017-11-10T21:16:48.757Z", + "createTime": "2017-11-11T04:52:13.480Z", + "updateTime": "2017-11-11T04:52:13.480Z" + }; + + options = []; + propertyOptions = { + amenities: [], + pets: [], + houseRules: [] + }; + + constructor(private _propertyService: PropertyService) { + this._propertyService.propertyOptions$.subscribe((options) => { + if (options.list.length > 0) { + this.options = options.list; + const selectedOptions = this.data.options.map((id) => { + return this.options.find((option) => { + return parseInt(option.id) === id; + }); + }); + + this.propertyOptions.amenities = selectedOptions.filter((option) => { + return option.type === 'AMENITIES' + }); + this.propertyOptions.pets = selectedOptions.filter((option) => { + return option.type === 'PETS' + }); + this.propertyOptions.houseRules = selectedOptions.filter((option) => { + return option.type === 'HOUSE_RULES' + }); + } + }); + } + + ngOnInit() { + this._propertyService.getOptions(); + } +} From cd25e7096cae097152d5dc618cbcd307ce69a7aa Mon Sep 17 00:00:00 2001 From: Siping Li Date: Mon, 20 Nov 2017 20:21:06 -0600 Subject: [PATCH 37/88] search-bar If I add this directly to the header, the whole webpage does not load. --- src/app/app.component.html | 1 + src/app/app.module.ts | 7 ++++-- .../searching-bar.component.html | 6 +++++ .../searching-bar.component.scss | 0 .../searching-bar.component.spec.ts | 25 +++++++++++++++++++ .../searching-bar/searching-bar.component.ts | 25 +++++++++++++++++++ src/app/shared/header/header.component.html | 1 - 7 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 src/app/searching-bar/searching-bar.component.html create mode 100644 src/app/searching-bar/searching-bar.component.scss create mode 100644 src/app/searching-bar/searching-bar.component.spec.ts create mode 100644 src/app/searching-bar/searching-bar.component.ts diff --git a/src/app/app.component.html b/src/app/app.component.html index 12a35ea..04ab7a7 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,6 +1,7 @@
+
diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5204625..3916634 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -27,11 +27,13 @@ import {AccessPurchaseModule} from './access-purchase/access-purchase.module'; import { PropertySummaryCardComponent } from './user/property-summary-card/property-summary-card.component'; import { MyPropertiesCardComponent } from './user/my-properties-card/my-properties-card.component'; import { MyPropertiesListComponent } from './user/my-properties-list/my-properties-list.component'; - +import { SearchingBarComponent } from './searching-bar/searching-bar.component'; +import { FormsModule } from '@angular/forms'; @NgModule({ declarations: [ AppComponent, - LandingPageComponent + LandingPageComponent, + SearchingBarComponent, ], imports: [ BrowserModule, @@ -59,6 +61,7 @@ import { MyPropertiesListComponent } from './user/my-properties-list/my-properti PropertiesModule, AccessPurchaseModule, ClarityModule.forRoot(), + FormsModule, ], bootstrap: [AppComponent] }) diff --git a/src/app/searching-bar/searching-bar.component.html b/src/app/searching-bar/searching-bar.component.html new file mode 100644 index 0000000..f42a995 --- /dev/null +++ b/src/app/searching-bar/searching-bar.component.html @@ -0,0 +1,6 @@ + +
+ +
+ + diff --git a/src/app/searching-bar/searching-bar.component.scss b/src/app/searching-bar/searching-bar.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/searching-bar/searching-bar.component.spec.ts b/src/app/searching-bar/searching-bar.component.spec.ts new file mode 100644 index 0000000..259748e --- /dev/null +++ b/src/app/searching-bar/searching-bar.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { SearchingBarComponent } from './searching-bar.component'; + +describe('SearchingBarComponent', () => { + let component: SearchingBarComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ SearchingBarComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(SearchingBarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/searching-bar/searching-bar.component.ts b/src/app/searching-bar/searching-bar.component.ts new file mode 100644 index 0000000..cbc9ccd --- /dev/null +++ b/src/app/searching-bar/searching-bar.component.ts @@ -0,0 +1,25 @@ +import { Component, OnInit } from '@angular/core'; +import {NgForm} from '@angular/forms'; +import {Router} from '@angular/router'; +@Component({ + selector: 'app-searching-bar', + templateUrl: './searching-bar.component.html', + styleUrls: ['./searching-bar.component.scss'] +}) +export class SearchingBarComponent implements OnInit { + + constructor(private router: Router) { } + + ngOnInit() { + } + + submitSearch(event, formData: NgForm) { + console.log(event); + console.log(formData.value); + let query = formData.value['q']; + if (query){ + this.router.navigate(['/properties', {q : query}]); + } + + } +} diff --git a/src/app/shared/header/header.component.html b/src/app/shared/header/header.component.html index 9f416aa..c6a87d6 100644 --- a/src/app/shared/header/header.component.html +++ b/src/app/shared/header/header.component.html @@ -21,7 +21,6 @@
- + +
- Sidenav +

Filter

+
+
+
+ +
+
+
+ +
+
+
+
+ +
+ +
+ +
+
+
From d7bda1de5156bbe307eb7af91e25ab42f6eea32b Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:31:48 -0600 Subject: [PATCH 55/88] fix(item-id): allow string id --- src/app/_domains/item-id.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/_domains/item-id.ts b/src/app/_domains/item-id.ts index 71dfb92..83be333 100644 --- a/src/app/_domains/item-id.ts +++ b/src/app/_domains/item-id.ts @@ -1,3 +1,3 @@ export interface ItemId { - id: number; + id: number | string; } From 9fb5ee50fa8031028b069877adea68ecaf82f20e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:31:59 -0600 Subject: [PATCH 56/88] feat(wishlist): add api constants --- src/app/core/api-endpoints.constant.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index 43b3bcf..db0f619 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -72,18 +72,18 @@ export const API = { method: 'PUT', url: '/users/${userId}/account-info' }, - BOOKMARKS: { + WISHLIST: { ADD: { method: 'POST', - url: '/users/${userId}/bookmarks' + url: '/wishlist' }, CLEAR: { method: 'DELETE', - url: '/users/${userId}/bookmarks' + url: '/wishlist' }, DELETE: { method: 'DELETE', - url: '/users/${userId}/bookmarks/${bookmarkId}' + url: '/wishlist/${id}' } }, PROPERTIES: { From 9f6930c40677e175c0238c6394ca30562d8f2cca Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:32:19 -0600 Subject: [PATCH 57/88] feat(wishlist): post api --- .../_effect-actions/wishlist-add.actions.ts | 28 ++++++++++ src/app/user/wishlist-add.effects.ts | 51 +++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 src/app/_effect-actions/wishlist-add.actions.ts create mode 100644 src/app/user/wishlist-add.effects.ts diff --git a/src/app/_effect-actions/wishlist-add.actions.ts b/src/app/_effect-actions/wishlist-add.actions.ts new file mode 100644 index 0000000..ff5f1dd --- /dev/null +++ b/src/app/_effect-actions/wishlist-add.actions.ts @@ -0,0 +1,28 @@ +import {Action} from '@ngrx/store'; +import {RequestError} from '../_domains/request-error'; +import {PropertySummary} from '../_domains/property-summary'; + +export const REQUEST = 'WishlistAddActions.REQUEST'; +export const SUCCESS = 'WishlistAddActions.SUCCESS'; +export const ERROR = 'WishlistAddActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: number | string) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; + + constructor(public payload: PropertySummary) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/user/wishlist-add.effects.ts b/src/app/user/wishlist-add.effects.ts new file mode 100644 index 0000000..9c70780 --- /dev/null +++ b/src/app/user/wishlist-add.effects.ts @@ -0,0 +1,51 @@ +import {Injectable} from '@angular/core'; +import {Action} from '@ngrx/store'; +import {Actions, Effect} from '@ngrx/effects'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/operator/switchMap'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/observable/of'; + +import {RestApiRequest} from '../core/rest-api-request'; +import {RestApiService} from '../core/rest-api.service'; +import {RequestError} from '../_domains/request-error'; +import {API} from '../core/api-endpoints.constant'; + +import {AlertActions} from '../_actions/alert.actions'; +import * as WishlistActions from '../_actions/wishlist.actions'; + +import * as WishlistAddActions from '../_effect-actions/wishlist-add.actions'; + +@Injectable() +export class WishlistAddEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(WishlistAddActions.REQUEST) + .map((action: WishlistAddActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.USER.WISHLIST.ADD); + request.setBody({id: payload}); + + return this._api.request(request) + .map(response => new WishlistAddActions.Success(response)) + .catch(error => Observable.of(new WishlistAddActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(WishlistAddActions.SUCCESS) + .map((action: WishlistAddActions.Success) => new WishlistActions.AddItem(action.payload)); + + @Effect() onError$: Observable = this.actions$ + .ofType(WishlistAddActions.ERROR) + .map((action: WishlistAddActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} From f39a6d9e13faf285d1527f44d97c48b4bb6704c9 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:32:29 -0600 Subject: [PATCH 58/88] feat(wishlist): delete api --- .../wishlist-remove.actions.ts | 28 ++++++++++ src/app/user/wishlist-remove.effects.ts | 53 +++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/app/_effect-actions/wishlist-remove.actions.ts create mode 100644 src/app/user/wishlist-remove.effects.ts diff --git a/src/app/_effect-actions/wishlist-remove.actions.ts b/src/app/_effect-actions/wishlist-remove.actions.ts new file mode 100644 index 0000000..5b52ff7 --- /dev/null +++ b/src/app/_effect-actions/wishlist-remove.actions.ts @@ -0,0 +1,28 @@ +import {Action} from '@ngrx/store'; +import {RequestError} from '../_domains/request-error'; +import {ItemId} from '../_domains/item-id'; + +export const REQUEST = 'WishlistRemoveActions.REQUEST'; +export const SUCCESS = 'WishlistRemoveActions.SUCCESS'; +export const ERROR = 'WishlistRemoveActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: string) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; + + constructor(public payload: ItemId) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/user/wishlist-remove.effects.ts b/src/app/user/wishlist-remove.effects.ts new file mode 100644 index 0000000..2927b9b --- /dev/null +++ b/src/app/user/wishlist-remove.effects.ts @@ -0,0 +1,53 @@ +import {Injectable} from '@angular/core'; +import {Action} from '@ngrx/store'; +import {Actions, Effect} from '@ngrx/effects'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/operator/switchMap'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/observable/of'; + +import {RestApiRequest} from '../core/rest-api-request'; +import {RestApiService} from '../core/rest-api.service'; +import {RequestError} from '../_domains/request-error'; +import {API} from '../core/api-endpoints.constant'; + +import {AlertActions} from '../_actions/alert.actions'; +import * as WishlistActions from '../_actions/wishlist.actions'; + +import * as WishlistRemoveActions from '../_effect-actions/wishlist-remove.actions'; + +@Injectable() +export class WishlistRemoveEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(WishlistRemoveActions.REQUEST) + .map((action: WishlistRemoveActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.USER.WISHLIST.DELETE); + request.setPathParams({id: payload}); + + console.log(payload); + console.log(parseInt(payload)); + return this._api.request(request) + .map(response => new WishlistRemoveActions.Success({id: payload})) + .catch(error => Observable.of(new WishlistRemoveActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(WishlistRemoveActions.SUCCESS) + .map((action: WishlistRemoveActions.Success) => new WishlistActions.RemoveItem(action.payload)); + + @Effect() onError$: Observable = this.actions$ + .ofType(WishlistRemoveActions.ERROR) + .map((action: WishlistRemoveActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} From 5113d59943196e6ddf60120da06dcf097da0b224 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:32:41 -0600 Subject: [PATCH 59/88] feat(wishlist): register to user module --- src/app/user/user.module.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index 58282af..add4ed1 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -17,7 +17,9 @@ import {SubscriptionListComponent} from './subscription-list/subscription-list.c import {MyPropertiesListComponent} from './my-properties-list/my-properties-list.component'; import {MyPropertiesCardComponent} from './my-properties-card/my-properties-card.component'; import {SharedModule} from '../shared/shared.module'; -import { MyWishlistComponent } from './my-wishlist/my-wishlist.component'; +import {MyWishlistComponent} from './my-wishlist/my-wishlist.component'; +import {WishlistAddEffects} from "./wishlist-add.effects"; +import {WishlistRemoveEffects} from './wishlist-remove.effects'; @NgModule({ imports: [ @@ -27,7 +29,9 @@ import { MyWishlistComponent } from './my-wishlist/my-wishlist.component'; RouterModule, EffectsModule.forFeature([ DeactivateEffects.Effects, - UserInfoGetEffects + UserInfoGetEffects, + WishlistAddEffects, + WishlistRemoveEffects ]), SharedModule ], From edab77b5c94732d4d8a1ebf1596cde986aedc908 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:34:42 -0600 Subject: [PATCH 60/88] fix(wishlist): fix wishlist styles --- src/app/shared/header/header.component.scss | 26 +++++++++++++++++++ .../wishlist-card.component.scss | 19 ++------------ 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/app/shared/header/header.component.scss b/src/app/shared/header/header.component.scss index 64f7018..143d7e2 100644 --- a/src/app/shared/header/header.component.scss +++ b/src/app/shared/header/header.component.scss @@ -11,5 +11,31 @@ clr-modal { ::ng-deep .card { margin: 0.25rem 0; } + + ::ng-deep app-wishlist-card { + position: relative; + } + ::ng-deep app-wishlist-card .property-summary-controls { + z-index: 100; + position: absolute; + top: 1rem; + right: 0.75rem; + + button { + cursor: pointer; + padding: 0; + line-height: 22px; + &:hover { + background: ghostwhite; + } + clr-icon { + color: grey; + position: relative; + transform: none; + top: 0; + right: 0; + } + } + } } diff --git a/src/app/shared/wishlist-card/wishlist-card.component.scss b/src/app/shared/wishlist-card/wishlist-card.component.scss index 9e9db89..fea58e5 100644 --- a/src/app/shared/wishlist-card/wishlist-card.component.scss +++ b/src/app/shared/wishlist-card/wishlist-card.component.scss @@ -1,25 +1,10 @@ -:host { - position: relative; -} .property-summary-controls { z-index: 100; position: absolute; - top: 1rem; - right: 0.75rem; + top: 2.25rem; + right: 1.75rem; button { cursor: pointer; - padding: 0; - line-height: 22px; - &:hover { - background: ghostwhite; - } - clr-icon { - color: grey; - position: relative; - transform: none; - top: 0; - right: 0; - } } } From 7faa73251e25f10eda80bc58686e99639185c375 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Fri, 24 Nov 2017 19:42:03 -0600 Subject: [PATCH 61/88] feat(wishlist): wire features --- .../shared/header/header.component.spec.ts | 11 ++- src/app/shared/header/header.component.ts | 90 ++----------------- .../wishlist-button.component.ts | 4 +- .../account-info-page.component.html | 3 +- src/app/user/user.module.ts | 2 +- src/app/user/wishlist-remove.effects.ts | 2 - src/app/user/wishlist.service.spec.ts | 22 ++++- src/app/user/wishlist.service.ts | 8 +- 8 files changed, 44 insertions(+), 98 deletions(-) diff --git a/src/app/shared/header/header.component.spec.ts b/src/app/shared/header/header.component.spec.ts index 6b2fd45..2384f08 100644 --- a/src/app/shared/header/header.component.spec.ts +++ b/src/app/shared/header/header.component.spec.ts @@ -5,6 +5,7 @@ import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; import {Router} from '@angular/router'; import {Observable} from 'rxjs/Observable'; import {AuthService} from '../../auth/auth.service'; +import {WishlistService} from '../../user/wishlist.service'; describe('HeaderComponent', () => { const routerMock = { @@ -18,6 +19,13 @@ describe('HeaderComponent', () => { unauthenticate = jasmine.createSpy('unauthenticate'); } + class MockWishlistService { + wishlist$ = Observable.of({ + list: [] + }); + + remove = jasmine.createSpy('remove'); + } let component: HeaderComponent; let fixture: ComponentFixture; @@ -28,7 +36,8 @@ describe('HeaderComponent', () => { ], providers: [ {provide: Router, useValue: routerMock}, - {provide: AuthService, useClass: MockAuthService} + {provide: AuthService, useClass: MockAuthService}, + {provide: WishlistService, useClass: MockWishlistService} ], declarations: [ HeaderComponent ] }) diff --git a/src/app/shared/header/header.component.ts b/src/app/shared/header/header.component.ts index 54a414c..5478f66 100644 --- a/src/app/shared/header/header.component.ts +++ b/src/app/shared/header/header.component.ts @@ -2,6 +2,7 @@ import {Component, OnInit} from '@angular/core'; import {Router} from '@angular/router'; import {AuthService} from '../../auth/auth.service'; import {PropertySummary} from '../../_domains/property-summary'; +import {WishlistService} from '../../user/wishlist.service'; @Component({ selector: 'app-header', @@ -14,96 +15,17 @@ export class HeaderComponent implements OnInit { email: string; wishlist: PropertySummary[]; - constructor(private _router: Router, private _auth: AuthService) { + constructor(private _router: Router, private _auth: AuthService, private _wishlist: WishlistService) { this._auth.auth$.subscribe((auth) => { this.authenticated = auth.token !== null; this.email = auth.email; if (this.authenticated) { this.loginModalOpen = false; - this.wishlist = [ - { - id: 1, - title: 'property1', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property2', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property3', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property4', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property5', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property5', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property6', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - }, - { - id: 1, - title: 'property7', - status: true, - address: '123 Test Ave.', - price: 520.12, - startDate: '2017-11-30T00:00:00', - duration: 3, - thumbnailUrl: '' - } - ]; } }); + this._wishlist.wishlist$.subscribe((wishlist) => { + this.wishlist = wishlist.list; + }); } ngOnInit() { @@ -119,7 +41,7 @@ export class HeaderComponent implements OnInit { } onWishlistRemove(id) { - console.log(id); + this._wishlist.remove(id); } signOut() { diff --git a/src/app/shared/wishlist-button/wishlist-button.component.ts b/src/app/shared/wishlist-button/wishlist-button.component.ts index 5c2b08a..ff49e02 100644 --- a/src/app/shared/wishlist-button/wishlist-button.component.ts +++ b/src/app/shared/wishlist-button/wishlist-button.component.ts @@ -15,9 +15,7 @@ export class WishlistButtonComponent implements OnInit { constructor(private _service: WishlistService) { this._service.wishlist$.subscribe((data) => { - if (data.list.length > 0) { - this.wishlist = data.list; - } + this.wishlist = data.list; }); this._service.featureOn$.subscribe((featureOn) => { this.hasWishlist = featureOn; diff --git a/src/app/user/account-info-page/account-info-page.component.html b/src/app/user/account-info-page/account-info-page.component.html index 7b7a5ef..4fec1c1 100644 --- a/src/app/user/account-info-page/account-info-page.component.html +++ b/src/app/user/account-info-page/account-info-page.component.html @@ -25,7 +25,6 @@

My Properties

Wishlist

-
-
+
diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index add4ed1..793d47f 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -18,7 +18,7 @@ import {MyPropertiesListComponent} from './my-properties-list/my-properties-list import {MyPropertiesCardComponent} from './my-properties-card/my-properties-card.component'; import {SharedModule} from '../shared/shared.module'; import {MyWishlistComponent} from './my-wishlist/my-wishlist.component'; -import {WishlistAddEffects} from "./wishlist-add.effects"; +import {WishlistAddEffects} from './wishlist-add.effects'; import {WishlistRemoveEffects} from './wishlist-remove.effects'; @NgModule({ diff --git a/src/app/user/wishlist-remove.effects.ts b/src/app/user/wishlist-remove.effects.ts index 2927b9b..c735b89 100644 --- a/src/app/user/wishlist-remove.effects.ts +++ b/src/app/user/wishlist-remove.effects.ts @@ -26,8 +26,6 @@ export class WishlistRemoveEffects { const request = new RestApiRequest(API.USER.WISHLIST.DELETE); request.setPathParams({id: payload}); - console.log(payload); - console.log(parseInt(payload)); return this._api.request(request) .map(response => new WishlistRemoveActions.Success({id: payload})) .catch(error => Observable.of(new WishlistRemoveActions.Error(error))); diff --git a/src/app/user/wishlist.service.spec.ts b/src/app/user/wishlist.service.spec.ts index 8cf88b9..cecbf82 100644 --- a/src/app/user/wishlist.service.spec.ts +++ b/src/app/user/wishlist.service.spec.ts @@ -1,11 +1,15 @@ import {TestBed, inject} from '@angular/core/testing'; -import {StoreModule} from '@ngrx/store'; +import {Store, StoreModule} from '@ngrx/store'; import * as Wishlist from '../_actions/wishlist.reducer'; import * as Auth from '../_actions/auth.reducer'; +import * as WishlistAddActions from '../_effect-actions/wishlist-add.actions'; +import * as WishlistRemoveActions from '../_effect-actions/wishlist-remove.actions'; import {WishlistService} from './wishlist.service'; describe('WishlistService', () => { + let store; + beforeEach(() => { TestBed.configureTestingModule({ imports: [ @@ -16,6 +20,8 @@ describe('WishlistService', () => { ], providers: [WishlistService] }); + + store = TestBed.get(Store); }); it('should be created', inject([WishlistService], (service: WishlistService) => { @@ -24,11 +30,21 @@ describe('WishlistService', () => { describe('method: add', () => { it('should call add action with id', inject([WishlistService], (service: WishlistService) => { - spyOn(console, 'log'); + spyOn(store, 'dispatch'); const testId = 1; service.add(testId); - expect(console.log).toHaveBeenCalledWith('add' + testId); + expect(store.dispatch).toHaveBeenCalledWith(new WishlistAddActions.Request(testId)); + })); + }); + + describe('method: remove', () => { + it('should call remove action with id', inject([WishlistService], (service: WishlistService) => { + spyOn(store, 'dispatch'); + const testId = 1; + service.remove(testId); + + expect(store.dispatch).toHaveBeenCalledWith(new WishlistRemoveActions.Request(testId.toString())); })); }); }); diff --git a/src/app/user/wishlist.service.ts b/src/app/user/wishlist.service.ts index a90e2f2..c269293 100644 --- a/src/app/user/wishlist.service.ts +++ b/src/app/user/wishlist.service.ts @@ -2,6 +2,8 @@ import {Injectable} from '@angular/core'; import {Wishlist} from '../_domains/wishlist'; import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; +import * as WishlistAddActions from '../_effect-actions/wishlist-add.actions'; +import * as WishlistRemoveActions from '../_effect-actions/wishlist-remove.actions'; @Injectable() export class WishlistService { @@ -20,11 +22,13 @@ export class WishlistService { } add(id: number) { - console.log('add' + id); + + this._store.dispatch(new WishlistAddActions.Request(id)); } remove(id: number) { - console.log('remove'); + + this._store.dispatch(new WishlistRemoveActions.Request(id.toString())); } clear() { From b34feb432303571c32d87e4a20804e3152beaa3c Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 25 Nov 2017 15:25:39 -0600 Subject: [PATCH 62/88] feat(filter): add filter and search --- .../filter-options.constants.ts | 34 +++++ .../properties-filter.component.html | 129 ++++++++++++++++++ .../properties-filter.component.scss | 23 ++++ .../properties-filter.component.spec.ts | 25 ++++ .../properties-filter.component.ts | 86 ++++++++++++ .../properties-sort.component.ts | 5 +- src/app/properties/properties.module.ts | 4 +- .../property-list-page.component.html | 26 +--- .../property-list-page.component.scss | 4 + .../property-list-page.component.ts | 20 ++- src/app/shared/header/header.component.html | 5 + src/app/shared/header/header.component.ts | 22 ++- 12 files changed, 352 insertions(+), 31 deletions(-) create mode 100644 src/app/properties/properties-filter/filter-options.constants.ts create mode 100644 src/app/properties/properties-filter/properties-filter.component.html create mode 100644 src/app/properties/properties-filter/properties-filter.component.scss create mode 100644 src/app/properties/properties-filter/properties-filter.component.spec.ts create mode 100644 src/app/properties/properties-filter/properties-filter.component.ts diff --git a/src/app/properties/properties-filter/filter-options.constants.ts b/src/app/properties/properties-filter/filter-options.constants.ts new file mode 100644 index 0000000..1a953f9 --- /dev/null +++ b/src/app/properties/properties-filter/filter-options.constants.ts @@ -0,0 +1,34 @@ +export const FILTER_OPTIONS = { + PROPERTY_TYPE: [ + { + value: 'APARTMENT', + alias: 'Apartment' + }, + { + value: 'HOUSE', + alias: 'House' + } + ], + ROOM_TYPE: [ + { + value: 'STUDIO', + alias: 'STUDIO' + }, + { + value: '1BR', + alias: '1BR' + }, + { + value: '2BR', + alias: '2BR' + }, + { + value: '3BR', + alias: '3BR' + }, + { + value: '4BR', + alias: '4BR' + } + ] +}; diff --git a/src/app/properties/properties-filter/properties-filter.component.html b/src/app/properties/properties-filter/properties-filter.component.html new file mode 100644 index 0000000..cd76a3c --- /dev/null +++ b/src/app/properties/properties-filter/properties-filter.component.html @@ -0,0 +1,129 @@ + + + + + + diff --git a/src/app/properties/properties-filter/properties-filter.component.scss b/src/app/properties/properties-filter/properties-filter.component.scss new file mode 100644 index 0000000..90469cb --- /dev/null +++ b/src/app/properties/properties-filter/properties-filter.component.scss @@ -0,0 +1,23 @@ +form { + label { + font-weight: bold; + font-size: 0.75rem; + } + .form-group > .radio { + label { + font-weight: normal; + } + margin-right: 0; + } + + .checkbox > label { + font-weight: normal; + } + font-size: 0.75rem; + padding-left: 0.75rem; + padding-right: 0.75rem; +} + +.btn.btn-link { + margin: 0; +} diff --git a/src/app/properties/properties-filter/properties-filter.component.spec.ts b/src/app/properties/properties-filter/properties-filter.component.spec.ts new file mode 100644 index 0000000..9e55b12 --- /dev/null +++ b/src/app/properties/properties-filter/properties-filter.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PropertiesFilterComponent } from './properties-filter.component'; + +describe('PropertiesFilterComponent', () => { + let component: PropertiesFilterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PropertiesFilterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PropertiesFilterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/properties/properties-filter/properties-filter.component.ts b/src/app/properties/properties-filter/properties-filter.component.ts new file mode 100644 index 0000000..fe848f7 --- /dev/null +++ b/src/app/properties/properties-filter/properties-filter.component.ts @@ -0,0 +1,86 @@ +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; +import {FormBuilder, FormGroup} from '@angular/forms'; +import {FILTER_OPTIONS} from './filter-options.constants'; +import {PropertyService} from '../property.service'; + +@Component({ + selector: 'app-properties-filter', + templateUrl: './properties-filter.component.html', + styleUrls: ['./properties-filter.component.scss'] +}) +export class PropertiesFilterComponent implements OnInit { + @Input() filterInput: any; + @Output() onApply = new EventEmitter(); + + filterForm: FormGroup; + options: any; + filterOpen = false; + + constructor(private _property: PropertyService, private _fb: FormBuilder) { + + this._property.propertyOptions$.subscribe((options) => { + if (options.list.length > 0) { + this.options = {}; + this.options.AMENITIES = options.list.filter((option) => option.type === 'AMENITIES'); + this.options.PETS = options.list.filter((option) => option.type === 'PETS'); + this.options.HOUSE_RULES = options.list.filter((option) => option.type === 'HOUSE_RULES'); + this.options = Object.assign({}, this.options, FILTER_OPTIONS); + this.generateForm(); + } + }); + } + + ngOnInit() { + + this._property.getOptions(); + } + + generateForm() { + this.filterForm = this._fb.group({ + propertyType: [this.filterInput.propertyType], + roomType: [this.filterInput.roomType], + startBefore: [this.filterInput.startBefore ? this.filterInput.startBefore : null], + endAfter: [this.filterInput.endAfter ? this.filterInput.endAfter : null], + minPrice: [this.filterInput.minPrice ? this.filterInput.minPrice : null], + maxPrice: [this.filterInput.maxPrice ? this.filterInput.maxPrice : null], + zipcode: [this.filterInput.zipcode ? this.filterInput.zipcode : null], + amenities: this._fb.array(this.options.AMENITIES.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))), + pets: this._fb.array(this.options.PETS.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))), + houseRules: this._fb.array(this.options.HOUSE_RULES.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))) + }); + } + + applyFilter({value, valid}) { + const amenities = this.options.AMENITIES + .filter((option, index) => value.amenities[index]) + .map((option) => option.id); + const pets = this.options.PETS + .filter((option, index) => value.pets[index]) + .map((option) => option.id); + const houseRules = this.options.HOUSE_RULES + .filter((option, index) => value.houseRules[index]) + .map((option) => option.id); + + this.filterOpen = false; + this.onApply.emit({ + propertyType: value.propertyType, + roomType: value.roomType, + startBefore: value.startBefore, + endBefore: value.endBefore, + minPrice: value.minPrice, + maxPrice: value.maxPrice, + zipcode: value.zipcode, + options: `[${[...amenities, ...pets, ...houseRules].join(',')}]` + }); + } + + openFilter() { + this.filterOpen = true; + } +} diff --git a/src/app/properties/properties-sort/properties-sort.component.ts b/src/app/properties/properties-sort/properties-sort.component.ts index 703b8aa..e615903 100644 --- a/src/app/properties/properties-sort/properties-sort.component.ts +++ b/src/app/properties/properties-sort/properties-sort.component.ts @@ -24,7 +24,10 @@ export class PropertiesSortComponent implements OnInit { } ngOnInit() { - this.sort = Object.assign({}, this.sortInput); + this.sort = { + sortBy: this.sortInput.sortBy, + direction: this.sortInput.direction + }; } onSelect(value) { diff --git a/src/app/properties/properties.module.ts b/src/app/properties/properties.module.ts index f214b81..566cc17 100644 --- a/src/app/properties/properties.module.ts +++ b/src/app/properties/properties.module.ts @@ -23,6 +23,7 @@ import {AgmCoreModule} from '@agm/core'; import {PropertyGetEffects} from './property-get.effects'; import {SearchingBarComponent} from './searching-bar/searching-bar.component'; import {SharedModule} from '../shared/shared.module'; +import { PropertiesFilterComponent } from './properties-filter/properties-filter.component'; @NgModule({ imports: [ @@ -53,7 +54,8 @@ import {SharedModule} from '../shared/shared.module'; PropertiesSortComponent, PropertiesComponent, PropertyPageComponent, - SearchingBarComponent + SearchingBarComponent, + PropertiesFilterComponent ], providers: [PropertiesService, PropertyService] }) diff --git a/src/app/properties/property-list-page/property-list-page.component.html b/src/app/properties/property-list-page/property-list-page.component.html index 670ac83..8778925 100644 --- a/src/app/properties/property-list-page/property-list-page.component.html +++ b/src/app/properties/property-list-page/property-list-page.component.html @@ -1,5 +1,6 @@
+
@@ -8,29 +9,6 @@
-
-

Filter

-
-
-
- -
-
-
- -
-
-
-
- -
-
-
-
-
-
+ diff --git a/src/app/properties/property-list-page/property-list-page.component.scss b/src/app/properties/property-list-page/property-list-page.component.scss index 7e5a546..f0cd473 100644 --- a/src/app/properties/property-list-page/property-list-page.component.scss +++ b/src/app/properties/property-list-page/property-list-page.component.scss @@ -12,3 +12,7 @@ div.sort-controls { position: relative; border-bottom: 1px solid #CCC; } + +app-properties-filter { + float: left; +} diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 6f3d8c4..47b35c0 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -18,15 +18,17 @@ export class PropertyListPageComponent implements OnInit { constructor(private _propertiesService: PropertiesService, private _activatedRoute: ActivatedRoute, private _router: Router) { - this.queryParams = { - sortBy: this._activatedRoute.snapshot.queryParams.sortBy || 'recent', - direction: this._activatedRoute.snapshot.queryParams.direction || 'UP' - }; + this._activatedRoute.queryParams.subscribe((params) => { + if (params.sortBy && params.direction) { + this.queryParams = params; + } + }); } ngOnInit() { this._propertiesService.query(this.queryParams); this._activatedRoute.queryParams.subscribe((params) => { + console.log(params); if (params.sortBy && params.direction) { this.queryParams = params; this._propertiesService.query(params); @@ -49,4 +51,14 @@ export class PropertyListPageComponent implements OnInit { this._router.navigate(['properties'], {queryParams: newQueryParams}); } + + applyFilter(filterParams) { + const defaultQueryParams = { + sortBy: this._activatedRoute.snapshot.queryParams.sortBy || 'recent', + direction: this._activatedRoute.snapshot.queryParams.direction || 'UP' + }; + const newQueryParams = Object.assign({}, defaultQueryParams, filterParams); + + this._router.navigate(['properties'], {queryParams: newQueryParams}); + } } diff --git a/src/app/shared/header/header.component.html b/src/app/shared/header/header.component.html index 26c0e46..7d17a75 100644 --- a/src/app/shared/header/header.component.html +++ b/src/app/shared/header/header.component.html @@ -5,6 +5,11 @@ UW Sublease
+
Sign-in/Sign-up diff --git a/src/app/shared/header/header.component.ts b/src/app/shared/header/header.component.ts index 5478f66..9a5d157 100644 --- a/src/app/shared/header/header.component.ts +++ b/src/app/shared/header/header.component.ts @@ -3,6 +3,7 @@ import {Router} from '@angular/router'; import {AuthService} from '../../auth/auth.service'; import {PropertySummary} from '../../_domains/property-summary'; import {WishlistService} from '../../user/wishlist.service'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; @Component({ selector: 'app-header', @@ -14,8 +15,12 @@ export class HeaderComponent implements OnInit { loginModalOpen = false; email: string; wishlist: PropertySummary[]; + searchForm: FormGroup; - constructor(private _router: Router, private _auth: AuthService, private _wishlist: WishlistService) { + constructor(private _router: Router, + private _fb: FormBuilder, + private _auth: AuthService, + private _wishlist: WishlistService) { this._auth.auth$.subscribe((auth) => { this.authenticated = auth.token !== null; this.email = auth.email; @@ -26,6 +31,9 @@ export class HeaderComponent implements OnInit { this._wishlist.wishlist$.subscribe((wishlist) => { this.wishlist = wishlist.list; }); + this.searchForm = this._fb.group({ + keyword: ['', Validators.required] + }); } ngOnInit() { @@ -48,4 +56,16 @@ export class HeaderComponent implements OnInit { this._auth.unauthenticate(); } + + search({value, valid}) { + if (valid) { + this._router.navigate(['properties'], { + queryParams: { + sortBy: 'recent', + direction: 'UP', + keyword: value.keyword + } + }); + } + } } From d6c277fd4a70c34061f88f0e7303d796ba53941a Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 25 Nov 2017 15:52:22 -0600 Subject: [PATCH 63/88] test(filters): fix specs --- .../properties-filter.component.spec.ts | 35 +++++++++++++++-- .../properties-filter.component.ts | 38 ++++++++++--------- .../shared/header/header.component.spec.ts | 4 ++ 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/src/app/properties/properties-filter/properties-filter.component.spec.ts b/src/app/properties/properties-filter/properties-filter.component.spec.ts index 9e55b12..7d18482 100644 --- a/src/app/properties/properties-filter/properties-filter.component.spec.ts +++ b/src/app/properties/properties-filter/properties-filter.component.spec.ts @@ -1,21 +1,48 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PropertiesFilterComponent } from './properties-filter.component'; +import {PropertiesFilterComponent} from './properties-filter.component'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {ReactiveFormsModule} from '@angular/forms'; +import {Observable} from "rxjs/Observable"; +import {PropertyService} from '../property.service'; describe('PropertiesFilterComponent', () => { let component: PropertiesFilterComponent; let fixture: ComponentFixture; + const mockPropertyClass = { + getOptions: jasmine.createSpy('getOptions'), + propertyOptions$: Observable.of({ + list: [ + { + id: 1, + type: 'AMENITIES', + alias: 'option1' + } + ] + }) + }; + beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ PropertiesFilterComponent ] + schemas: [ + CUSTOM_ELEMENTS_SCHEMA + ], + imports: [ + ReactiveFormsModule + ], + providers: [ + {provide: PropertyService, useValue: mockPropertyClass} + ], + declarations: [PropertiesFilterComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(PropertiesFilterComponent); component = fixture.componentInstance; + fixture.detectChanges(); }); diff --git a/src/app/properties/properties-filter/properties-filter.component.ts b/src/app/properties/properties-filter/properties-filter.component.ts index fe848f7..ebc6c51 100644 --- a/src/app/properties/properties-filter/properties-filter.component.ts +++ b/src/app/properties/properties-filter/properties-filter.component.ts @@ -36,24 +36,26 @@ export class PropertiesFilterComponent implements OnInit { } generateForm() { - this.filterForm = this._fb.group({ - propertyType: [this.filterInput.propertyType], - roomType: [this.filterInput.roomType], - startBefore: [this.filterInput.startBefore ? this.filterInput.startBefore : null], - endAfter: [this.filterInput.endAfter ? this.filterInput.endAfter : null], - minPrice: [this.filterInput.minPrice ? this.filterInput.minPrice : null], - maxPrice: [this.filterInput.maxPrice ? this.filterInput.maxPrice : null], - zipcode: [this.filterInput.zipcode ? this.filterInput.zipcode : null], - amenities: this._fb.array(this.options.AMENITIES.map( - (option) => this._fb.control( - this.filterInput.options && this.filterInput.options.includes(option.id)))), - pets: this._fb.array(this.options.PETS.map( - (option) => this._fb.control( - this.filterInput.options && this.filterInput.options.includes(option.id)))), - houseRules: this._fb.array(this.options.HOUSE_RULES.map( - (option) => this._fb.control( - this.filterInput.options && this.filterInput.options.includes(option.id)))) - }); + if (this.filterInput) { + this.filterForm = this._fb.group({ + propertyType: [this.filterInput.propertyType], + roomType: [this.filterInput.roomType], + startBefore: [this.filterInput.startBefore ? this.filterInput.startBefore : null], + endAfter: [this.filterInput.endAfter ? this.filterInput.endAfter : null], + minPrice: [this.filterInput.minPrice ? this.filterInput.minPrice : null], + maxPrice: [this.filterInput.maxPrice ? this.filterInput.maxPrice : null], + zipcode: [this.filterInput.zipcode ? this.filterInput.zipcode : null], + amenities: this._fb.array(this.options.AMENITIES.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))), + pets: this._fb.array(this.options.PETS.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))), + houseRules: this._fb.array(this.options.HOUSE_RULES.map( + (option) => this._fb.control( + this.filterInput.options && this.filterInput.options.includes(option.id)))) + }); + } } applyFilter({value, valid}) { diff --git a/src/app/shared/header/header.component.spec.ts b/src/app/shared/header/header.component.spec.ts index 2384f08..979f018 100644 --- a/src/app/shared/header/header.component.spec.ts +++ b/src/app/shared/header/header.component.spec.ts @@ -6,6 +6,7 @@ import {Router} from '@angular/router'; import {Observable} from 'rxjs/Observable'; import {AuthService} from '../../auth/auth.service'; import {WishlistService} from '../../user/wishlist.service'; +import {ReactiveFormsModule} from '@angular/forms'; describe('HeaderComponent', () => { const routerMock = { @@ -34,6 +35,9 @@ describe('HeaderComponent', () => { schemas: [ CUSTOM_ELEMENTS_SCHEMA ], + imports: [ + ReactiveFormsModule + ], providers: [ {provide: Router, useValue: routerMock}, {provide: AuthService, useClass: MockAuthService}, From 3f622fa0499c7035b68140006c2b009183f7d48b Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sat, 25 Nov 2017 15:54:26 -0600 Subject: [PATCH 64/88] style(lint): fix lint error --- .../properties-filter/properties-filter.component.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/properties/properties-filter/properties-filter.component.spec.ts b/src/app/properties/properties-filter/properties-filter.component.spec.ts index 7d18482..39725f0 100644 --- a/src/app/properties/properties-filter/properties-filter.component.spec.ts +++ b/src/app/properties/properties-filter/properties-filter.component.spec.ts @@ -3,7 +3,7 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {PropertiesFilterComponent} from './properties-filter.component'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; import {ReactiveFormsModule} from '@angular/forms'; -import {Observable} from "rxjs/Observable"; +import {Observable} from 'rxjs/Observable'; import {PropertyService} from '../property.service'; describe('PropertiesFilterComponent', () => { From e6f18b880709f567dea58c0bdb5d7577c1192ad4 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:40:48 -0600 Subject: [PATCH 65/88] feat(password-reset): add password reset form type --- src/app/_domains/password-reset-form.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/app/_domains/password-reset-form.ts diff --git a/src/app/_domains/password-reset-form.ts b/src/app/_domains/password-reset-form.ts new file mode 100644 index 0000000..96822f5 --- /dev/null +++ b/src/app/_domains/password-reset-form.ts @@ -0,0 +1,4 @@ +export interface PasswordResetForm { + token: string; + password: string; +} From 1ccf738383bcad01e3a1f5f26500a0aa8385d3e9 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:41:26 -0600 Subject: [PATCH 66/88] feat(password-reset): add apis --- .../password-reset-link.actions.ts | 25 +++++++++ .../_effect-actions/password-reset.actions.ts | 25 +++++++++ src/app/account/activation-link.effects.ts | 1 - .../password-reset-link.effects.ts | 51 +++++++++++++++++++ .../email-form/email-form.component.scss | 0 5 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/app/_effect-actions/password-reset-link.actions.ts create mode 100644 src/app/_effect-actions/password-reset.actions.ts create mode 100644 src/app/password-reset/password-reset-link.effects.ts create mode 100644 src/app/shared/email-form/email-form.component.scss diff --git a/src/app/_effect-actions/password-reset-link.actions.ts b/src/app/_effect-actions/password-reset-link.actions.ts new file mode 100644 index 0000000..3d6ee52 --- /dev/null +++ b/src/app/_effect-actions/password-reset-link.actions.ts @@ -0,0 +1,25 @@ +import {RequestError} from '../_domains/request-error'; +import {Action} from '@ngrx/store'; +import {EmailForm} from '../_domains/email-form'; + +export const REQUEST = 'PasswordResetLinkActions.REQUEST'; +export const SUCCESS = 'PasswordResetLinkActions.SUCCESS'; +export const ERROR = 'PasswordResetLinkActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: EmailForm) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/_effect-actions/password-reset.actions.ts b/src/app/_effect-actions/password-reset.actions.ts new file mode 100644 index 0000000..8119d10 --- /dev/null +++ b/src/app/_effect-actions/password-reset.actions.ts @@ -0,0 +1,25 @@ +import {RequestError} from '../_domains/request-error'; +import {Action} from '@ngrx/store'; +import {PasswordResetForm} from '../_domains/password-reset-form'; + +export const REQUEST = 'PasswordResetActions.REQUEST'; +export const SUCCESS = 'PasswordResetActions.SUCCESS'; +export const ERROR = 'PasswordResetActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: PasswordResetForm) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/account/activation-link.effects.ts b/src/app/account/activation-link.effects.ts index c3b0d2a..96f1780 100644 --- a/src/app/account/activation-link.effects.ts +++ b/src/app/account/activation-link.effects.ts @@ -1,5 +1,4 @@ import {Action} from '@ngrx/store'; -import {Auth} from '../_domains/auth'; import {Observable} from 'rxjs/Observable'; import {Actions, Effect} from '@ngrx/effects'; import {RestApiService} from '../core/rest-api.service'; diff --git a/src/app/password-reset/password-reset-link.effects.ts b/src/app/password-reset/password-reset-link.effects.ts new file mode 100644 index 0000000..fe1a403 --- /dev/null +++ b/src/app/password-reset/password-reset-link.effects.ts @@ -0,0 +1,51 @@ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {Action} from '@ngrx/store'; +import {RestApiService} from '../core/rest-api.service'; +import {Router} from '@angular/router'; +import {AlertActions} from '../_actions/alert.actions'; +import {RequestError} from '../_domains/request-error'; +import {HttpStatus} from '../core/http-status.enum'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import * as PasswordResetLinkActions from '../_effect-actions/password-reset-link.actions'; + +@Injectable() +export class PasswordResetLinkEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(PasswordResetLinkActions.REQUEST) + .map((action: PasswordResetLinkActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.REQUEST_RESET_PASSWORD); + request.setBody(payload); + + return this._api.request(request) + .map(response => new PasswordResetLinkActions.Success()) + .catch(error => Observable.of(new PasswordResetLinkActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(PasswordResetLinkActions.SUCCESS) + .map(() => new AlertActions.SetInfo('Reset Link Sent')); + + @Effect() onError$: Observable = this.actions$ + .ofType(PasswordResetLinkActions.ERROR) + .map((action: PasswordResetLinkActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + case HttpStatus.BAD_REQUEST: + return new AlertActions.SetError('Form Invalid'); + + case HttpStatus.NOT_FOUND: + return new AlertActions.SetError('Account with such e-mail does not exist.'); + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/shared/email-form/email-form.component.scss b/src/app/shared/email-form/email-form.component.scss new file mode 100644 index 0000000..e69de29 From c009e68bb6d36f49df40347a9054af29e38a62f7 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:41:46 -0600 Subject: [PATCH 67/88] refact(email-form): move email form to shared module --- src/app/account/account.module.ts | 8 ++++---- .../password-reset-page.component.scss} | 0 .../email-form/email-form.component.html | 0 .../email-form/email-form.component.spec.ts | 0 .../email-form/email-form.component.ts | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename src/app/{account/email-form/email-form.component.scss => password-reset/password-reset-page/password-reset-page.component.scss} (100%) rename src/app/{account => shared}/email-form/email-form.component.html (100%) rename src/app/{account => shared}/email-form/email-form.component.spec.ts (100%) rename src/app/{account => shared}/email-form/email-form.component.ts (100%) diff --git a/src/app/account/account.module.ts b/src/app/account/account.module.ts index 19e20a0..5810289 100644 --- a/src/app/account/account.module.ts +++ b/src/app/account/account.module.ts @@ -16,7 +16,7 @@ import {ClarityModule} from 'clarity-angular'; import {RouterModule} from '@angular/router'; import {ActivationLinkEffects} from './activation-link.effects'; import {SignUpProgressComponent} from './sign-up-progress/sign-up-progress.component'; -import {EmailFormComponent} from './email-form/email-form.component'; +import {SharedModule} from '../shared/shared.module'; @NgModule({ @@ -29,7 +29,8 @@ import {EmailFormComponent} from './email-form/email-form.component'; ActivationLinkEffects.Effects ]), ClarityModule.forChild(), - RouterModule + RouterModule, + SharedModule ], declarations: [ SignUpFormComponent, @@ -38,8 +39,7 @@ import {EmailFormComponent} from './email-form/email-form.component'; ActivationSuccessPageComponent, ActivationLinkRequestPageComponent, SignUpSuccessPageComponent, - SignUpProgressComponent, - EmailFormComponent + SignUpProgressComponent ], providers: [AccountService] }) diff --git a/src/app/account/email-form/email-form.component.scss b/src/app/password-reset/password-reset-page/password-reset-page.component.scss similarity index 100% rename from src/app/account/email-form/email-form.component.scss rename to src/app/password-reset/password-reset-page/password-reset-page.component.scss diff --git a/src/app/account/email-form/email-form.component.html b/src/app/shared/email-form/email-form.component.html similarity index 100% rename from src/app/account/email-form/email-form.component.html rename to src/app/shared/email-form/email-form.component.html diff --git a/src/app/account/email-form/email-form.component.spec.ts b/src/app/shared/email-form/email-form.component.spec.ts similarity index 100% rename from src/app/account/email-form/email-form.component.spec.ts rename to src/app/shared/email-form/email-form.component.spec.ts diff --git a/src/app/account/email-form/email-form.component.ts b/src/app/shared/email-form/email-form.component.ts similarity index 100% rename from src/app/account/email-form/email-form.component.ts rename to src/app/shared/email-form/email-form.component.ts From eae9b24ba64afd36b7c4d1b9dd18169bb3862f1b Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:42:55 -0600 Subject: [PATCH 68/88] feat(password-reset): add effect & register to module --- .../password-reset/password-reset.effects.ts | 46 +++++++++++++++++++ .../password-reset/password-reset.module.ts | 24 +++++++--- 2 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 src/app/password-reset/password-reset.effects.ts diff --git a/src/app/password-reset/password-reset.effects.ts b/src/app/password-reset/password-reset.effects.ts new file mode 100644 index 0000000..dbafbc9 --- /dev/null +++ b/src/app/password-reset/password-reset.effects.ts @@ -0,0 +1,46 @@ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {Action} from '@ngrx/store'; +import {RestApiService} from '../core/rest-api.service'; +import {AlertActions} from '../_actions/alert.actions'; +import {RequestError} from '../_domains/request-error'; +import {HttpStatus} from '../core/http-status.enum'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import * as PasswordResetActions from '../_effect-actions/password-reset.actions'; + +@Injectable() +export class PasswordResetEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(PasswordResetActions.REQUEST) + .map((action: PasswordResetActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.RESET_PASSWORD); + request.setBody(payload); + + return this._api.request(request) + .map(response => new PasswordResetActions.Success()) + .catch(error => Observable.of(new PasswordResetActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(PasswordResetActions.SUCCESS) + .map(() => new AlertActions.SetInfo('Password Reset')); + + @Effect() onError$: Observable = this.actions$ + .ofType(PasswordResetActions.ERROR) + .map((action: PasswordResetActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + case HttpStatus.UNAUTHORIZED: + return new AlertActions.SetError('Password Reset link invalid'); + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/password-reset/password-reset.module.ts b/src/app/password-reset/password-reset.module.ts index d086682..dde65b4 100644 --- a/src/app/password-reset/password-reset.module.ts +++ b/src/app/password-reset/password-reset.module.ts @@ -1,12 +1,24 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { PasswordResetService } from './password-reset.service'; +import {NgModule} from '@angular/core'; +import {CommonModule} from '@angular/common'; +import {PasswordResetService} from './password-reset.service'; +import {PasswordResetRequestPageComponent} from './password-reset-request-page/password-reset-request-page.component'; +import {PasswordResetPageComponent} from './password-reset-page/password-reset-page.component'; +import {SharedModule} from '../shared/shared.module'; +import {EffectsModule} from '@ngrx/effects'; +import {PasswordResetEffects} from './password-reset.effects'; +import {PasswordResetLinkEffects} from './password-reset-link.effects'; @NgModule({ imports: [ - CommonModule + CommonModule, + SharedModule, + EffectsModule.forFeature([ + PasswordResetEffects, + PasswordResetLinkEffects + ]) ], - declarations: [], + declarations: [PasswordResetRequestPageComponent, PasswordResetPageComponent], providers: [PasswordResetService] }) -export class PasswordResetModule { } +export class PasswordResetModule { +} From df140239282953067c5e623664bf7b0eec867424 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:43:12 -0600 Subject: [PATCH 69/88] feat(password-reset): add service & its specs --- .../password-reset.service.spec.ts | 59 +++++++++++++++++-- .../password-reset/password-reset.service.ts | 19 +++++- 2 files changed, 71 insertions(+), 7 deletions(-) diff --git a/src/app/password-reset/password-reset.service.spec.ts b/src/app/password-reset/password-reset.service.spec.ts index 98e359b..ca719f4 100644 --- a/src/app/password-reset/password-reset.service.spec.ts +++ b/src/app/password-reset/password-reset.service.spec.ts @@ -1,15 +1,66 @@ -import { TestBed, inject } from '@angular/core/testing'; +import {TestBed, inject} from '@angular/core/testing'; -import { PasswordResetService } from './password-reset.service'; +import {PasswordResetService} from './password-reset.service'; +import {RouterTestingModule} from '@angular/router/testing'; +import {ActivatedRoute} from '@angular/router'; +import {Store} from '@ngrx/store'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import * as PasswordResetLinkActions from '../_effect-actions/password-reset-link.actions'; +import * as PasswordResetActions from '../_effect-actions/password-reset.actions'; + +describe('PasswordResetService', () => { + const mockRoute = { + queryParams: Observable.of({token: 'testToken'}) + }; + const mockStore = { + dispatch: jasmine.createSpy('dispatch') + }; -xdescribe('PasswordResetService', () => { beforeEach(() => { TestBed.configureTestingModule({ - providers: [PasswordResetService] + imports: [ + RouterTestingModule + ], + providers: [ + {provide: ActivatedRoute, useValue: mockRoute}, + {provide: Store, useValue: mockStore}, + PasswordResetService + ] }); }); it('should be created', inject([PasswordResetService], (service: PasswordResetService) => { expect(service).toBeTruthy(); })); + + describe('method: requestPasswordResetLink', () => { + it('should dispatch password reset link action request with input', + inject([PasswordResetService], (service: PasswordResetService) => { + const form = { + email: 'test@email.com' + }; + + service.requestPasswordResetLink(form); + + expect(mockStore.dispatch).toHaveBeenCalledWith(new PasswordResetLinkActions.Request(form)); + }) + ); + }); + describe('method: resetPassword', () => { + it('should dispatch password reset action request with token and input password', + inject([PasswordResetService], (service: PasswordResetService) => { + const form = { + password: 'testPassword' + }; + + service.resetPassword(form); + + expect(mockStore.dispatch).toHaveBeenCalledWith(new PasswordResetActions.Request({ + token: 'testToken', + password: 'testPassword' + })); + }) + ); + }); }); diff --git a/src/app/password-reset/password-reset.service.ts b/src/app/password-reset/password-reset.service.ts index 74a46df..1306cbd 100644 --- a/src/app/password-reset/password-reset.service.ts +++ b/src/app/password-reset/password-reset.service.ts @@ -2,18 +2,31 @@ import {Injectable} from '@angular/core'; import {Store} from '@ngrx/store'; import {EmailForm} from '../_domains/email-form'; import {PasswordForm} from '../_domains/password-form'; +import {ActivatedRoute, Params} from '@angular/router'; +import * as PasswordResetLinkActions from '../_effect-actions/password-reset-link.actions'; +import * as PasswordResetActions from '../_effect-actions/password-reset.actions'; @Injectable() export class PasswordResetService { + private readonly RESET_PASSWORD_TOKEN_KEY = 'token'; + private _resetPasswordToken: string; - constructor(private _store: Store) { + constructor(private _store: Store, private _currentRoute: ActivatedRoute) { + this._currentRoute.queryParams.subscribe((params: Params) => { + this._resetPasswordToken = params[this.RESET_PASSWORD_TOKEN_KEY]; + }); } requestPasswordResetLink(form: EmailForm) { - // TODO: dispatch password reset link request action + + return this._store.dispatch(new PasswordResetLinkActions.Request(form)); } resetPassword(form: PasswordForm) { - // TODO: dispatch password reset request action + + return this._store.dispatch(new PasswordResetActions.Request({ + token: this._resetPasswordToken, + password: form.password + })); } } From 4cdeaa8181717df2ca47089197a1985a5f873d7f Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:43:34 -0600 Subject: [PATCH 70/88] refact(shared): register email form component and expose reactive forms module --- src/app/shared/shared.module.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts index f010c85..d04fd85 100644 --- a/src/app/shared/shared.module.ts +++ b/src/app/shared/shared.module.ts @@ -10,6 +10,7 @@ import {RouterModule} from '@angular/router'; import {PropertySummaryCardComponent} from './property-summary-card/property-summary-card.component'; import {WishlistCardComponent} from './wishlist-card/wishlist-card.component'; import {WishlistButtonComponent} from './wishlist-button/wishlist-button.component'; +import {EmailFormComponent} from './email-form/email-form.component'; @NgModule({ imports: [ @@ -25,14 +26,17 @@ import {WishlistButtonComponent} from './wishlist-button/wishlist-button.compone PropertySummaryCardComponent, SignInFormComponent, WishlistCardComponent, - WishlistButtonComponent + WishlistButtonComponent, + EmailFormComponent ], exports: [ HeaderComponent, FooterComponent, PropertySummaryCardComponent, WishlistCardComponent, - WishlistButtonComponent + WishlistButtonComponent, + EmailFormComponent, + ReactiveFormsModule ] }) export class SharedModule { From b9dc5f6739bd7c4cec3521dc2445d7997fc527e7 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 14:43:45 -0600 Subject: [PATCH 71/88] feat(password-reset): add UI pages --- .../password-reset-page.component.html | 30 ++++++++++ .../password-reset-page.component.spec.ts | 50 +++++++++++++++++ .../password-reset-page.component.ts | 27 +++++++++ ...password-reset-request-page.component.html | 9 +++ ...password-reset-request-page.component.scss | 0 ...sword-reset-request-page.component.spec.ts | 55 +++++++++++++++++++ .../password-reset-request-page.component.ts | 21 +++++++ 7 files changed, 192 insertions(+) create mode 100644 src/app/password-reset/password-reset-page/password-reset-page.component.html create mode 100644 src/app/password-reset/password-reset-page/password-reset-page.component.spec.ts create mode 100644 src/app/password-reset/password-reset-page/password-reset-page.component.ts create mode 100644 src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html create mode 100644 src/app/password-reset/password-reset-request-page/password-reset-request-page.component.scss create mode 100644 src/app/password-reset/password-reset-request-page/password-reset-request-page.component.spec.ts create mode 100644 src/app/password-reset/password-reset-request-page/password-reset-request-page.component.ts diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.html b/src/app/password-reset/password-reset-page/password-reset-page.component.html new file mode 100644 index 0000000..90b659f --- /dev/null +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.html @@ -0,0 +1,30 @@ + +
+

Reset your password

+

Please enter your e-mail and submit to receive a new activation link

+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.spec.ts b/src/app/password-reset/password-reset-page/password-reset-page.component.spec.ts new file mode 100644 index 0000000..040a33d --- /dev/null +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.spec.ts @@ -0,0 +1,50 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {PasswordResetPageComponent} from './password-reset-page.component'; +import {ReactiveFormsModule} from '@angular/forms'; +import {RouterTestingModule} from '@angular/router/testing'; +import {PasswordResetService} from '../password-reset.service'; + +describe('PasswordResetPageComponent', () => { + let component: PasswordResetPageComponent; + let fixture: ComponentFixture; + + const mockService = { + resetPassword: jasmine.createSpy('resetPassword') + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + ReactiveFormsModule, + RouterTestingModule + ], + providers: [ + {provide: PasswordResetService, useValue: mockService} + ], + declarations: [PasswordResetPageComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordResetPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('method: onSubmit', () => { + it('should call resetPassword method with input', () => { + component.passwordResetForm.controls.password.setValue('test'); + component.onSubmit(component.passwordResetForm); + + expect(mockService.resetPassword).toHaveBeenCalledWith({ + password: 'test' + }); + }); + }); +}); diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.ts b/src/app/password-reset/password-reset-page/password-reset-page.component.ts new file mode 100644 index 0000000..0f5321d --- /dev/null +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.ts @@ -0,0 +1,27 @@ +import {Component, OnInit} from '@angular/core'; +import {PasswordResetService} from '../password-reset.service'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; + +@Component({ + selector: 'app-password-reset-page', + templateUrl: './password-reset-page.component.html', + styleUrls: ['./password-reset-page.component.scss'] +}) +export class PasswordResetPageComponent implements OnInit { + passwordResetForm: FormGroup; + + constructor(private _service: PasswordResetService, private _fb: FormBuilder) { + this.passwordResetForm = this._fb.group({ + password: ['', Validators.required] + }); + } + + ngOnInit() { + } + + onSubmit({value, valid}) { + if (valid) { + this._service.resetPassword(value); + } + } +} diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html new file mode 100644 index 0000000..2f59950 --- /dev/null +++ b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html @@ -0,0 +1,9 @@ + +
+

Reset your password

+

Please enter your e-mail and submit to receive a new activation link

+ +
diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.scss b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.spec.ts b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.spec.ts new file mode 100644 index 0000000..8b23f13 --- /dev/null +++ b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.spec.ts @@ -0,0 +1,55 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {PasswordResetRequestPageComponent} from './password-reset-request-page.component'; +import {EmailFormComponent} from '../../shared/email-form/email-form.component'; +import {ReactiveFormsModule} from '@angular/forms'; +import {RouterTestingModule} from '@angular/router/testing'; +import {PasswordResetService} from '../password-reset.service'; + +describe('PasswordResetRequestPageComponent', () => { + let component: PasswordResetRequestPageComponent; + let fixture: ComponentFixture; + + const mockService = { + requestPasswordResetLink: jasmine.createSpy('requestPasswordResetLink') + }; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + ReactiveFormsModule, + RouterTestingModule + ], + providers: [ + {provide: PasswordResetService, useValue: mockService} + ], + declarations: [ + PasswordResetRequestPageComponent, + EmailFormComponent + ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordResetRequestPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + describe('method: onSubmit', () => { + it('should call requestPasswordResetLink method with input', () => { + const testForm = { + email: 'test@email.com' + }; + + component.onSubmit(testForm); + + expect(mockService.requestPasswordResetLink).toHaveBeenCalledWith(testForm); + }); + }); +}); diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.ts b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.ts new file mode 100644 index 0000000..199e38a --- /dev/null +++ b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.ts @@ -0,0 +1,21 @@ +import {Component, HostBinding, OnInit} from '@angular/core'; +import {PasswordResetService} from '../password-reset.service'; + +@Component({ + selector: 'app-password-reset-request-page', + templateUrl: './password-reset-request-page.component.html', + styleUrls: ['./password-reset-request-page.component.scss'] +}) +export class PasswordResetRequestPageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; + + constructor(private _service: PasswordResetService) { + } + + ngOnInit() { + } + + onSubmit(form) { + this._service.requestPasswordResetLink(form); + } +} From 8160df765d84ef3dd6e24fb1ec5b2d0cd539c3fc Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:38:55 -0600 Subject: [PATCH 72/88] feat(domain): add type decl for password and user info change forms --- src/app/_domains/change-password-form.ts | 4 ++++ src/app/_domains/edit-user-info-form.ts | 7 +++++++ 2 files changed, 11 insertions(+) create mode 100644 src/app/_domains/change-password-form.ts create mode 100644 src/app/_domains/edit-user-info-form.ts diff --git a/src/app/_domains/change-password-form.ts b/src/app/_domains/change-password-form.ts new file mode 100644 index 0000000..1e6d4eb --- /dev/null +++ b/src/app/_domains/change-password-form.ts @@ -0,0 +1,4 @@ +export interface ChangePasswordForm { + password: string; + new_password: string; +} diff --git a/src/app/_domains/edit-user-info-form.ts b/src/app/_domains/edit-user-info-form.ts new file mode 100644 index 0000000..cef658d --- /dev/null +++ b/src/app/_domains/edit-user-info-form.ts @@ -0,0 +1,7 @@ +import {NotificationSettings} from './notification-settings'; + +export interface EditUserInfoForm { + phone: number; + notification: NotificationSettings; + password: string; +} From f465e8294ac4e706196d7291f7d71467bafe8709 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:39:21 -0600 Subject: [PATCH 73/88] feat(personal-info): add button links to change password and edit user info --- src/app/user/personal-info/personal-info.component.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/user/personal-info/personal-info.component.html b/src/app/user/personal-info/personal-info.component.html index 8148baa..ac6673a 100644 --- a/src/app/user/personal-info/personal-info.component.html +++ b/src/app/user/personal-info/personal-info.component.html @@ -1,3 +1,5 @@
E-mail: {{email}}
Phone: {{phone}}
Receive E-mail Notifications + + From 11dfa5a4027f913c29ec96df00ee2062ff1c2824 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:40:12 -0600 Subject: [PATCH 74/88] feat(password-change): add page object --- .../password-change-page.component.html | 3 +++ .../password-change-page.component.scss | 0 .../password-change-page.component.spec.ts | 25 +++++++++++++++++++ .../password-change-page.component.ts | 15 +++++++++++ src/app/user/user.module.ts | 4 ++- 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/app/user/password-change-page/password-change-page.component.html create mode 100644 src/app/user/password-change-page/password-change-page.component.scss create mode 100644 src/app/user/password-change-page/password-change-page.component.spec.ts create mode 100644 src/app/user/password-change-page/password-change-page.component.ts diff --git a/src/app/user/password-change-page/password-change-page.component.html b/src/app/user/password-change-page/password-change-page.component.html new file mode 100644 index 0000000..8223296 --- /dev/null +++ b/src/app/user/password-change-page/password-change-page.component.html @@ -0,0 +1,3 @@ +

+ password-change-page works! +

diff --git a/src/app/user/password-change-page/password-change-page.component.scss b/src/app/user/password-change-page/password-change-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/user/password-change-page/password-change-page.component.spec.ts b/src/app/user/password-change-page/password-change-page.component.spec.ts new file mode 100644 index 0000000..7f5a795 --- /dev/null +++ b/src/app/user/password-change-page/password-change-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PasswordChangePageComponent } from './password-change-page.component'; + +describe('PasswordChangePageComponent', () => { + let component: PasswordChangePageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ PasswordChangePageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(PasswordChangePageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/user/password-change-page/password-change-page.component.ts b/src/app/user/password-change-page/password-change-page.component.ts new file mode 100644 index 0000000..967f655 --- /dev/null +++ b/src/app/user/password-change-page/password-change-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-password-change-page', + templateUrl: './password-change-page.component.html', + styleUrls: ['./password-change-page.component.scss'] +}) +export class PasswordChangePageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index 793d47f..bc7d7c8 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -20,6 +20,7 @@ import {SharedModule} from '../shared/shared.module'; import {MyWishlistComponent} from './my-wishlist/my-wishlist.component'; import {WishlistAddEffects} from './wishlist-add.effects'; import {WishlistRemoveEffects} from './wishlist-remove.effects'; +import { PasswordChangePageComponent } from './password-change-page/password-change-page.component'; @NgModule({ imports: [ @@ -42,7 +43,8 @@ import {WishlistRemoveEffects} from './wishlist-remove.effects'; SubscriptionListComponent, MyPropertiesCardComponent, MyPropertiesListComponent, - MyWishlistComponent + MyWishlistComponent, + PasswordChangePageComponent ], providers: [ UserInfoService, AccessService, WishlistService, MyPropertiesService From f6f5360bcb7873ccc395aa1ec2b3cdc72c0e404e Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:40:37 -0600 Subject: [PATCH 75/88] feat(user-info-edit): add page component --- .../user-info-edit-page.component.html | 3 +++ .../user-info-edit-page.component.scss | 0 .../user-info-edit-page.component.spec.ts | 25 +++++++++++++++++++ .../user-info-edit-page.component.ts | 15 +++++++++++ src/app/user/user.module.ts | 4 ++- 5 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 src/app/user/user-info-edit-page/user-info-edit-page.component.html create mode 100644 src/app/user/user-info-edit-page/user-info-edit-page.component.scss create mode 100644 src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts create mode 100644 src/app/user/user-info-edit-page/user-info-edit-page.component.ts diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.html b/src/app/user/user-info-edit-page/user-info-edit-page.component.html new file mode 100644 index 0000000..5e48e93 --- /dev/null +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.html @@ -0,0 +1,3 @@ +

+ user-info-edit-page works! +

diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.scss b/src/app/user/user-info-edit-page/user-info-edit-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts b/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts new file mode 100644 index 0000000..42c24cd --- /dev/null +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserInfoEditPageComponent } from './user-info-edit-page.component'; + +describe('UserInfoEditPageComponent', () => { + let component: UserInfoEditPageComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UserInfoEditPageComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserInfoEditPageComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.ts b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts new file mode 100644 index 0000000..590cfd6 --- /dev/null +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-user-info-edit-page', + templateUrl: './user-info-edit-page.component.html', + styleUrls: ['./user-info-edit-page.component.scss'] +}) +export class UserInfoEditPageComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index bc7d7c8..befaaa0 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -21,6 +21,7 @@ import {MyWishlistComponent} from './my-wishlist/my-wishlist.component'; import {WishlistAddEffects} from './wishlist-add.effects'; import {WishlistRemoveEffects} from './wishlist-remove.effects'; import { PasswordChangePageComponent } from './password-change-page/password-change-page.component'; +import { UserInfoEditPageComponent } from './user-info-edit-page/user-info-edit-page.component'; @NgModule({ imports: [ @@ -44,7 +45,8 @@ import { PasswordChangePageComponent } from './password-change-page/password-cha MyPropertiesCardComponent, MyPropertiesListComponent, MyWishlistComponent, - PasswordChangePageComponent + PasswordChangePageComponent, + UserInfoEditPageComponent ], providers: [ UserInfoService, AccessService, WishlistService, MyPropertiesService From bae8a1a031c1154e5373997fbcfed5f6a3c6e422 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:42:55 -0600 Subject: [PATCH 76/88] feat(routes): add routes --- src/app/app.routing.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 31cffb5..24036de 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -15,6 +15,10 @@ import {AuthGuard} from './auth/auth.guard'; import {VisitorGuard} from './auth/visitor.guard'; import {PropertyListPageComponent} from './properties/property-list-page/property-list-page.component'; import {PropertyPageComponent} from './properties/property-page/property-page.component'; +import {PasswordResetRequestPageComponent} from './password-reset/password-reset-request-page/password-reset-request-page.component'; +import {PasswordResetPageComponent} from './password-reset/password-reset-page/password-reset-page.component'; +import {UserInfoEditPageComponent} from './user/user-info-edit-page/user-info-edit-page.component'; +import {PasswordChangePageComponent} from './user/password-change-page/password-change-page.component'; const routes: Routes = [ {path: '', pathMatch: 'full', redirectTo: 'welcome'}, @@ -26,11 +30,15 @@ const routes: Routes = [ {path: 'account/reactivate', component: ActivationLinkRequestPageComponent, canActivate: [VisitorGuard]}, {path: 'account/deactivate', component: DeactivateAccountComponent, canActivate: [AuthGuard]}, {path: 'account/info', component: AccountInfoPageComponent, canActivate: [AuthGuard]}, + {path: 'account/info/edit', component: UserInfoEditPageComponent, canActivate: [AuthGuard]}, + {path: 'account/password', component: PasswordChangePageComponent, canActivate: [AuthGuard]}, {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, {path: 'properties', component: PropertyListPageComponent}, - {path: 'properties/:id', component: PropertyPageComponent} + {path: 'properties/:id', component: PropertyPageComponent}, + {path: 'reset-password/request-link', component: PasswordResetRequestPageComponent, canActivate: [VisitorGuard]}, + {path: 'reset-password/form', component: PasswordResetPageComponent, canActivate: [VisitorGuard]}, ]; @NgModule({ From c8efc084b5d9aea3b5558d910c2a3627a3a9b823 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:58:53 -0600 Subject: [PATCH 77/88] fix(route): change uri for change password --- src/app/app.routing.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 24036de..99f134a 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -31,7 +31,7 @@ const routes: Routes = [ {path: 'account/deactivate', component: DeactivateAccountComponent, canActivate: [AuthGuard]}, {path: 'account/info', component: AccountInfoPageComponent, canActivate: [AuthGuard]}, {path: 'account/info/edit', component: UserInfoEditPageComponent, canActivate: [AuthGuard]}, - {path: 'account/password', component: PasswordChangePageComponent, canActivate: [AuthGuard]}, + {path: 'account/info/change-password', component: PasswordChangePageComponent, canActivate: [AuthGuard]}, {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, From 97984974ec4707b2ac78bd65470933a928d78827 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 15:59:05 -0600 Subject: [PATCH 78/88] fix(app): add missing module --- src/app/app.module.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c0c6d5b..3e19285 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -25,6 +25,7 @@ import {EffectsModule} from '@ngrx/effects'; import {UserModule} from './user/user.module'; import {PropertiesModule} from './properties/properties.module'; import {AccessPurchaseModule} from './access-purchase/access-purchase.module'; +import {PasswordResetModule} from './password-reset/password-reset.module'; @NgModule({ declarations: [ @@ -57,6 +58,7 @@ import {AccessPurchaseModule} from './access-purchase/access-purchase.module'; UserModule, PropertiesModule, AccessPurchaseModule, + PasswordResetModule, ClarityModule.forRoot(), ], bootstrap: [AppComponent] From acb8e0931868848b4f351d5d92ad3c18a909005f Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 16:03:16 -0600 Subject: [PATCH 79/88] feat(password-change): add UI --- .../password-change-page.component.html | 49 +++++++++++++++++-- .../password-change-page.component.spec.ts | 12 +++-- .../password-change-page.component.ts | 28 ++++++++++- 3 files changed, 80 insertions(+), 9 deletions(-) diff --git a/src/app/user/password-change-page/password-change-page.component.html b/src/app/user/password-change-page/password-change-page.component.html index 8223296..7b003b2 100644 --- a/src/app/user/password-change-page/password-change-page.component.html +++ b/src/app/user/password-change-page/password-change-page.component.html @@ -1,3 +1,46 @@ -

- password-change-page works! -

+
+

Step 1: Change Password

+
+ + +
+

Enter Your New Password

+

Please enter your old/new passwords

+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
diff --git a/src/app/user/password-change-page/password-change-page.component.spec.ts b/src/app/user/password-change-page/password-change-page.component.spec.ts index 7f5a795..dc87574 100644 --- a/src/app/user/password-change-page/password-change-page.component.spec.ts +++ b/src/app/user/password-change-page/password-change-page.component.spec.ts @@ -1,6 +1,7 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { PasswordChangePageComponent } from './password-change-page.component'; +import {PasswordChangePageComponent} from './password-change-page.component'; +import {ReactiveFormsModule} from '@angular/forms'; describe('PasswordChangePageComponent', () => { let component: PasswordChangePageComponent; @@ -8,9 +9,12 @@ describe('PasswordChangePageComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ PasswordChangePageComponent ] + imports: [ + ReactiveFormsModule + ], + declarations: [PasswordChangePageComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/user/password-change-page/password-change-page.component.ts b/src/app/user/password-change-page/password-change-page.component.ts index 967f655..5d06b45 100644 --- a/src/app/user/password-change-page/password-change-page.component.ts +++ b/src/app/user/password-change-page/password-change-page.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, HostBinding, OnInit} from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; @Component({ selector: 'app-password-change-page', @@ -6,10 +7,33 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./password-change-page.component.scss'] }) export class PasswordChangePageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; - constructor() { } + passwordChangeForm: FormGroup; + + constructor(private _fb: FormBuilder) { + this.passwordChangeForm = this._fb.group({ + password: ['', Validators.compose([ + Validators.required, + Validators.pattern(/[a-zA-Z0-9!@#\$%\^&.]{8,32}/), + Validators.pattern(/.*[A-Za-z]+.*/), + Validators.pattern(/.*[0-9]+.*/) + ])], + new_password: ['', Validators.compose([ + Validators.required, + Validators.pattern(/[a-zA-Z0-9!@#\$%\^&.]{8,32}/), + Validators.pattern(/.*[A-Za-z]+.*/), + Validators.pattern(/.*[0-9]+.*/) + ])] + }); + } ngOnInit() { } + onSubmit({value, valid}) { + if (valid) { + console.log(value); + } + } } From db6dd1fe5cfc2825a7333705885894daaacc78df Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 16:22:12 -0600 Subject: [PATCH 80/88] feat(user-info-edit): add UI & form validations --- .../password-change-page.component.html | 28 ++++++- .../password-change-page.component.ts | 5 +- .../personal-info.component.html | 4 +- .../user-info-edit-page.component.html | 82 ++++++++++++++++++- .../user-info-edit-page.component.ts | 34 +++++++- src/app/user/user-info.service.ts | 2 +- 6 files changed, 139 insertions(+), 16 deletions(-) diff --git a/src/app/user/password-change-page/password-change-page.component.html b/src/app/user/password-change-page/password-change-page.component.html index 7b003b2..271fc7e 100644 --- a/src/app/user/password-change-page/password-change-page.component.html +++ b/src/app/user/password-change-page/password-change-page.component.html @@ -13,8 +13,18 @@

Enter Your New Password

- +
@@ -24,8 +34,18 @@

Enter Your New Password

- + +
diff --git a/src/app/user/password-change-page/password-change-page.component.ts b/src/app/user/password-change-page/password-change-page.component.ts index 5d06b45..ea1b23a 100644 --- a/src/app/user/password-change-page/password-change-page.component.ts +++ b/src/app/user/password-change-page/password-change-page.component.ts @@ -14,10 +14,7 @@ export class PasswordChangePageComponent implements OnInit { constructor(private _fb: FormBuilder) { this.passwordChangeForm = this._fb.group({ password: ['', Validators.compose([ - Validators.required, - Validators.pattern(/[a-zA-Z0-9!@#\$%\^&.]{8,32}/), - Validators.pattern(/.*[A-Za-z]+.*/), - Validators.pattern(/.*[0-9]+.*/) + Validators.required ])], new_password: ['', Validators.compose([ Validators.required, diff --git a/src/app/user/personal-info/personal-info.component.html b/src/app/user/personal-info/personal-info.component.html index ac6673a..c6d88f8 100644 --- a/src/app/user/personal-info/personal-info.component.html +++ b/src/app/user/personal-info/personal-info.component.html @@ -1,5 +1,5 @@
E-mail: {{email}}
Phone: {{phone}}
Receive E-mail Notifications - - + + diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.html b/src/app/user/user-info-edit-page/user-info-edit-page.component.html index 5e48e93..cc4dd03 100644 --- a/src/app/user/user-info-edit-page/user-info-edit-page.component.html +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.html @@ -1,3 +1,79 @@ -

- user-info-edit-page works! -

+
+

Step 1: Edit Info

+
+ + +
+

Update Your User Info

+

Please update your new information here

+
+
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+ + +
+
+
+
+
+
+ +
+
+
+ + +
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.ts b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts index 590cfd6..6c96df3 100644 --- a/src/app/user/user-info-edit-page/user-info-edit-page.component.ts +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts @@ -1,4 +1,6 @@ -import { Component, OnInit } from '@angular/core'; +import {Component, HostBinding, OnInit} from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {UserInfoService} from '../user-info.service'; @Component({ selector: 'app-user-info-edit-page', @@ -6,10 +8,38 @@ import { Component, OnInit } from '@angular/core'; styleUrls: ['./user-info-edit-page.component.scss'] }) export class UserInfoEditPageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; - constructor() { } + userInfoEditForm: FormGroup; + + constructor(private _service: UserInfoService, private _fb: FormBuilder) { + this._service.userInfo$.subscribe((userInfo) => { + this.userInfoEditForm = this._fb.group({ + password: ['', Validators.compose([ + Validators.required + ])], + phone: [userInfo.phone, Validators.compose([ + Validators.required, + Validators.pattern(/[0-9]{10}/) + ])], + notification: [userInfo.notification, Validators.required] + }); + }); + + } ngOnInit() { } + onSubmit({value, valid}) { + if (valid) { + console.log({ + password: value.password, + phone: value.phone, + notification: { + marketing: value.notification + } + }); + } + } } diff --git a/src/app/user/user-info.service.ts b/src/app/user/user-info.service.ts index 7fe8a15..842d052 100644 --- a/src/app/user/user-info.service.ts +++ b/src/app/user/user-info.service.ts @@ -12,7 +12,7 @@ export class UserInfoService { private _auth: Auth; constructor(private _store: Store) { - this.userInfo$ = this._store.select('accesses'); + this.userInfo$ = this._store.select('userInfo'); this.auth$ = this._store.select('auth'); this.auth$.subscribe((auth) => { this._auth = auth; From 92fae07e8c92170d799763042250a866b1404487 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 16:25:56 -0600 Subject: [PATCH 81/88] feat(user-info): wire components with service --- src/app/_domains/edit-user-info-form.ts | 2 +- .../password-change-page.component.ts | 5 +++-- .../user-info-edit-page.component.ts | 2 +- src/app/user/user-info.service.ts | 10 ++++++++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/app/_domains/edit-user-info-form.ts b/src/app/_domains/edit-user-info-form.ts index cef658d..a294124 100644 --- a/src/app/_domains/edit-user-info-form.ts +++ b/src/app/_domains/edit-user-info-form.ts @@ -1,7 +1,7 @@ import {NotificationSettings} from './notification-settings'; export interface EditUserInfoForm { - phone: number; + phone: string; notification: NotificationSettings; password: string; } diff --git a/src/app/user/password-change-page/password-change-page.component.ts b/src/app/user/password-change-page/password-change-page.component.ts index ea1b23a..d7716fb 100644 --- a/src/app/user/password-change-page/password-change-page.component.ts +++ b/src/app/user/password-change-page/password-change-page.component.ts @@ -1,5 +1,6 @@ import {Component, HostBinding, OnInit} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {UserInfoService} from '../user-info.service'; @Component({ selector: 'app-password-change-page', @@ -11,7 +12,7 @@ export class PasswordChangePageComponent implements OnInit { passwordChangeForm: FormGroup; - constructor(private _fb: FormBuilder) { + constructor(private _service: UserInfoService, private _fb: FormBuilder) { this.passwordChangeForm = this._fb.group({ password: ['', Validators.compose([ Validators.required @@ -30,7 +31,7 @@ export class PasswordChangePageComponent implements OnInit { onSubmit({value, valid}) { if (valid) { - console.log(value); + this._service.changePassword(value); } } } diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.ts b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts index 6c96df3..c34bf8a 100644 --- a/src/app/user/user-info-edit-page/user-info-edit-page.component.ts +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.ts @@ -33,7 +33,7 @@ export class UserInfoEditPageComponent implements OnInit { onSubmit({value, valid}) { if (valid) { - console.log({ + this._service.update({ password: value.password, phone: value.phone, notification: { diff --git a/src/app/user/user-info.service.ts b/src/app/user/user-info.service.ts index 842d052..ebed097 100644 --- a/src/app/user/user-info.service.ts +++ b/src/app/user/user-info.service.ts @@ -4,6 +4,8 @@ import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; import {Auth} from '../_domains/auth'; import * as UserInfoGetActions from '../_effect-actions/user-info-get.actions'; +import {EditUserInfoForm} from '../_domains/edit-user-info-form'; +import {ChangePasswordForm} from '../_domains/change-password-form'; @Injectable() export class UserInfoService { @@ -23,7 +25,11 @@ export class UserInfoService { this._store.dispatch(new UserInfoGetActions.Request(this._auth.id)); } - update(form: UserInfo) { - // TODO: dispatch User Info Update Request action + update(form: EditUserInfoForm) { + console.log(form); + } + + changePassword(form: ChangePasswordForm) { + console.log(form); } } From 92d66c34f9763691b782cdcde47a15b16ee88c21 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Sun, 26 Nov 2017 17:13:47 -0600 Subject: [PATCH 82/88] feat(user-info): add apis & specs --- .../password-change.actions.ts | 29 ++++++++++ .../user-info-update.actions.ts | 25 +++++++++ src/app/core/api-endpoints.constant.ts | 2 +- .../password-change-page.component.spec.ts | 17 ++++++ src/app/user/password-change.effects.ts | 53 +++++++++++++++++++ .../user-info-edit-page.component.spec.ts | 28 ++++++++-- src/app/user/user-info-update.effects.ts | 37 +++++++++++++ src/app/user/user-info.service.ts | 8 ++- src/app/user/user.module.ts | 10 ++-- 9 files changed, 199 insertions(+), 10 deletions(-) create mode 100644 src/app/_effect-actions/password-change.actions.ts create mode 100644 src/app/_effect-actions/user-info-update.actions.ts create mode 100644 src/app/user/password-change.effects.ts create mode 100644 src/app/user/user-info-update.effects.ts diff --git a/src/app/_effect-actions/password-change.actions.ts b/src/app/_effect-actions/password-change.actions.ts new file mode 100644 index 0000000..481b1fe --- /dev/null +++ b/src/app/_effect-actions/password-change.actions.ts @@ -0,0 +1,29 @@ +import {RequestError} from '../_domains/request-error'; +import {Action} from '@ngrx/store'; +import {ChangePasswordForm} from '../_domains/change-password-form'; +import {AuthResponse} from '../_domains/auth-response'; + +export const REQUEST = 'PasswordChangeActions.REQUEST'; +export const SUCCESS = 'PasswordChangeActions.SUCCESS'; +export const ERROR = 'PasswordChangeActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: ChangePasswordForm, public userId) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; + + constructor(public payload: AuthResponse) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/_effect-actions/user-info-update.actions.ts b/src/app/_effect-actions/user-info-update.actions.ts new file mode 100644 index 0000000..cf6f67b --- /dev/null +++ b/src/app/_effect-actions/user-info-update.actions.ts @@ -0,0 +1,25 @@ +import {RequestError} from '../_domains/request-error'; +import {Action} from '@ngrx/store'; +import {EditUserInfoForm} from '../_domains/edit-user-info-form'; + +export const REQUEST = 'UserInfoUpdateActions.REQUEST'; +export const SUCCESS = 'UserInfoUpdateActions.SUCCESS'; +export const ERROR = 'UserInfoUpdateActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: EditUserInfoForm, public userId) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index db0f619..834e677 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -64,7 +64,7 @@ export const API = { method: 'POST', url: '/users/${userId}/check-password' }, - UPDATE_PASSWORD: { + CHANGE_PASSWORD: { method: 'PUT', url: '/users/${userId}/password' }, diff --git a/src/app/user/password-change-page/password-change-page.component.spec.ts b/src/app/user/password-change-page/password-change-page.component.spec.ts index dc87574..9b24b8e 100644 --- a/src/app/user/password-change-page/password-change-page.component.spec.ts +++ b/src/app/user/password-change-page/password-change-page.component.spec.ts @@ -2,16 +2,33 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {PasswordChangePageComponent} from './password-change-page.component'; import {ReactiveFormsModule} from '@angular/forms'; +import {RouterTestingModule} from '@angular/router/testing'; +import {UserInfoService} from '../user-info.service'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; describe('PasswordChangePageComponent', () => { let component: PasswordChangePageComponent; let fixture: ComponentFixture; + const mockService = { + userInfo$: Observable.of({ + phone: '12312341234', + notification: true + }), + update: jasmine.createSpy('update'), + changePassword: jasmine.createSpy('changePassword') + }; + beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ + RouterTestingModule, ReactiveFormsModule ], + providers: [ + {provide: UserInfoService, useValue: mockService} + ], declarations: [PasswordChangePageComponent] }) .compileComponents(); diff --git a/src/app/user/password-change.effects.ts b/src/app/user/password-change.effects.ts new file mode 100644 index 0000000..0a97f59 --- /dev/null +++ b/src/app/user/password-change.effects.ts @@ -0,0 +1,53 @@ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {Action} from '@ngrx/store'; +import {RestApiService} from '../core/rest-api.service'; +import {AlertActions} from '../_actions/alert.actions'; +import {RequestError} from '../_domains/request-error'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import * as PasswordChangeActions from '../_effect-actions/password-change.actions'; +import * as AuthActions from '../_actions/auth.actions'; +import * as WishlistActions from '../_actions/wishlist.actions'; +import {AuthResponse} from '../_domains/auth-response'; +import {Wishlist} from '../_domains/wishlist'; +import {Auth} from '../_domains/auth'; + +@Injectable() +export class PasswordChangeEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(PasswordChangeActions.REQUEST) + .switchMap((action: PasswordChangeActions.Request) => { + const request = new RestApiRequest(API.USER.CHANGE_PASSWORD); + request.setPathParams({userId: action.userId}); + request.setBody(action.payload); + + return this._api.request(request) + .map(response => new PasswordChangeActions.Success(response)) + .catch(error => Observable.of(new PasswordChangeActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(PasswordChangeActions.SUCCESS) + .map((action: PasswordChangeActions.Success) => action.payload) + .mergeMap((payload: AuthResponse) => [ + new AuthActions.Set(new Auth(payload.token, payload.user.email, payload.user.id)), + new WishlistActions.Set(new Wishlist(payload.user.wishlist)), + new AlertActions.SetInfo('Password Changed') + ]); + + @Effect() onError$: Observable = this.actions$ + .ofType(PasswordChangeActions.ERROR) + .map((action: PasswordChangeActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts b/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts index 42c24cd..bae0dff 100644 --- a/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts +++ b/src/app/user/user-info-edit-page/user-info-edit-page.component.spec.ts @@ -1,16 +1,36 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; -import { UserInfoEditPageComponent } from './user-info-edit-page.component'; +import {UserInfoEditPageComponent} from './user-info-edit-page.component'; +import {ReactiveFormsModule} from '@angular/forms'; +import {UserInfoService} from '../user-info.service'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import {RouterTestingModule} from '@angular/router/testing'; describe('UserInfoEditPageComponent', () => { let component: UserInfoEditPageComponent; let fixture: ComponentFixture; + const mockService = { + userInfo$: Observable.of({ + phone: '12312341234', + notification: true + }), + update: jasmine.createSpy('update') + }; + beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ UserInfoEditPageComponent ] + imports: [ + RouterTestingModule, + ReactiveFormsModule + ], + providers: [ + {provide: UserInfoService, useValue: mockService} + ], + declarations: [UserInfoEditPageComponent] }) - .compileComponents(); + .compileComponents(); })); beforeEach(() => { diff --git a/src/app/user/user-info-update.effects.ts b/src/app/user/user-info-update.effects.ts new file mode 100644 index 0000000..b605d55 --- /dev/null +++ b/src/app/user/user-info-update.effects.ts @@ -0,0 +1,37 @@ +import {Injectable} from '@angular/core'; +import {Observable} from 'rxjs/Observable'; +import {Actions, Effect} from '@ngrx/effects'; +import {Action} from '@ngrx/store'; +import {RestApiService} from '../core/rest-api.service'; +import {AlertActions} from '../_actions/alert.actions'; +import {RequestError} from '../_domains/request-error'; +import {API} from '../core/api-endpoints.constant'; +import {RestApiRequest} from '../core/rest-api-request'; +import * as UserInfoUpdateActions from '../_effect-actions/user-info-update.actions'; + +@Injectable() +export class UserInfoUpdateEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(UserInfoUpdateActions.REQUEST) + .switchMap((action: UserInfoUpdateActions.Request) => { + const request = new RestApiRequest(API.USER.UPDATE_ACCOUNT_INFO); + request.setPathParams({userId: action.userId}); + request.setBody(action.payload); + + return this._api.request(request) + .map(response => new UserInfoUpdateActions.Success()) + .catch(error => Observable.of(new UserInfoUpdateActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(UserInfoUpdateActions.SUCCESS) + .map(() => new AlertActions.SetInfo('User Info Updated')); + + @Effect() onError$: Observable = this.actions$ + .ofType(UserInfoUpdateActions.ERROR) + .map((action: UserInfoUpdateActions.Error) => action.payload) + .map((error: RequestError) => new AlertActions.SetError('Unknown Error')); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/user/user-info.service.ts b/src/app/user/user-info.service.ts index ebed097..ae33ef0 100644 --- a/src/app/user/user-info.service.ts +++ b/src/app/user/user-info.service.ts @@ -4,6 +4,8 @@ import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; import {Auth} from '../_domains/auth'; import * as UserInfoGetActions from '../_effect-actions/user-info-get.actions'; +import * as UserInfoUpdateActions from '../_effect-actions/user-info-update.actions'; +import * as PasswordChangeActions from '../_effect-actions/password-change.actions'; import {EditUserInfoForm} from '../_domains/edit-user-info-form'; import {ChangePasswordForm} from '../_domains/change-password-form'; @@ -26,10 +28,12 @@ export class UserInfoService { } update(form: EditUserInfoForm) { - console.log(form); + + this._store.dispatch(new UserInfoUpdateActions.Request(form, this._auth.id)); } changePassword(form: ChangePasswordForm) { - console.log(form); + + this._store.dispatch(new PasswordChangeActions.Request(form, this._auth.id)); } } diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index befaaa0..fd64ec9 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -20,8 +20,10 @@ import {SharedModule} from '../shared/shared.module'; import {MyWishlistComponent} from './my-wishlist/my-wishlist.component'; import {WishlistAddEffects} from './wishlist-add.effects'; import {WishlistRemoveEffects} from './wishlist-remove.effects'; -import { PasswordChangePageComponent } from './password-change-page/password-change-page.component'; -import { UserInfoEditPageComponent } from './user-info-edit-page/user-info-edit-page.component'; +import {PasswordChangePageComponent} from './password-change-page/password-change-page.component'; +import {UserInfoEditPageComponent} from './user-info-edit-page/user-info-edit-page.component'; +import {PasswordChangeEffects} from './password-change.effects'; +import {UserInfoUpdateEffects} from './user-info-update.effects'; @NgModule({ imports: [ @@ -33,7 +35,9 @@ import { UserInfoEditPageComponent } from './user-info-edit-page/user-info-edit- DeactivateEffects.Effects, UserInfoGetEffects, WishlistAddEffects, - WishlistRemoveEffects + WishlistRemoveEffects, + PasswordChangeEffects, + UserInfoUpdateEffects ]), SharedModule ], From 733c81b31f3d34ff791b729e23d379e5f5f88b9f Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 11:42:58 -0600 Subject: [PATCH 83/88] fix(properties): fix query param parse error case --- .../property-list-page/property-list-page.component.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/properties/property-list-page/property-list-page.component.ts b/src/app/properties/property-list-page/property-list-page.component.ts index 47b35c0..8602b03 100644 --- a/src/app/properties/property-list-page/property-list-page.component.ts +++ b/src/app/properties/property-list-page/property-list-page.component.ts @@ -21,6 +21,11 @@ export class PropertyListPageComponent implements OnInit { this._activatedRoute.queryParams.subscribe((params) => { if (params.sortBy && params.direction) { this.queryParams = params; + } else { + this.queryParams = Object.assign({ + sortBy: 'recent', + direction: 'UP' + }, params); } }); } From 5446e0225c713fd69f626ef2ec361e1a31fa9f94 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 18:24:27 -0600 Subject: [PATCH 84/88] fix(app): fix html errors --- .../password-reset-page/password-reset-page.component.html | 6 ++++-- .../password-reset-request-page.component.html | 4 +++- src/app/shared/header/header.component.html | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.html b/src/app/password-reset/password-reset-page/password-reset-page.component.html index 90b659f..eed59a3 100644 --- a/src/app/password-reset/password-reset-page/password-reset-page.component.html +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.html @@ -1,10 +1,12 @@ -
+

Reset your password

-

Please enter your e-mail and submit to receive a new activation link

+

Please enter your password & submit to receive a link to reset password page

diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html index 2f59950..cabfe59 100644 --- a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html +++ b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html @@ -1,6 +1,8 @@ -
+

Reset your password

diff --git a/src/app/shared/header/header.component.html b/src/app/shared/header/header.component.html index 7d17a75..41be3d5 100644 --- a/src/app/shared/header/header.component.html +++ b/src/app/shared/header/header.component.html @@ -41,7 +41,7 @@
- - - + From f06106720618781be9a22cbc16978282d2f2d98d Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 18:24:37 -0600 Subject: [PATCH 85/88] feat(cancel-subscription): add UI --- src/app/app.routing.ts | 2 ++ .../cancel-subscription.component.html | 32 ++++++++++++++++++ .../cancel-subscription.component.scss | 0 .../cancel-subscription.component.spec.ts | 31 +++++++++++++++++ .../cancel-subscription.component.ts | 33 +++++++++++++++++++ .../subscription-list.component.html | 2 ++ .../subscription-list.component.spec.ts | 4 +++ src/app/user/user.module.ts | 4 ++- 8 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 src/app/user/cancel-subscription/cancel-subscription.component.html create mode 100644 src/app/user/cancel-subscription/cancel-subscription.component.scss create mode 100644 src/app/user/cancel-subscription/cancel-subscription.component.spec.ts create mode 100644 src/app/user/cancel-subscription/cancel-subscription.component.ts diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 99f134a..2b0047b 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -19,6 +19,7 @@ import {PasswordResetRequestPageComponent} from './password-reset/password-reset import {PasswordResetPageComponent} from './password-reset/password-reset-page/password-reset-page.component'; import {UserInfoEditPageComponent} from './user/user-info-edit-page/user-info-edit-page.component'; import {PasswordChangePageComponent} from './user/password-change-page/password-change-page.component'; +import {CancelSubscriptionComponent} from './user/cancel-subscription/cancel-subscription.component'; const routes: Routes = [ {path: '', pathMatch: 'full', redirectTo: 'welcome'}, @@ -32,6 +33,7 @@ const routes: Routes = [ {path: 'account/info', component: AccountInfoPageComponent, canActivate: [AuthGuard]}, {path: 'account/info/edit', component: UserInfoEditPageComponent, canActivate: [AuthGuard]}, {path: 'account/info/change-password', component: PasswordChangePageComponent, canActivate: [AuthGuard]}, + {path: 'account/info/cancel-subscription', component: CancelSubscriptionComponent, canActivate: [AuthGuard]}, {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.html b/src/app/user/cancel-subscription/cancel-subscription.component.html new file mode 100644 index 0000000..adc9b4b --- /dev/null +++ b/src/app/user/cancel-subscription/cancel-subscription.component.html @@ -0,0 +1,32 @@ + +
+

Enter your password

+

Please enter your password to confirm subscription

+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+ +
diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.scss b/src/app/user/cancel-subscription/cancel-subscription.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts b/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts new file mode 100644 index 0000000..c04644f --- /dev/null +++ b/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts @@ -0,0 +1,31 @@ +import {async, ComponentFixture, TestBed} from '@angular/core/testing'; + +import {CancelSubscriptionComponent} from './cancel-subscription.component'; +import {ReactiveFormsModule} from '@angular/forms'; +import {RouterTestingModule} from '@angular/router/testing'; + +describe('CancelSubscriptionComponent', () => { + let component: CancelSubscriptionComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + ReactiveFormsModule, + RouterTestingModule + ], + declarations: [CancelSubscriptionComponent] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(CancelSubscriptionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.ts b/src/app/user/cancel-subscription/cancel-subscription.component.ts new file mode 100644 index 0000000..3f5475f --- /dev/null +++ b/src/app/user/cancel-subscription/cancel-subscription.component.ts @@ -0,0 +1,33 @@ +import {Component, HostBinding, OnInit} from '@angular/core'; +import {FormBuilder, FormGroup, Validators} from '@angular/forms'; +import {ActivatedRoute, Params} from '@angular/router'; + +@Component({ + selector: 'app-cancel-subscription', + templateUrl: './cancel-subscription.component.html', + styleUrls: ['./cancel-subscription.component.scss'] +}) +export class CancelSubscriptionComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; + + cancelForm: FormGroup; + subscriptionType: string; + + constructor(private _currentRoute: ActivatedRoute, private _fb: FormBuilder) { + this._currentRoute.queryParams.subscribe((params: Params) => { + this.subscriptionType = params.type; + }); + this.cancelForm = this._fb.group({ + password: ['', Validators.required] + }); + } + + ngOnInit() { + } + + onSubmit({value, valid}) { + if (valid && this.subscriptionType) { + console.log(value, this.subscriptionType); + } + } +} diff --git a/src/app/user/subscription-list/subscription-list.component.html b/src/app/user/subscription-list/subscription-list.component.html index f731d08..57505cc 100644 --- a/src/app/user/subscription-list/subscription-list.component.html +++ b/src/app/user/subscription-list/subscription-list.component.html @@ -4,6 +4,7 @@
Subleaser Access
Next Payment: {{vendorAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{vendorAccess.paymentAmount | number: '1.2-2' }}
+
@@ -12,5 +13,6 @@
View Access
Next Payment: {{customerAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
+
diff --git a/src/app/user/subscription-list/subscription-list.component.spec.ts b/src/app/user/subscription-list/subscription-list.component.spec.ts index 54b0e36..cb1df92 100644 --- a/src/app/user/subscription-list/subscription-list.component.spec.ts +++ b/src/app/user/subscription-list/subscription-list.component.spec.ts @@ -3,6 +3,7 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {SubscriptionListComponent} from './subscription-list.component'; import {Observable} from 'rxjs/Observable'; import {Store} from '@ngrx/store'; +import {RouterTestingModule} from '@angular/router/testing'; describe('SubscriptionListComponent', () => { class MockStore { @@ -17,6 +18,9 @@ describe('SubscriptionListComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], providers: [ {provide: Store, useClass: MockStore} ], diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index fd64ec9..fde4e59 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -24,6 +24,7 @@ import {PasswordChangePageComponent} from './password-change-page/password-chang import {UserInfoEditPageComponent} from './user-info-edit-page/user-info-edit-page.component'; import {PasswordChangeEffects} from './password-change.effects'; import {UserInfoUpdateEffects} from './user-info-update.effects'; +import { CancelSubscriptionComponent } from './cancel-subscription/cancel-subscription.component'; @NgModule({ imports: [ @@ -50,7 +51,8 @@ import {UserInfoUpdateEffects} from './user-info-update.effects'; MyPropertiesListComponent, MyWishlistComponent, PasswordChangePageComponent, - UserInfoEditPageComponent + UserInfoEditPageComponent, + CancelSubscriptionComponent ], providers: [ UserInfoService, AccessService, WishlistService, MyPropertiesService From 04177329e86042dd6d4d1959b6901f0213165538 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 19:06:52 -0600 Subject: [PATCH 86/88] feat(cancel-subscription): add api --- src/app/_actions/accesses.actions.ts | 12 ++++- src/app/_actions/accesses.reducer.ts | 33 +++++++++++- src/app/_domains/subscription-cancel-form.ts | 4 ++ .../subscription-cancel.actions.ts | 28 ++++++++++ src/app/core/api-endpoints.constant.ts | 4 ++ src/app/user/access.service.spec.ts | 43 ++++++++++++++- src/app/user/access.service.ts | 12 +++-- .../cancel-subscription.component.spec.ts | 38 ++++++++++++++ .../cancel-subscription.component.ts | 7 ++- src/app/user/subscription-cancel.effects.ts | 52 +++++++++++++++++++ .../subscription-list.component.html | 4 +- src/app/user/user.module.ts | 6 ++- 12 files changed, 228 insertions(+), 15 deletions(-) create mode 100644 src/app/_domains/subscription-cancel-form.ts create mode 100644 src/app/_effect-actions/subscription-cancel.actions.ts create mode 100644 src/app/user/subscription-cancel.effects.ts diff --git a/src/app/_actions/accesses.actions.ts b/src/app/_actions/accesses.actions.ts index c204f92..18ba96d 100644 --- a/src/app/_actions/accesses.actions.ts +++ b/src/app/_actions/accesses.actions.ts @@ -2,6 +2,7 @@ import {ItemId} from '../_domains/item-id'; import * as CrudActions from './crud.actions'; import {Accesses} from '../_domains/accesses'; import {Access} from '../_domains/access'; +import {Action} from '@ngrx/store'; export const ACTION_NAME = 'AccessesActions'; @@ -9,6 +10,7 @@ export const SET = ACTION_NAME + CrudActions.SET; export const ADD_ITEM = ACTION_NAME + CrudActions.ADD_ITEM; export const REMOVE_ITEM = ACTION_NAME + CrudActions.REMOVE_ITEM; export const CLEAR = ACTION_NAME + CrudActions.CLEAR; +export const CANCEL_SUBSCRIPTION = ACTION_NAME + 'CANCEL_SUBSCRIPTION'; export class Set extends CrudActions.Set { constructor(public payload: Accesses) { @@ -34,8 +36,16 @@ export class Clear extends CrudActions.Clear { } } +export class CancelSubscription implements Action { + type = CANCEL_SUBSCRIPTION; + + constructor(public payload: string) { + } +} + export type All = Set | AddItem | RemoveItem - | Clear; + | Clear + | CancelSubscription; diff --git a/src/app/_actions/accesses.reducer.ts b/src/app/_actions/accesses.reducer.ts index fb9e367..2c7ecaa 100644 --- a/src/app/_actions/accesses.reducer.ts +++ b/src/app/_actions/accesses.reducer.ts @@ -11,7 +11,36 @@ const initialState: Accesses = { }; export function reducer(state = initialState, action: Action = {type: INIT}): Accesses { - const newState = Crud.reducer(state, action, prefix, initialState); + switch (action.type) { + case AccessesActions.CANCEL_SUBSCRIPTION: + switch ((action).payload) { + case 'VENDOR': { - return newState === null ? initialState : newState; + return { + vendor: Object.assign({}, state.vendor, { + next_payment_date: null + }), + customer: state.customer + }; + } + + case 'CUSTOMER': { + + return { + vendor: state.vendor, + customer: Object.assign({}, state.customer, { + next_payment_date: null + }) + }; + } + + default: + return state; + } + + default: + const newState = Crud.reducer(state, action, prefix, initialState); + + return newState === null ? initialState : newState; + } } diff --git a/src/app/_domains/subscription-cancel-form.ts b/src/app/_domains/subscription-cancel-form.ts new file mode 100644 index 0000000..813b705 --- /dev/null +++ b/src/app/_domains/subscription-cancel-form.ts @@ -0,0 +1,4 @@ +export interface SubscriptionCancelForm { + password: string; + type: string; +} diff --git a/src/app/_effect-actions/subscription-cancel.actions.ts b/src/app/_effect-actions/subscription-cancel.actions.ts new file mode 100644 index 0000000..19a9e70 --- /dev/null +++ b/src/app/_effect-actions/subscription-cancel.actions.ts @@ -0,0 +1,28 @@ +import {RequestError} from '../_domains/request-error'; +import {Action} from '@ngrx/store'; +import {SubscriptionCancelForm} from '../_domains/subscription-cancel-form'; + +export const REQUEST = 'SubscriptionCancelActions.REQUEST'; +export const SUCCESS = 'SubscriptionCancelActions.SUCCESS'; +export const ERROR = 'SubscriptionCancelActions.ERROR'; + +export class Request implements Action { + readonly type = REQUEST; + + constructor(public payload: SubscriptionCancelForm) { + } +} + +export class Success implements Action { + readonly type = SUCCESS; + + constructor(public payload: string) { + } +} + +export class Error implements Action { + readonly type = ERROR; + + constructor(public payload: RequestError) { + } +} diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index 834e677..a36c0d5 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -113,6 +113,10 @@ export const API = { ADD: { method: 'POST', url: '/access' + }, + CANCEL: { + method: 'PUT', + url: '/access' } } }; diff --git a/src/app/user/access.service.spec.ts b/src/app/user/access.service.spec.ts index 294ae9a..b4b53a9 100644 --- a/src/app/user/access.service.spec.ts +++ b/src/app/user/access.service.spec.ts @@ -1,15 +1,54 @@ import {TestBed, inject} from '@angular/core/testing'; import {AccessService} from './access.service'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import {Store} from '@ngrx/store'; +import * as SubscriptionCancelActions from '../_effect-actions/subscription-cancel.actions'; + +describe('AccessService', () => { + let mockStore; -xdescribe('AccessService', () => { beforeEach(() => { + mockStore = { + select: jasmine.createSpy('select').and.returnValue(Observable.of({ + vendor: { + nextPaymentDate: null, + paymentAmount: null + }, + customer: { + nextPaymentDate: null, + paymentAmount: null + }, + })), + dispatch: jasmine.createSpy('dispatch') + }; TestBed.configureTestingModule({ - providers: [AccessService] + providers: [ + {provide: Store, useValue: mockStore}, + AccessService + ] }); }); it('should be created', inject([AccessService], (service: AccessService) => { expect(service).toBeTruthy(); })); + + describe('Cancel Subscription', () => { + it('should dispatch SubscriptionCancelActions Request', + inject([AccessService], (service: AccessService) => { + const form = { + password: 'test' + }; + const type = 'VENDOR'; + + service.cancelSubscription(form, type); + + expect(mockStore.dispatch).toHaveBeenCalledWith(new SubscriptionCancelActions.Request({ + password: 'test', + type: 'VENDOR' + })); + })); + }); }); diff --git a/src/app/user/access.service.ts b/src/app/user/access.service.ts index a082f51..d43130a 100644 --- a/src/app/user/access.service.ts +++ b/src/app/user/access.service.ts @@ -3,6 +3,8 @@ import {Accesses} from '../_domains/accesses'; import {Store} from '@ngrx/store'; import {Observable} from 'rxjs/Observable'; +import * as SubscriptionCancelActions from '../_effect-actions/subscription-cancel.actions'; + @Injectable() export class AccessService { public accesses$: Observable; @@ -12,14 +14,16 @@ export class AccessService { } get() { - // TODO: dispatch accesses request action } makePurchase(form) { - // TODO: dispatch access add request action } - cancelSubscription(id) { - // TODO: dispatch access cancel request action + cancelSubscription(form, type) { + + this._store.dispatch(new SubscriptionCancelActions.Request({ + password: form.password, + type: type + })); } } diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts b/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts index c04644f..6e395bf 100644 --- a/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts +++ b/src/app/user/cancel-subscription/cancel-subscription.component.spec.ts @@ -3,17 +3,36 @@ import {async, ComponentFixture, TestBed} from '@angular/core/testing'; import {CancelSubscriptionComponent} from './cancel-subscription.component'; import {ReactiveFormsModule} from '@angular/forms'; import {RouterTestingModule} from '@angular/router/testing'; +import {AccessService} from '../access.service'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/observable/of'; +import {ActivatedRoute} from '@angular/router'; describe('CancelSubscriptionComponent', () => { let component: CancelSubscriptionComponent; let fixture: ComponentFixture; + let mockService; + let mockRoute; + beforeEach(async(() => { + mockService = { + cancelSubscription: jasmine.createSpy('cancelSubscription') + }; + mockRoute = { + queryParams: Observable.of({ + type: 'VENDOR' + }) + }; TestBed.configureTestingModule({ imports: [ ReactiveFormsModule, RouterTestingModule ], + providers: [ + {provide: ActivatedRoute, useValue: mockRoute}, + {provide: AccessService, useValue: mockService} + ], declarations: [CancelSubscriptionComponent] }) .compileComponents(); @@ -28,4 +47,23 @@ describe('CancelSubscriptionComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('method: onSubmit', () => { + it('should submit form to service method with the type in query param if valid', () => { + component.cancelForm.controls.password.setValue('testPassword'); + + component.onSubmit(component.cancelForm); + + expect(mockService.cancelSubscription) + .toHaveBeenCalledWith({password: 'testPassword'}, 'VENDOR'); + }); + + it('should not submit if invalid', () => { + component.cancelForm.controls.password.reset(); + + component.onSubmit(component.cancelForm); + + expect(mockService.cancelSubscription).not.toHaveBeenCalled(); + }); + }); }); diff --git a/src/app/user/cancel-subscription/cancel-subscription.component.ts b/src/app/user/cancel-subscription/cancel-subscription.component.ts index 3f5475f..cddcc46 100644 --- a/src/app/user/cancel-subscription/cancel-subscription.component.ts +++ b/src/app/user/cancel-subscription/cancel-subscription.component.ts @@ -1,6 +1,7 @@ import {Component, HostBinding, OnInit} from '@angular/core'; import {FormBuilder, FormGroup, Validators} from '@angular/forms'; import {ActivatedRoute, Params} from '@angular/router'; +import {AccessService} from '../access.service'; @Component({ selector: 'app-cancel-subscription', @@ -13,7 +14,9 @@ export class CancelSubscriptionComponent implements OnInit { cancelForm: FormGroup; subscriptionType: string; - constructor(private _currentRoute: ActivatedRoute, private _fb: FormBuilder) { + constructor(private _service: AccessService, + private _currentRoute: ActivatedRoute, + private _fb: FormBuilder) { this._currentRoute.queryParams.subscribe((params: Params) => { this.subscriptionType = params.type; }); @@ -27,7 +30,7 @@ export class CancelSubscriptionComponent implements OnInit { onSubmit({value, valid}) { if (valid && this.subscriptionType) { - console.log(value, this.subscriptionType); + this._service.cancelSubscription(value, this.subscriptionType); } } } diff --git a/src/app/user/subscription-cancel.effects.ts b/src/app/user/subscription-cancel.effects.ts new file mode 100644 index 0000000..2b8f2ea --- /dev/null +++ b/src/app/user/subscription-cancel.effects.ts @@ -0,0 +1,52 @@ +import {Injectable} from '@angular/core'; +import {Action} from '@ngrx/store'; +import {Actions, Effect} from '@ngrx/effects'; +import {Observable} from 'rxjs/Observable'; +import 'rxjs/add/operator/switchMap'; +import 'rxjs/add/operator/map'; +import 'rxjs/add/operator/catch'; +import 'rxjs/add/observable/of'; + +import {RestApiRequest} from '../core/rest-api-request'; +import {RestApiService} from '../core/rest-api.service'; +import {RequestError} from '../_domains/request-error'; +import {API} from '../core/api-endpoints.constant'; + +import {AlertActions} from '../_actions/alert.actions'; +import * as AccessesActions from '../_actions/accesses.actions'; + +import * as SubscriptionCancelActions from '../_effect-actions/subscription-cancel.actions'; + +@Injectable() +export class SubscriptionCancelEffects { + @Effect() onRequest$: Observable = this.actions$ + .ofType(SubscriptionCancelActions.REQUEST) + .map((action: SubscriptionCancelActions.Request) => action.payload) + .switchMap((payload) => { + const request = new RestApiRequest(API.ACCESSES.CANCEL); + request.setPathParams({id: payload}); + + return this._api.request(request) + .map(response => new SubscriptionCancelActions.Success(payload.type)) + .catch(error => Observable.of(new SubscriptionCancelActions.Error(error))); + }); + + @Effect() onSuccess$: Observable = this.actions$ + .ofType(SubscriptionCancelActions.SUCCESS) + .map((action: SubscriptionCancelActions.Success) => + new AccessesActions.CancelSubscription(action.payload)); + + @Effect() onError$: Observable = this.actions$ + .ofType(SubscriptionCancelActions.ERROR) + .map((action: SubscriptionCancelActions.Error) => action.payload) + .map((error: RequestError) => { + switch (error.status) { + + default: + return new AlertActions.SetError('Unknown Error'); + } + }); + + constructor(private _api: RestApiService, private actions$: Actions) { + } +} diff --git a/src/app/user/subscription-list/subscription-list.component.html b/src/app/user/subscription-list/subscription-list.component.html index 57505cc..367e608 100644 --- a/src/app/user/subscription-list/subscription-list.component.html +++ b/src/app/user/subscription-list/subscription-list.component.html @@ -4,7 +4,7 @@
Subleaser Access
Next Payment: {{vendorAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{vendorAccess.paymentAmount | number: '1.2-2' }}
- +
@@ -13,6 +13,6 @@
View Access
Next Payment: {{customerAccess.nextPaymentDate | date: 'yMd'}}
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
- +
diff --git a/src/app/user/user.module.ts b/src/app/user/user.module.ts index fde4e59..00d694b 100644 --- a/src/app/user/user.module.ts +++ b/src/app/user/user.module.ts @@ -24,7 +24,8 @@ import {PasswordChangePageComponent} from './password-change-page/password-chang import {UserInfoEditPageComponent} from './user-info-edit-page/user-info-edit-page.component'; import {PasswordChangeEffects} from './password-change.effects'; import {UserInfoUpdateEffects} from './user-info-update.effects'; -import { CancelSubscriptionComponent } from './cancel-subscription/cancel-subscription.component'; +import {CancelSubscriptionComponent} from './cancel-subscription/cancel-subscription.component'; +import {SubscriptionCancelEffects} from './subscription-cancel.effects'; @NgModule({ imports: [ @@ -38,7 +39,8 @@ import { CancelSubscriptionComponent } from './cancel-subscription/cancel-subscr WishlistAddEffects, WishlistRemoveEffects, PasswordChangeEffects, - UserInfoUpdateEffects + UserInfoUpdateEffects, + SubscriptionCancelEffects ]), SharedModule ], From 9f08db4fd7e70c9cf06f390d6f9784b19c43af0f Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 20:44:00 -0600 Subject: [PATCH 87/88] fix(app): fix integration test errors --- package-lock.json | 543 ++++-------------- package.json | 1 + src/app/_actions/auth.actions.ts | 11 +- src/app/_actions/auth.reducer.ts | 11 +- src/app/_domains/access.ts | 2 + .../activation-success-page.component.html | 4 +- .../activation-success-page.component.spec.ts | 4 + src/app/app.routing.ts | 6 +- src/app/core/api-endpoints.constant.ts | 2 +- .../password-reset-page.component.html | 2 +- .../password-reset-page.component.ts | 3 +- ...password-reset-request-page.component.html | 2 +- .../password-reset/password-reset.effects.ts | 4 +- .../properties-filter.component.ts | 6 +- .../property-page.component.html | 27 +- src/app/properties/property-remove.effects.ts | 6 +- .../my-properties-card.component.html | 2 +- .../my-properties-list.component.html | 2 +- .../my-properties-list.component.ts | 2 +- src/app/user/password-change.effects.ts | 6 +- src/app/user/subscription-cancel.effects.ts | 11 +- .../subscription-list.component.html | 12 +- src/app/user/user-info-get.effects.ts | 8 +- 23 files changed, 215 insertions(+), 462 deletions(-) diff --git a/package-lock.json b/package-lock.json index 346ca08..cb4fac3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1040,7 +1040,7 @@ "requires": { "anymatch": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "async-each": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "fsevents": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "fsevents": "1.1.3", "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "is-binary-path": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -2594,28 +2594,21 @@ "dev": true }, "fsevents": { - "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", - "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=", - "dev": true, - "optional": true, + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", "requires": { "nan": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "node-pre-gyp": "0.6.36" + "node-pre-gyp": "0.6.39" }, "dependencies": { "abbrev": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "dev": true, - "optional": true + "bundled": true }, "ajv": { "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "co": "4.6.0", "json-stable-stringify": "1.0.1" @@ -2623,23 +2616,15 @@ }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "bundled": true }, "aproba": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "dev": true, - "optional": true + "bundled": true }, "are-we-there-yet": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "delegates": "1.0.0", "readable-stream": "2.2.9" @@ -2647,50 +2632,31 @@ }, "asn1": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true, - "optional": true + "bundled": true }, "assert-plus": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true + "bundled": true }, "asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true + "bundled": true }, "aws-sign2": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true + "bundled": true }, "aws4": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true, - "optional": true + "bundled": true }, "balanced-match": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true + "bundled": true }, "bcrypt-pbkdf": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, + "bundled": true, "optional": true, "requires": { "tweetnacl": "0.14.5" @@ -2698,27 +2664,21 @@ }, "block-stream": { "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "dev": true, + "bundled": true, "requires": { "inherits": "2.0.3" } }, "boom": { "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, + "bundled": true, "requires": { "hoek": "2.16.3" } }, "brace-expansion": { "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "dev": true, + "bundled": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -2726,121 +2686,85 @@ }, "buffer-shims": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true + "bundled": true }, "caseless": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true + "bundled": true }, "co": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "optional": true + "bundled": true }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "bundled": true }, "combined-stream": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "dev": true, + "bundled": true, "requires": { "delayed-stream": "1.0.0" } }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "bundled": true }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "bundled": true }, "cryptiles": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "boom": "2.10.1" } }, "dashdash": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true + "bundled": true } } }, "debug": { "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "ms": "2.0.0" } }, "deep-extend": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true, - "optional": true + "bundled": true }, "delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "bundled": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true + "bundled": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true }, "ecc-jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, + "bundled": true, "optional": true, "requires": { "jsbn": "0.1.1" @@ -2848,30 +2772,19 @@ }, "extend": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true, - "optional": true + "bundled": true }, "extsprintf": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", - "dev": true + "bundled": true }, "forever-agent": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true + "bundled": true }, "form-data": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", @@ -2880,15 +2793,11 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "bundled": true }, "fstream": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, + "bundled": true, "requires": { "graceful-fs": "4.1.11", "inherits": "2.0.3", @@ -2898,10 +2807,7 @@ }, "fstream-ignore": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "fstream": "1.0.11", "inherits": "2.0.3", @@ -2910,10 +2816,7 @@ }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "aproba": "1.1.1", "console-control-strings": "1.1.0", @@ -2927,28 +2830,20 @@ }, "getpass": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true + "bundled": true } } }, "glob": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, + "bundled": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -2960,23 +2855,15 @@ }, "graceful-fs": { "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true + "bundled": true }, "har-schema": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true + "bundled": true }, "har-validator": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "ajv": "4.11.8", "har-schema": "1.0.5" @@ -2984,17 +2871,11 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true + "bundled": true }, "hawk": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "boom": "2.10.1", "cryptiles": "2.0.5", @@ -3004,16 +2885,11 @@ }, "hoek": { "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "bundled": true }, "http-signature": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.0", @@ -3022,9 +2898,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, + "bundled": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -3032,51 +2906,34 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "bundled": true }, "ini": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "dev": true, - "optional": true + "bundled": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, + "bundled": true, "requires": { "number-is-nan": "1.0.1" } }, "is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true + "bundled": true }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "bundled": true }, "isstream": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true + "bundled": true }, "jodid25519": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "dev": true, + "bundled": true, "optional": true, "requires": { "jsbn": "0.1.1" @@ -3084,48 +2941,31 @@ }, "jsbn": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, + "bundled": true, "optional": true }, "json-schema": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true + "bundled": true }, "json-stable-stringify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "jsonify": "0.0.0" } }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true + "bundled": true }, "jsonify": { "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true + "bundled": true }, "jsprim": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.0.2", @@ -3135,66 +2975,49 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true + "bundled": true } } }, "mime-db": { "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true + "bundled": true }, "mime-types": { "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, + "bundled": true, "requires": { "mime-db": "1.27.0" } }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, + "bundled": true, "requires": { "brace-expansion": "1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "bundled": true }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, + "bundled": true, "requires": { "minimist": "0.0.8" } }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true + "bundled": true }, "node-pre-gyp": { - "version": "0.6.36", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", - "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", - "dev": true, - "optional": true, + "version": "0.6.39", + "bundled": true, "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", "mkdirp": "0.5.1", "nopt": "4.0.1", "npmlog": "4.1.0", @@ -3208,10 +3031,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "abbrev": "1.1.0", "osenv": "0.1.4" @@ -3219,10 +3039,7 @@ }, "npmlog": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "dev": true, - "optional": true, + "bundled": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -3232,53 +3049,34 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "bundled": 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 + "bundled": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true + "bundled": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, + "bundled": true, "requires": { "wrappy": "1.0.2" } }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true, - "optional": true + "bundled": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true, - "optional": true + "bundled": true }, "osenv": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "os-homedir": "1.0.2", "os-tmpdir": "1.0.2" @@ -3286,43 +3084,27 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "bundled": true }, "performance-now": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true + "bundled": true }, "process-nextick-args": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "bundled": true }, "punycode": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true + "bundled": true }, "qs": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true + "bundled": true }, "rc": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "deep-extend": "0.4.2", "ini": "1.3.4", @@ -3332,18 +3114,13 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true, - "optional": true + "bundled": true } } }, "readable-stream": { "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "dev": true, + "bundled": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -3356,10 +3133,7 @@ }, "request": { "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -3387,56 +3161,37 @@ }, "rimraf": { "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, + "bundled": true, "requires": { "glob": "7.1.2" } }, "safe-buffer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true + "bundled": true }, "semver": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true + "bundled": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true, - "optional": true + "bundled": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true, - "optional": true + "bundled": true }, "sntp": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "hoek": "2.16.3" } }, "sshpk": { "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -3451,18 +3206,13 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true + "bundled": true } } }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, + "bundled": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -3471,41 +3221,29 @@ }, "string_decoder": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "dev": true, + "bundled": true, "requires": { "safe-buffer": "5.0.1" } }, "stringstream": { "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true, - "optional": true + "bundled": true }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, + "bundled": true, "requires": { "ansi-regex": "2.1.1" } }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "optional": true + "bundled": true }, "tar": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, + "bundled": true, "requires": { "block-stream": "0.0.9", "fstream": "1.0.11", @@ -3514,10 +3252,7 @@ }, "tar-pack": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "debug": "2.6.8", "fstream": "1.0.11", @@ -3531,76 +3266,52 @@ }, "tough-cookie": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "punycode": "1.4.1" } }, "tunnel-agent": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "safe-buffer": "5.0.1" } }, "tweetnacl": { "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, + "bundled": true, "optional": true }, "uid-number": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true, - "optional": true + "bundled": true }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "bundled": true }, "uuid": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "dev": true, - "optional": true + "bundled": true }, "verror": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "dev": true, - "optional": true, + "bundled": true, "requires": { "extsprintf": "1.0.2" } }, "wide-align": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "dev": true, - "optional": true, + "bundled": true, "requires": { "string-width": "1.0.2" } }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "bundled": true } } }, @@ -5377,9 +5088,7 @@ }, "nan": { "version": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", - "dev": true, - "optional": true + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" }, "ncname": { "version": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", diff --git a/package.json b/package.json index 3214de9..01a2dc5 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "clarity-icons": "^0.10.6", "clarity-ui": "^0.10.6", "core-js": "^2.4.1", + "fsevents": "^1.1.3", "karma-junit-reporter": "^1.2.0", "rxjs": "^5.4.2", "zone.js": "^0.8.14" diff --git a/src/app/_actions/auth.actions.ts b/src/app/_actions/auth.actions.ts index c738f01..8130f0e 100644 --- a/src/app/_actions/auth.actions.ts +++ b/src/app/_actions/auth.actions.ts @@ -1,10 +1,12 @@ import * as CrudActions from './crud.actions'; import {Auth} from '../_domains/auth'; +import {Action} from '@ngrx/store'; export const ACTION_NAME = 'AuthActions'; export const SET = ACTION_NAME + CrudActions.SET; export const CLEAR = ACTION_NAME + CrudActions.CLEAR; +export const UPDATE_TOKEN = ACTION_NAME + 'UPDATE_TOKEN'; export class Set extends CrudActions.Set { constructor(public payload: Auth) { @@ -18,6 +20,13 @@ export class Clear extends CrudActions.Clear { } } +export class UpdateToken implements Action { + type = UPDATE_TOKEN; + + constructor(public payload: any) { + } +} export type All = Set - | Clear; + | Clear + | UpdateToken; diff --git a/src/app/_actions/auth.reducer.ts b/src/app/_actions/auth.reducer.ts index 707c6b4..17c023d 100644 --- a/src/app/_actions/auth.reducer.ts +++ b/src/app/_actions/auth.reducer.ts @@ -8,7 +8,14 @@ const INIT = 'INIT'; const initialState: Auth = new Auth(); export function reducer(state = initialState, action: Action = {type: INIT}): Auth { - const newState = Crud.reducer(state, action, prefix, initialState); + switch (action.type) { + case AuthActions.UPDATE_TOKEN: + return Object.assign({}, state, (action).payload); + + default: + const newState = Crud.reducer(state, action, prefix, initialState); + + return newState === null ? initialState : newState; + } - return newState === null ? initialState : newState; } diff --git a/src/app/_domains/access.ts b/src/app/_domains/access.ts index 2a1edd1..8a5e735 100644 --- a/src/app/_domains/access.ts +++ b/src/app/_domains/access.ts @@ -1,4 +1,6 @@ export interface Access { + id: string; + cancelled: boolean; nextPaymentDate: string; paymentAmount: number; } diff --git a/src/app/account/activation-success-page/activation-success-page.component.html b/src/app/account/activation-success-page/activation-success-page.component.html index 8a45b3f..1ec62a3 100644 --- a/src/app/account/activation-success-page/activation-success-page.component.html +++ b/src/app/account/activation-success-page/activation-success-page.component.html @@ -1,6 +1,6 @@

Your Account Has Been Activated!

- - Start Exploring Listings + + Start Exploring Listings
diff --git a/src/app/account/activation-success-page/activation-success-page.component.spec.ts b/src/app/account/activation-success-page/activation-success-page.component.spec.ts index 5de645a..a361052 100644 --- a/src/app/account/activation-success-page/activation-success-page.component.spec.ts +++ b/src/app/account/activation-success-page/activation-success-page.component.spec.ts @@ -2,6 +2,7 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { ActivationSuccessPageComponent } from './activation-success-page.component'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {RouterTestingModule} from '@angular/router/testing'; describe('ActivationSuccessPageComponent', () => { let component: ActivationSuccessPageComponent; @@ -12,6 +13,9 @@ describe('ActivationSuccessPageComponent', () => { schemas: [ CUSTOM_ELEMENTS_SCHEMA ], + imports: [ + RouterTestingModule + ], declarations: [ ActivationSuccessPageComponent ] }) .compileComponents(); diff --git a/src/app/app.routing.ts b/src/app/app.routing.ts index 2b0047b..6ffc090 100644 --- a/src/app/app.routing.ts +++ b/src/app/app.routing.ts @@ -35,12 +35,12 @@ const routes: Routes = [ {path: 'account/info/change-password', component: PasswordChangePageComponent, canActivate: [AuthGuard]}, {path: 'account/info/cancel-subscription', component: CancelSubscriptionComponent, canActivate: [AuthGuard]}, {path: 'access/:type', component: AccessPurchasePageComponent, canActivate: [AuthGuard]}, - {path: 'property/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, - {path: 'property/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, {path: 'properties', component: PropertyListPageComponent}, + {path: 'properties/create', component: CreateListingPageComponent, canActivate: [AuthGuard]}, + {path: 'properties/:id/remove', component: RemoveListingPageComponent, canActivate: [AuthGuard]}, {path: 'properties/:id', component: PropertyPageComponent}, + {path: 'reset-password', component: PasswordResetPageComponent, canActivate: [VisitorGuard]}, {path: 'reset-password/request-link', component: PasswordResetRequestPageComponent, canActivate: [VisitorGuard]}, - {path: 'reset-password/form', component: PasswordResetPageComponent, canActivate: [VisitorGuard]}, ]; @NgModule({ diff --git a/src/app/core/api-endpoints.constant.ts b/src/app/core/api-endpoints.constant.ts index a36c0d5..7944b48 100644 --- a/src/app/core/api-endpoints.constant.ts +++ b/src/app/core/api-endpoints.constant.ts @@ -13,7 +13,7 @@ export const API = { }, REQUEST_RESET_PASSWORD: { method: 'POST', - url: '/reset-password-request' + url: '/reset-password' }, RESET_PASSWORD: { method: 'PUT', diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.html b/src/app/password-reset/password-reset-page/password-reset-page.component.html index eed59a3..4acf797 100644 --- a/src/app/password-reset/password-reset-page/password-reset-page.component.html +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.html @@ -6,7 +6,7 @@

Reset your password

-

Please enter your password & submit to receive a link to reset password page

+

Please enter your new password & submit to change your password

diff --git a/src/app/password-reset/password-reset-page/password-reset-page.component.ts b/src/app/password-reset/password-reset-page/password-reset-page.component.ts index 0f5321d..8827d4f 100644 --- a/src/app/password-reset/password-reset-page/password-reset-page.component.ts +++ b/src/app/password-reset/password-reset-page/password-reset-page.component.ts @@ -1,4 +1,4 @@ -import {Component, OnInit} from '@angular/core'; +import {Component, HostBinding, OnInit} from '@angular/core'; import {PasswordResetService} from '../password-reset.service'; import {FormBuilder, FormGroup, Validators} from '@angular/forms'; @@ -8,6 +8,7 @@ import {FormBuilder, FormGroup, Validators} from '@angular/forms'; styleUrls: ['./password-reset-page.component.scss'] }) export class PasswordResetPageComponent implements OnInit { + @HostBinding('class') cssClass = 'content-container'; passwordResetForm: FormGroup; constructor(private _service: PasswordResetService, private _fb: FormBuilder) { diff --git a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html index cabfe59..e3e81be 100644 --- a/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html +++ b/src/app/password-reset/password-reset-request-page/password-reset-request-page.component.html @@ -6,6 +6,6 @@

Reset your password

-

Please enter your e-mail and submit to receive a new activation link

+

Please enter your e-mail & submit to receive a link to reset password page

diff --git a/src/app/password-reset/password-reset.effects.ts b/src/app/password-reset/password-reset.effects.ts index dbafbc9..362c026 100644 --- a/src/app/password-reset/password-reset.effects.ts +++ b/src/app/password-reset/password-reset.effects.ts @@ -9,6 +9,7 @@ import {HttpStatus} from '../core/http-status.enum'; import {API} from '../core/api-endpoints.constant'; import {RestApiRequest} from '../core/rest-api-request'; import * as PasswordResetActions from '../_effect-actions/password-reset.actions'; +import {Router} from '@angular/router'; @Injectable() export class PasswordResetEffects { @@ -26,6 +27,7 @@ export class PasswordResetEffects { @Effect() onSuccess$: Observable = this.actions$ .ofType(PasswordResetActions.SUCCESS) + .do(() => this._router.navigate(['/welcome'])) .map(() => new AlertActions.SetInfo('Password Reset')); @Effect() onError$: Observable = this.actions$ @@ -41,6 +43,6 @@ export class PasswordResetEffects { } }); - constructor(private _api: RestApiService, private actions$: Actions) { + constructor(private _api: RestApiService, private actions$: Actions, private _router: Router) { } } diff --git a/src/app/properties/properties-filter/properties-filter.component.ts b/src/app/properties/properties-filter/properties-filter.component.ts index ebc6c51..3fb943c 100644 --- a/src/app/properties/properties-filter/properties-filter.component.ts +++ b/src/app/properties/properties-filter/properties-filter.component.ts @@ -68,6 +68,10 @@ export class PropertiesFilterComponent implements OnInit { const houseRules = this.options.HOUSE_RULES .filter((option, index) => value.houseRules[index]) .map((option) => option.id); + let options; + if (amenities.length > 0 || pets.length > 0 || houseRules.length > 0) { + options = `[${[...amenities, ...pets, ...houseRules].join(',')}]`; + } this.filterOpen = false; this.onApply.emit({ @@ -78,7 +82,7 @@ export class PropertiesFilterComponent implements OnInit { minPrice: value.minPrice, maxPrice: value.maxPrice, zipcode: value.zipcode, - options: `[${[...amenities, ...pets, ...houseRules].join(',')}]` + options: options }); } diff --git a/src/app/properties/property-page/property-page.component.html b/src/app/properties/property-page/property-page.component.html index aee68be..22bf20a 100644 --- a/src/app/properties/property-page/property-page.component.html +++ b/src/app/properties/property-page/property-page.component.html @@ -1,15 +1,24 @@
- + - + + + -
-

Get Access

-

For more detailed information on the property

-
+
+

Contact Owner

+

Form goes here

+
+ + + + +
@@ -19,7 +28,11 @@

Get Access

{{data.title}}

-

{{ data.address.detailLevel1 }}, {{ data.address.detailLevel2 }}, {{ data.address.city }}, {{ data.address.state +

{{ data.address.detailLevel1 }}, {{ data.address.detailLevel2 }}, {{ + data.address.city }}, {{ data.address.state + }}, {{ data.address.zipcode }}

+

{{ data.address.detailLevel2 }}, {{ data.address.city }}, {{ + data.address.state }}, {{ data.address.zipcode }}

    diff --git a/src/app/properties/property-remove.effects.ts b/src/app/properties/property-remove.effects.ts index adf4005..8f2748b 100644 --- a/src/app/properties/property-remove.effects.ts +++ b/src/app/properties/property-remove.effects.ts @@ -11,6 +11,7 @@ import 'rxjs/add/operator/do'; import {Injectable} from '@angular/core'; import 'rxjs/add/observable/of'; import * as PropertyRemoveActions from '../_effect-actions/property-remove.actions'; +import {Router} from '@angular/router'; @Injectable() export class PropertyRemoveEffects { @Effect() onRequest$: Observable = this.actions$ @@ -26,7 +27,8 @@ export class PropertyRemoveEffects { }); @Effect({dispatch: false}) onSuccess$: Observable = this.actions$ - .ofType(PropertyRemoveActions.SUCCESS); + .ofType(PropertyRemoveActions.SUCCESS) + .do(() => this._router.navigate(['/account/info'])); @Effect() onError$: Observable = this.actions$ .ofType(PropertyRemoveActions.ERROR) @@ -35,7 +37,7 @@ export class PropertyRemoveEffects { return new AlertActions.SetError('Unknown Error'); }); - constructor(private _api: RestApiService, private actions$: Actions) { + constructor(private _api: RestApiService, private actions$: Actions, private _router: Router) { } } diff --git a/src/app/user/my-properties-card/my-properties-card.component.html b/src/app/user/my-properties-card/my-properties-card.component.html index 5634c64..415a52d 100644 --- a/src/app/user/my-properties-card/my-properties-card.component.html +++ b/src/app/user/my-properties-card/my-properties-card.component.html @@ -9,4 +9,4 @@
- + diff --git a/src/app/user/my-properties-list/my-properties-list.component.html b/src/app/user/my-properties-list/my-properties-list.component.html index a527142..e582564 100644 --- a/src/app/user/my-properties-list/my-properties-list.component.html +++ b/src/app/user/my-properties-list/my-properties-list.component.html @@ -3,5 +3,5 @@
+ routerLink="../../properties/create">Add a property
diff --git a/src/app/user/my-properties-list/my-properties-list.component.ts b/src/app/user/my-properties-list/my-properties-list.component.ts index 396670b..c4480af 100644 --- a/src/app/user/my-properties-list/my-properties-list.component.ts +++ b/src/app/user/my-properties-list/my-properties-list.component.ts @@ -23,6 +23,6 @@ export class MyPropertiesListComponent implements OnInit { onRemove(id) { - this._router.navigate(['property', id, 'remove']); + this._router.navigate(['properties', id, 'remove']); } } diff --git a/src/app/user/password-change.effects.ts b/src/app/user/password-change.effects.ts index 0a97f59..ab2e5f6 100644 --- a/src/app/user/password-change.effects.ts +++ b/src/app/user/password-change.effects.ts @@ -9,10 +9,7 @@ import {API} from '../core/api-endpoints.constant'; import {RestApiRequest} from '../core/rest-api-request'; import * as PasswordChangeActions from '../_effect-actions/password-change.actions'; import * as AuthActions from '../_actions/auth.actions'; -import * as WishlistActions from '../_actions/wishlist.actions'; import {AuthResponse} from '../_domains/auth-response'; -import {Wishlist} from '../_domains/wishlist'; -import {Auth} from '../_domains/auth'; @Injectable() export class PasswordChangeEffects { @@ -32,8 +29,7 @@ export class PasswordChangeEffects { .ofType(PasswordChangeActions.SUCCESS) .map((action: PasswordChangeActions.Success) => action.payload) .mergeMap((payload: AuthResponse) => [ - new AuthActions.Set(new Auth(payload.token, payload.user.email, payload.user.id)), - new WishlistActions.Set(new Wishlist(payload.user.wishlist)), + new AuthActions.UpdateToken({token: payload.token}), new AlertActions.SetInfo('Password Changed') ]); diff --git a/src/app/user/subscription-cancel.effects.ts b/src/app/user/subscription-cancel.effects.ts index 2b8f2ea..b1e4ed2 100644 --- a/src/app/user/subscription-cancel.effects.ts +++ b/src/app/user/subscription-cancel.effects.ts @@ -13,9 +13,9 @@ import {RequestError} from '../_domains/request-error'; import {API} from '../core/api-endpoints.constant'; import {AlertActions} from '../_actions/alert.actions'; -import * as AccessesActions from '../_actions/accesses.actions'; import * as SubscriptionCancelActions from '../_effect-actions/subscription-cancel.actions'; +import {Router} from '@angular/router'; @Injectable() export class SubscriptionCancelEffects { @@ -24,17 +24,16 @@ export class SubscriptionCancelEffects { .map((action: SubscriptionCancelActions.Request) => action.payload) .switchMap((payload) => { const request = new RestApiRequest(API.ACCESSES.CANCEL); - request.setPathParams({id: payload}); + request.setBody(payload); return this._api.request(request) .map(response => new SubscriptionCancelActions.Success(payload.type)) .catch(error => Observable.of(new SubscriptionCancelActions.Error(error))); }); - @Effect() onSuccess$: Observable = this.actions$ + @Effect({dispatch: false}) onSuccess$: Observable = this.actions$ .ofType(SubscriptionCancelActions.SUCCESS) - .map((action: SubscriptionCancelActions.Success) => - new AccessesActions.CancelSubscription(action.payload)); + .do(() => this._router.navigate(['/account/info'])); @Effect() onError$: Observable = this.actions$ .ofType(SubscriptionCancelActions.ERROR) @@ -47,6 +46,6 @@ export class SubscriptionCancelEffects { } }); - constructor(private _api: RestApiService, private actions$: Actions) { + constructor(private _api: RestApiService, private actions$: Actions, private _router: Router) { } } diff --git a/src/app/user/subscription-list/subscription-list.component.html b/src/app/user/subscription-list/subscription-list.component.html index 367e608..dce3d52 100644 --- a/src/app/user/subscription-list/subscription-list.component.html +++ b/src/app/user/subscription-list/subscription-list.component.html @@ -2,17 +2,17 @@
Subleaser Access
-
Next Payment: {{vendorAccess.nextPaymentDate | date: 'yMd'}}
-
Expected Charges: ${{vendorAccess.paymentAmount | number: '1.2-2' }}
- +
Next Payment: Valid Until: {{vendorAccess.nextPaymentDate | date: 'yMd'}}
+
Expected Charges: ${{vendorAccess.paymentAmount | number: '1.2-2' }}
+
View Access
-
Next Payment: {{customerAccess.nextPaymentDate | date: 'yMd'}}
-
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
- +
Next Payment: Valid Until: {{customerAccess.nextPaymentDate | date: 'yMd'}}
+
Expected Charges: ${{customerAccess.paymentAmount | number: '1.2-2' }}
+
diff --git a/src/app/user/user-info-get.effects.ts b/src/app/user/user-info-get.effects.ts index 15dc7e1..6c0b128 100644 --- a/src/app/user/user-info-get.effects.ts +++ b/src/app/user/user-info-get.effects.ts @@ -63,14 +63,18 @@ export class UserInfoGetEffects { vendor: null, customer: null }; - if (response.vendor_next_payment_date) { + if (new Date(response.vendor_next_payment_date) > new Date()) { accesses.vendor = { + id: response.vendor_subscription_id, + cancelled: response.vendor_subscription_id === '0', nextPaymentDate: response.vendor_next_payment_date, paymentAmount: response.vendor_payment_amount }; } - if (response.customer_next_payment_date) { + if (new Date(response.customer_next_payment_date) > new Date()) { accesses.customer = { + id: response.customer_subscription_id, + cancelled: response.customer_subscription_id === '0', nextPaymentDate: response.customer_next_payment_date, paymentAmount: response.customer_payment_amount }; From 8348ab62d6b3bcdaa54655ee0d7f0a509546fe03 Mon Sep 17 00:00:00 2001 From: Clemence Yun Chan Lee Date: Mon, 27 Nov 2017 20:46:11 -0600 Subject: [PATCH 88/88] fix(package.json): remove mac only dependency --- package-lock.json | 543 +++++++++++++++++++++++++++++++++++----------- package.json | 1 - 2 files changed, 417 insertions(+), 127 deletions(-) diff --git a/package-lock.json b/package-lock.json index cb4fac3..346ca08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1040,7 +1040,7 @@ "requires": { "anymatch": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "async-each": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "fsevents": "1.1.3", + "fsevents": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", "glob-parent": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "inherits": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "is-binary-path": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", @@ -2594,21 +2594,28 @@ "dev": true }, "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "version": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", + "integrity": "sha1-MoK3E/s62A7eDp/PRhG1qm/AM/Q=", + "dev": true, + "optional": true, "requires": { "nan": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "node-pre-gyp": "0.6.39" + "node-pre-gyp": "0.6.36" }, "dependencies": { "abbrev": { "version": "1.1.0", - "bundled": true + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", + "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", + "dev": true, + "optional": true }, "ajv": { "version": "4.11.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, "requires": { "co": "4.6.0", "json-stable-stringify": "1.0.1" @@ -2616,15 +2623,23 @@ }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, "aproba": { "version": "1.1.1", - "bundled": true + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", + "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", + "dev": true, + "optional": true }, "are-we-there-yet": { "version": "1.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "optional": true, "requires": { "delegates": "1.0.0", "readable-stream": "2.2.9" @@ -2632,31 +2647,50 @@ }, "asn1": { "version": "0.2.3", - "bundled": true + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true, + "optional": true }, "assert-plus": { "version": "0.2.0", - "bundled": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true }, "asynckit": { "version": "0.4.0", - "bundled": true + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true, + "optional": true }, "aws-sign2": { "version": "0.6.0", - "bundled": true + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true }, "aws4": { "version": "1.6.0", - "bundled": true + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true, + "optional": true }, "balanced-match": { "version": "0.4.2", - "bundled": true + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, "optional": true, "requires": { "tweetnacl": "0.14.5" @@ -2664,21 +2698,27 @@ }, "block-stream": { "version": "0.0.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, "requires": { "inherits": "2.0.3" } }, "boom": { "version": "2.10.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, "requires": { "hoek": "2.16.3" } }, "brace-expansion": { "version": "1.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", + "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", + "dev": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -2686,85 +2726,121 @@ }, "buffer-shims": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true }, "caseless": { "version": "0.12.0", - "bundled": true + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true, + "optional": true }, "co": { "version": "4.6.0", - "bundled": true + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true }, "combined-stream": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, "requires": { "delayed-stream": "1.0.0" } }, "concat-map": { "version": "0.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true }, "core-util-is": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cryptiles": { "version": "2.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "optional": true, "requires": { "boom": "2.10.1" } }, "dashdash": { "version": "1.14.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true } } }, "debug": { "version": "2.6.8", - "bundled": true, + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "optional": true, "requires": { "ms": "2.0.0" } }, "deep-extend": { "version": "0.4.2", - "bundled": true + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true, + "optional": true }, "delayed-stream": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "delegates": { "version": "1.0.0", - "bundled": true - }, - "detect-libc": { - "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true }, "ecc-jsbn": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, "optional": true, "requires": { "jsbn": "0.1.1" @@ -2772,19 +2848,30 @@ }, "extend": { "version": "3.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true, + "optional": true }, "extsprintf": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", + "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "dev": true }, "forever-agent": { "version": "0.6.1", - "bundled": true + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true }, "form-data": { "version": "2.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", @@ -2793,11 +2880,15 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fstream": { "version": "1.0.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, "requires": { "graceful-fs": "4.1.11", "inherits": "2.0.3", @@ -2807,7 +2898,10 @@ }, "fstream-ignore": { "version": "1.0.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", + "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", + "dev": true, + "optional": true, "requires": { "fstream": "1.0.11", "inherits": "2.0.3", @@ -2816,7 +2910,10 @@ }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, "requires": { "aproba": "1.1.1", "console-control-strings": "1.1.0", @@ -2830,20 +2927,28 @@ }, "getpass": { "version": "0.1.7", - "bundled": true, + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0" }, "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true } } }, "glob": { "version": "7.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -2855,15 +2960,23 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true }, "har-schema": { "version": "1.0.5", - "bundled": true + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true }, "har-validator": { "version": "4.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, "requires": { "ajv": "4.11.8", "har-schema": "1.0.5" @@ -2871,11 +2984,17 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true }, "hawk": { "version": "3.1.3", - "bundled": true, + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "optional": true, "requires": { "boom": "2.10.1", "cryptiles": "2.0.5", @@ -2885,11 +3004,16 @@ }, "hoek": { "version": "2.16.3", - "bundled": true + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true }, "http-signature": { "version": "1.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, "requires": { "assert-plus": "0.2.0", "jsprim": "1.4.0", @@ -2898,7 +3022,9 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -2906,34 +3032,51 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true }, "ini": { "version": "1.3.4", - "bundled": true + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true, + "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, "requires": { "number-is-nan": "1.0.1" } }, "is-typedarray": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true }, "isarray": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isstream": { "version": "0.1.2", - "bundled": true + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true }, "jodid25519": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", + "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", + "dev": true, "optional": true, "requires": { "jsbn": "0.1.1" @@ -2941,31 +3084,48 @@ }, "jsbn": { "version": "0.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, "optional": true }, "json-schema": { "version": "0.2.3", - "bundled": true + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true, + "optional": true }, "json-stable-stringify": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, "requires": { "jsonify": "0.0.0" } }, "json-stringify-safe": { "version": "5.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true }, "jsonify": { "version": "0.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true }, "jsprim": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", + "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "dev": true, + "optional": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.0.2", @@ -2975,49 +3135,66 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true } } }, "mime-db": { "version": "1.27.0", - "bundled": true + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", + "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", + "dev": true }, "mime-types": { "version": "2.1.15", - "bundled": true, + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", + "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", + "dev": true, "requires": { "mime-db": "1.27.0" } }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" } }, "ms": { "version": "2.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true }, "node-pre-gyp": { - "version": "0.6.39", - "bundled": true, + "version": "0.6.36", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz", + "integrity": "sha1-22BBEst04NR3VU6bUFsXq936t4Y=", + "dev": true, + "optional": true, "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", "mkdirp": "0.5.1", "nopt": "4.0.1", "npmlog": "4.1.0", @@ -3031,7 +3208,10 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, "requires": { "abbrev": "1.1.0", "osenv": "0.1.4" @@ -3039,7 +3219,10 @@ }, "npmlog": { "version": "4.1.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", + "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", + "dev": true, + "optional": true, "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -3049,34 +3232,53 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true }, "oauth-sign": { "version": "0.8.2", - "bundled": true + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1.0.2" } }, "os-homedir": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true }, "osenv": { "version": "0.1.4", - "bundled": true, + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "optional": true, "requires": { "os-homedir": "1.0.2", "os-tmpdir": "1.0.2" @@ -3084,27 +3286,43 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "performance-now": { "version": "0.2.0", - "bundled": true + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true }, "process-nextick-args": { "version": "1.0.7", - "bundled": true + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true }, "punycode": { "version": "1.4.1", - "bundled": true + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true, + "optional": true }, "qs": { "version": "6.4.0", - "bundled": true + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true }, "rc": { "version": "1.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", + "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", + "dev": true, + "optional": true, "requires": { "deep-extend": "0.4.2", "ini": "1.3.4", @@ -3114,13 +3332,18 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true } } }, "readable-stream": { "version": "2.2.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", + "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", + "dev": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -3133,7 +3356,10 @@ }, "request": { "version": "2.81.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, "requires": { "aws-sign2": "0.6.0", "aws4": "1.6.0", @@ -3161,37 +3387,56 @@ }, "rimraf": { "version": "2.6.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", + "dev": true, "requires": { "glob": "7.1.2" } }, "safe-buffer": { "version": "5.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", + "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", + "dev": true }, "semver": { "version": "5.3.0", - "bundled": true + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true }, "sntp": { "version": "1.0.9", - "bundled": true, + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "optional": true, "requires": { "hoek": "2.16.3" } }, "sshpk": { "version": "1.13.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", + "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", + "dev": true, + "optional": true, "requires": { "asn1": "0.2.3", "assert-plus": "1.0.0", @@ -3206,13 +3451,18 @@ "dependencies": { "assert-plus": { "version": "1.0.0", - "bundled": true + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "optional": true } } }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, "requires": { "code-point-at": "1.1.0", "is-fullwidth-code-point": "1.0.0", @@ -3221,29 +3471,41 @@ }, "string_decoder": { "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", + "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", + "dev": true, "requires": { "safe-buffer": "5.0.1" } }, "stringstream": { "version": "0.0.5", - "bundled": true + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, "requires": { "ansi-regex": "2.1.1" } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true }, "tar": { "version": "2.2.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, "requires": { "block-stream": "0.0.9", "fstream": "1.0.11", @@ -3252,7 +3514,10 @@ }, "tar-pack": { "version": "3.4.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", + "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", + "dev": true, + "optional": true, "requires": { "debug": "2.6.8", "fstream": "1.0.11", @@ -3266,52 +3531,76 @@ }, "tough-cookie": { "version": "2.3.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", + "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "dev": true, + "optional": true, "requires": { "punycode": "1.4.1" } }, "tunnel-agent": { "version": "0.6.0", - "bundled": true, + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "optional": true, "requires": { "safe-buffer": "5.0.1" } }, "tweetnacl": { "version": "0.14.5", - "bundled": true, + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, "optional": true }, "uid-number": { "version": "0.0.6", - "bundled": true + "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", + "dev": true, + "optional": true }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "uuid": { "version": "3.0.1", - "bundled": true + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", + "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", + "dev": true, + "optional": true }, "verror": { "version": "1.3.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", + "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "dev": true, + "optional": true, "requires": { "extsprintf": "1.0.2" } }, "wide-align": { "version": "1.1.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "optional": true, "requires": { "string-width": "1.0.2" } }, "wrappy": { "version": "1.0.2", - "bundled": true + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true } } }, @@ -5088,7 +5377,9 @@ }, "nan": { "version": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", - "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" + "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", + "dev": true, + "optional": true }, "ncname": { "version": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", diff --git a/package.json b/package.json index 01a2dc5..3214de9 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,6 @@ "clarity-icons": "^0.10.6", "clarity-ui": "^0.10.6", "core-js": "^2.4.1", - "fsevents": "^1.1.3", "karma-junit-reporter": "^1.2.0", "rxjs": "^5.4.2", "zone.js": "^0.8.14"