From f9450985f0dd2559561b1df34d0c3a761fe97ef6 Mon Sep 17 00:00:00 2001 From: Pankaj Kumar Rawat Date: Mon, 6 Aug 2018 17:20:53 +0530 Subject: [PATCH] Angular universal integration (#224) Why? In order to support SEO, we should have some provision to allow google crawl the webpages with all the relevant information. This needed a requirement for server side rendered version of this application. This change addresses the need by: Adds Angular universal support. Updated the code using window, document, local storage with Browser platform checks Updated meta information for main app component. [delivers #159558419] --- .vscode/settings.json | 2 +- angular.json | 52 +- firebase.json | 2 +- package.json | 17 +- server.ts | 53 + src/app/app.component.ts | 40 +- src/app/app.module.ts | 7 +- src/app/app.server.module.ts | 20 + src/app/checkout/cart/cart.component.ts | 9 +- .../order-failed/order-failed.component.ts | 13 +- .../payment-modes-list.component.ts | 12 +- src/app/core/services/auth.service.ts | 83 +- src/app/core/services/checkout.service.ts | 18 +- src/app/core/services/product.service.ts | 11 +- .../content-header.component.ts | 9 +- .../product-list/product-list.component.ts | 10 +- src/app/home/home.component.ts | 10 +- .../categories/categories.component.ts | 10 +- .../footer-contact-info.component.ts | 9 +- .../header-search/header-search.component.ts | 15 +- .../profile-dropdown.component.ts | 10 +- src/app/layout/header/header.component.ts | 58 +- .../product/actions/product-actions.spec.ts | 4 +- .../product-details.component.ts | 20 +- .../write-product-review.component.ts | 10 +- .../order-detail/order-detail.component.ts | 12 +- .../components/orders/orders.component.ts | 8 +- src/app/user/services/user.service.ts | 14 +- src/main.server.ts | 1 + src/main.ts | 6 +- src/tsconfig.server.json | 16 + webpack.server.config.js | 32 + yarn.lock | 1224 ++++++++++------- 33 files changed, 1172 insertions(+), 645 deletions(-) create mode 100644 server.ts create mode 100644 src/app/app.server.module.ts create mode 100644 src/main.server.ts create mode 100644 src/tsconfig.server.json create mode 100644 webpack.server.config.js diff --git a/.vscode/settings.json b/.vscode/settings.json index cde8fb71..c6b00f9a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -16,6 +16,6 @@ "*.csproj.user": true, "*.suo": true, ".docker": false, - "docs": false + "docs": true } } diff --git a/angular.json b/angular.json index 93d538d7..f7993043 100644 --- a/angular.json +++ b/angular.json @@ -10,7 +10,7 @@ "build": { "builder": "@angular-devkit/build-angular:browser", "options": { - "outputPath": "dist", + "outputPath": "dist/browser", "index": "src/index.html", "main": "src/main.ts", "tsConfig": "src/tsconfig.app.json", @@ -106,6 +106,56 @@ } } }, + "server": { + "builder": "@angular-devkit/build-angular:server", + "options": { + "outputPath": "dist/server", + "main": "src/main.server.ts", + "tsConfig": "src/tsconfig.server.json" + }, + "configurations": { + "mock-ng-spree": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.mock-ng-spree.ts" + } + ] + }, + "dev-ng-spree": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.dev-ng-spree.ts" + } + ] + }, + "prod-ng-spree": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod-ng-spree.ts" + } + ] + }, + "dev-custom": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.dev-custom.ts" + } + ] + }, + "prod-custom": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod-custom.ts" + } + ] + } + } + }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { diff --git a/firebase.json b/firebase.json index 360bfcfa..2c616de7 100644 --- a/firebase.json +++ b/firebase.json @@ -1,6 +1,6 @@ { "hosting": { - "public": "dist", + "public": "dist/browser", "rewrites": [ { "source": "**", diff --git a/package.json b/package.json index a913c420..c89ef740 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,12 @@ "compodoc": "./node_modules/.bin/compodoc -p src/tsconfig.app.json -d docs/", "sw": "sw-precache --root=dist --config=sw-precache-config.js", "bundle-report": "webpack-bundle-analyzer dist/stats.json", - "static-serve": "cd dist && live-server --port=4200 --host=localhost --entry-file=/index.html" + "static-serve": "cd dist/browser && live-server --port=4200 --host=localhost --entry-file=/index.html", + "start:ssr:prod-custom": "npm run build:client-and-server-bundles:prod-custom && npm run webpack:server && node dist/server", + "start:ssr:prod-ng-spree": "npm run build:client-and-server-bundles:prod-ng-spree && npm run webpack:server && node dist/server", + "build:client-and-server-bundles:prod-custom": "npm run build:prod-custom && ng run angularspree:server:prod-custom", + "build:client-and-server-bundles:prod-ng-spree": "npm run build:prod-ng-spree && ng run angularspree:server:prod-ng-spree", + "webpack:server": "webpack --config webpack.server.config.js --progress --colors" }, "private": true, "dependencies": { @@ -32,6 +37,7 @@ "@angular/http": "^6.1.1", "@angular/platform-browser": "^6.1.1", "@angular/platform-browser-dynamic": "^6.1.1", + "@angular/platform-server": "^6.1.1", "@angular/pwa": "^0.7.2", "@angular/router": "^6.1.1", "@angular/service-worker": "^6.1.1", @@ -41,6 +47,9 @@ "@ngrx/router-store": "^6.1.0", "@ngrx/store": "^6.1.0", "@ngu/carousel": "^1.4.8", + "@nguniversal/common": "^6.0.0", + "@nguniversal/express-engine": "^6.0.0", + "@nguniversal/module-map-ngfactory-loader": "^6.0.0", "@ngx-lite/input-star-rating": "^0.1.5", "@ngx-lite/json-ld": "^0.4.2", "@ngx-progressbar/core": "^5.0.1", @@ -60,6 +69,7 @@ "reselect": "^3.0.1", "rxjs": "^6.2.2", "rxjs-compat": "^6.2.2", + "ts-loader": "^4.4.2", "web-animations-js": "^2.3.1", "webpack-bundle-analyzer": "^2.13.1", "zone.js": "^0.8.26" @@ -96,10 +106,11 @@ "sw-precache": "^5.2.1", "ts-node": "~7.0.0", "tslint": "~5.11.0", - "typescript": "~2.9.0" + "typescript": "~2.9.0", + "webpack-cli": "^3.1.0" }, "description": "Spree for Angular2", "main": "index.js", "repository": "git@github.com:aviabird/angularspree.git", "author": "Pankaj Rawat " -} \ No newline at end of file +} diff --git a/server.ts b/server.ts new file mode 100644 index 00000000..1674d9d7 --- /dev/null +++ b/server.ts @@ -0,0 +1,53 @@ +// These are important and needed before anything else +import 'zone.js/dist/zone-node'; +import 'reflect-metadata'; + +import { enableProdMode } from '@angular/core'; + +import * as express from 'express'; +import { join } from 'path'; + +// Faster server renders w/ Prod mode (dev mode never needed) +enableProdMode(); + +// Express server +const app = express(); + +const PORT = process.env.PORT || 4000; +const DIST_FOLDER = join(process.cwd(), 'dist'); + +// * NOTE :: leave this as require() since this file is built Dynamically from webpack +const { AppServerModuleNgFactory, LAZY_MODULE_MAP } = require('./dist/server/main'); + +// Express Engine +import { ngExpressEngine } from '@nguniversal/express-engine'; +// Import module map for lazy loading +import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader'; + +app.engine('html', ngExpressEngine({ + bootstrap: AppServerModuleNgFactory, + providers: [ + provideModuleMap(LAZY_MODULE_MAP) + ] +})); + +app.set('view engine', 'html'); +app.set('views', join(DIST_FOLDER, 'browser')); + +// TODO: implement data requests securely +app.get('/api/*', (req, res) => { + res.status(404).send('data requests are not supported'); +}); + +// Server static files from /browser +app.get('*.*', express.static(join(DIST_FOLDER, 'browser'))); + +// All regular routes use the Universal engine +app.get('*', (req, res) => { + res.render('index', { req }); +}); + +// Start up the Node server +app.listen(PORT, () => { + console.log(`Node server listening on http://localhost:${PORT}`); +}); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index f3c09d4f..c7d6aba1 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -7,9 +7,10 @@ import { AppState } from './interfaces'; import { Store } from '@ngrx/store'; import { Subscription, Observable } from 'rxjs'; import { CheckoutService } from './core/services/checkout.service'; -import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Component, OnInit, OnDestroy, Inject, PLATFORM_ID } from '@angular/core'; import { Router, NavigationEnd } from '@angular/router'; import { Title, Meta } from '@angular/platform-browser'; +import { isPlatformBrowser } from '../../node_modules/@angular/common'; @Component({ selector: 'app-root', @@ -22,28 +23,33 @@ export class AppComponent implements OnInit, OnDestroy { currentStep: string; checkoutUrls = ['/checkout/cart', '/checkout/address', '/checkout/payment']; layoutState$: Observable; - schema = { - '@context': 'https://schema.org', - '@type': 'Organization', - 'name': environment.appName, - 'url': location.origin - }; + schema = {}; constructor( private router: Router, private checkoutService: CheckoutService, private store: Store, private metaTitle: Title, - private meta: Meta + private meta: Meta, + @Inject(PLATFORM_ID) private platformId: any ) { this.router.events .pipe(filter(e => e instanceof NavigationEnd)) .subscribe((e: NavigationEnd) => { this.currentUrl = e.url; this.findCurrentStep(this.currentUrl); - window.scrollTo(0, 0); + if (isPlatformBrowser(this.platformId)) { + window.scrollTo(0, 0); + } this.addMetaInfo(); }); + + this.schema = { + '@context': 'https://schema.org', + '@type': 'Organization', + 'name': environment.appName, + 'url': isPlatformBrowser(this.platformId) ? location.origin : '' + }; } ngOnInit() { @@ -58,13 +64,15 @@ export class AppComponent implements OnInit, OnDestroy { } addFaviconIcon() { - const link = - document.querySelector(`link[rel*='icon']`) || - (document.createElement('link') as any); - link.type = 'image/x-icon'; - link.rel = 'shortcut icon'; - link.href = environment.config.fevicon; - document.getElementsByTagName('head')[0].appendChild(link); + if (isPlatformBrowser(this.platformId)) { + const link = + document.querySelector(`link[rel*='icon']`) || + (document.createElement('link') as any); + link.type = 'image/x-icon'; + link.rel = 'shortcut icon'; + link.href = environment.config.fevicon; + document.getElementsByTagName('head')[0].appendChild(link); + } } isCheckoutRoute() { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index fd488bd8..4623df06 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -2,7 +2,7 @@ import { AppPreloadingStrategy } from './app_preloading_strategy'; import { myAuthConfig } from './oauth_config'; import { Ng2UiAuthModule } from 'ng2-ui-auth'; import { EffectsModule } from '@ngrx/effects'; -import { BrowserModule } from '@angular/platform-browser'; +import { BrowserModule, BrowserTransferStateModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; @@ -10,6 +10,7 @@ import { RouterModule } from '@angular/router'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { ServiceWorkerModule } from '@angular/service-worker'; import { environment } from '../environments/environment'; +import {TransferHttpCacheModule} from '@nguniversal/common'; // Components import { AppComponent } from './app.component'; @@ -60,7 +61,9 @@ import { ToastrModule } from 'ngx-toastr'; */ EffectsModule.forRoot([]), BrowserAnimationsModule, - BrowserModule, + BrowserModule.withServerTransition({ appId: 'ng-spree' }), + BrowserTransferStateModule, + TransferHttpCacheModule, FormsModule, HttpModule, HomeModule, diff --git a/src/app/app.server.module.ts b/src/app/app.server.module.ts new file mode 100644 index 00000000..8c8f08e4 --- /dev/null +++ b/src/app/app.server.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { ServerModule, ServerTransferStateModule } from '@angular/platform-server'; +import { ModuleMapLoaderModule } from '@nguniversal/module-map-ngfactory-loader'; + +import { AppModule } from './app.module'; +import { AppComponent } from './app.component'; + +@NgModule({ + imports: [ + AppModule, + ServerModule, + ModuleMapLoaderModule, + ServerTransferStateModule + ], + providers: [ + // Add universal-only providers here + ], + bootstrap: [ AppComponent ], +}) +export class AppServerModule {} diff --git a/src/app/checkout/cart/cart.component.ts b/src/app/checkout/cart/cart.component.ts index f3719413..145e51b9 100644 --- a/src/app/checkout/cart/cart.component.ts +++ b/src/app/checkout/cart/cart.component.ts @@ -2,7 +2,8 @@ import { getTotalCartValue, getTotalCartItems, getItemTotal } from './../reducer import { Observable } from 'rxjs'; import { AppState } from './../../interfaces'; import { Store } from '@ngrx/store'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, PLATFORM_ID, Inject } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; @Component({ selector: 'app-cart', @@ -17,14 +18,16 @@ export class CartComponent implements OnInit { shipTotal$: Observable; itemTotal$: Observable; - constructor(private store: Store) { + constructor(private store: Store, @Inject(PLATFORM_ID) private platformId: any) { this.totalCartValue$ = this.store.select(getTotalCartValue); this.totalCartItems$ = this.store.select(getTotalCartItems); this.itemTotal$ = this.store.select(getItemTotal); } ngOnInit() { - this.screenwidth = window.innerWidth; + if (isPlatformBrowser(this.platformId)) { + this.screenwidth = window.innerWidth; + } this.calculateInnerWidth(); } calculateInnerWidth() { diff --git a/src/app/checkout/order-failed/order-failed.component.ts b/src/app/checkout/order-failed/order-failed.component.ts index 4cc5fc2d..d71cc1d7 100644 --- a/src/app/checkout/order-failed/order-failed.component.ts +++ b/src/app/checkout/order-failed/order-failed.component.ts @@ -2,8 +2,9 @@ import { LineItem } from './../../core/models/line_item'; import { Order } from './../../core/models/order'; import { UserService } from './../../user/services/user.service'; import { ActivatedRoute, Router } from '@angular/router'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, PLATFORM_ID, Inject } from '@angular/core'; import { CheckoutService } from '../../core/services/checkout.service'; +import { isPlatformBrowser } from '../../../../node_modules/@angular/common'; @Component({ selector: 'app-order-failed', @@ -20,7 +21,9 @@ export class OrderFailedComponent implements OnInit { private userService: UserService, private activatedRouter: ActivatedRoute, private route: Router, - private checkoutService: CheckoutService) { + private checkoutService: CheckoutService, + @Inject(PLATFORM_ID) private platformId: any + ) { this.activatedRouter.queryParams .subscribe(params => { this.queryParams = params @@ -47,8 +50,10 @@ export class OrderFailedComponent implements OnInit { retryPayment(order: Order) { this.checkoutService.makePayment(+order.total, order.bill_address, order.number) .subscribe((response: any) => { - response = response - window.open(response.url, '_self'); + response = response; + if (isPlatformBrowser(this.platformId)) { + window.open(response.url, '_self'); + } }); } diff --git a/src/app/checkout/payment/payment-modes-list/payment-modes-list.component.ts b/src/app/checkout/payment/payment-modes-list/payment-modes-list.component.ts index dc23752c..3bfd4a41 100644 --- a/src/app/checkout/payment/payment-modes-list/payment-modes-list.component.ts +++ b/src/app/checkout/payment/payment-modes-list/payment-modes-list.component.ts @@ -8,10 +8,11 @@ import { Router } from '@angular/router'; import { PaymentMode } from './../../../core/models/payment_mode'; import { PaymentService } from './../services/payment.service'; import { CheckoutService } from './../../../core/services/checkout.service'; -import { Component, OnInit, Input } from '@angular/core'; +import { Component, OnInit, Input, PLATFORM_ID, Inject } from '@angular/core'; import { Address } from '../../../core/models/address'; import { environment } from '../../../../environments/environment'; import { ToastrService } from 'ngx-toastr'; +import { isPlatformBrowser } from '../../../../../node_modules/@angular/common'; @Component({ selector: 'app-payment-modes-list', @@ -40,7 +41,8 @@ export class PaymentModesListComponent implements OnInit { private router: Router, private store: Store, private checkoutActions: CheckoutActions, - private toastyService: ToastrService) { + private toastyService: ToastrService, + @Inject(PLATFORM_ID) private platformId: any) { this.store.select(getAuthStatus).subscribe((auth) => { this.isAuthenticated = auth; }); @@ -80,7 +82,7 @@ export class PaymentModesListComponent implements OnInit { } else { if (this.paymentAmount < this.freeShippingAmount) { // tslint:disable-next-line:max-line-length - this.toastyService.error(`${this.selectedMode.name} is not available for Order amount less than ${this.currency} ${this.freeShippingAmount}.`, "Order Amount"); + this.toastyService.error(`${this.selectedMode.name} is not available for Order amount less than ${this.currency} ${this.freeShippingAmount}.`, 'Order Amount'); } else if (!this.isShippeble) { this.toastyService.error(`${this.selectedMode.name} is not available for pincode ${shipping_pincode}.`, 'Pincode'); } @@ -100,7 +102,9 @@ export class PaymentModesListComponent implements OnInit { }) ) .subscribe((res) => { - window.open(response.url, '_self'); + if (isPlatformBrowser(this.platformId)) { + window.open(response.url, '_self'); + } }); }) } diff --git a/src/app/core/services/auth.service.ts b/src/app/core/services/auth.service.ts index b4ce25f3..a6b17da7 100644 --- a/src/app/core/services/auth.service.ts +++ b/src/app/core/services/auth.service.ts @@ -1,17 +1,16 @@ -import { of as observableOf, Observable } from "rxjs"; -import { catchError, map, tap } from "rxjs/operators"; -import { Router, ActivatedRoute } from "@angular/router"; -import { Injectable } from "@angular/core"; -import { environment } from "../../../environments/environment"; -import { AppState } from "../../interfaces"; -import { Store } from "@ngrx/store"; -import { AuthActions } from "../../auth/actions/auth.actions"; -import { AuthService as OauthService } from "ng2-ui-auth"; -import { HttpHeaders, HttpClient } from "@angular/common/http"; -import { Authenticate, User } from "../models/user"; -import { delay } from "q"; -import { HttpRequest } from "@angular/common/http/src/request"; -import { ToastrService, ActiveToast } from "ngx-toastr"; +import { of as observableOf, Observable } from 'rxjs'; +import { catchError, map, tap } from 'rxjs/operators'; +import { Router } from '@angular/router'; +import { Injectable, Inject, PLATFORM_ID } from '@angular/core'; +import { AppState } from '../../interfaces'; +import { Store } from '@ngrx/store'; +import { AuthActions } from '../../auth/actions/auth.actions'; +import { AuthService as OauthService } from 'ng2-ui-auth'; +import { HttpHeaders, HttpClient } from '@angular/common/http'; +import { Authenticate, User } from '../models/user'; +import { HttpRequest } from '@angular/common/http/src/request'; +import { ToastrService, ActiveToast } from 'ngx-toastr'; +import { isPlatformBrowser } from '@angular/common'; @Injectable() export class AuthService { @@ -30,7 +29,7 @@ export class AuthService { private oAuthService: OauthService, private toastrService: ToastrService, private router: Router, - private activatedRoute: ActivatedRoute + @Inject(PLATFORM_ID) private platformId: any ) {} /** @@ -42,15 +41,15 @@ export class AuthService { */ login({ email, password }: Authenticate): Observable { const params = { spree_user: { email, password } }; - return this.http.post("login.json", params).pipe( + return this.http.post('login.json', params).pipe( map(user => { this.setTokenInLocalStorage(user); this.store.dispatch(this.actions.loginSuccess()); return user; }), tap( - _ => this.router.navigate(["/"]), - user => this.toastrService.error(user.error.error, "ERROR!") + _ => this.router.navigate(['/']), + user => this.toastrService.error(user.error.error, 'ERROR!') ) ); // catch should be handled here with the http observable @@ -69,7 +68,7 @@ export class AuthService { */ register(data: User): Observable { const params = { spree_user: data }; - return this.http.post("auth/accounts", params).pipe( + return this.http.post('auth/accounts', params).pipe( map(user => { this.setTokenInLocalStorage(user); this.store.dispatch(this.actions.loginSuccess()); @@ -77,7 +76,7 @@ export class AuthService { }), tap( _ => _, - _ => this.toastrService.error("Invalid/Existing data", "ERROR!!") + _ => this.toastrService.error('Invalid/Existing data', 'ERROR!!') ) ); // catch should be handled here with the http observable @@ -94,16 +93,16 @@ export class AuthService { * @memberof AuthService */ forgetPassword(data: User): Observable { - return this.http.post("auth/passwords", { spree_user: data }).pipe( + return this.http.post('auth/passwords', { spree_user: data }).pipe( map(_ => this.toastrService.success( - "Password reset link has be sent to your email.", - "Success" + 'Password reset link has be sent to your email.', + 'Success' ) ), tap( _ => _, - _ => this.toastrService.error("Not a valid email/user", "ERROR!!") + _ => this.toastrService.error('Not a valid email/user', 'ERROR!!') ) ); } @@ -121,13 +120,13 @@ export class AuthService { .pipe( map(_ => this.toastrService.success( - "Password updated success fully!", - "Success" + 'Password updated success fully!', + 'Success' ) ), tap( _ => _, - _ => this.toastrService.error("Unable to update password", "ERROR!") + _ => this.toastrService.error('Unable to update password', 'ERROR!') ) ); } @@ -141,7 +140,7 @@ export class AuthService { */ authorized(): Observable { return this.http - .get("auth/authenticated") + .get('auth/authenticated') .pipe(map((res: Response) => res)); // catch should be handled here with the http observable // so that only the inner obs dies and not the effect Observable @@ -157,10 +156,12 @@ export class AuthService { * @memberof AuthService */ logout() { - return this.http.get("logout.json").pipe( + return this.http.get('logout.json').pipe( map((res: Response) => { // Setting token after login - localStorage.removeItem("user"); + if (isPlatformBrowser(this.platformId)) { + localStorage.removeItem('user'); + } this.store.dispatch(this.actions.logoutSuccess()); return res; }) @@ -174,19 +175,21 @@ export class AuthService { * @memberof AuthService */ getTokenHeader(request: HttpRequest): HttpHeaders { + const userJson = isPlatformBrowser(this.platformId) ? localStorage.getItem('user') : '{}'; + const user: User = - ["undefined", null].indexOf(localStorage.getItem("user")) === -1 - ? JSON.parse(localStorage.getItem("user")) + ['undefined', null].indexOf(userJson) === -1 + ? JSON.parse(userJson) : {}; return new HttpHeaders({ - "Content-Type": request.headers.get("Content-Type") || "application/json", - "token-type": "Bearer", + 'Content-Type': request.headers.get('Content-Type') || 'application/json', + 'token-type': 'Bearer', access_token: user.access_token || [], client: user.client || [], uid: user.uid || [], - "Auth-Token": user.spree_api_key || [], - "ng-api": "true" + 'Auth-Token': user.spree_api_key || [], + 'ng-api': 'true' }); } @@ -200,7 +203,9 @@ export class AuthService { */ private setTokenInLocalStorage(user_data: any): void { const jsonData = JSON.stringify(user_data); - localStorage.setItem("user", jsonData); + if (isPlatformBrowser(this.platformId)) { + localStorage.setItem('user', jsonData); + } } socialLogin(provider: string) { @@ -210,8 +215,8 @@ export class AuthService { return user; }), catchError(_ => { - this.toastrService.error("Social login failed", "ERROR!"); - return observableOf("Social login failed"); + this.toastrService.error('Social login failed', 'ERROR!'); + return observableOf('Social login failed'); }) ); } diff --git a/src/app/core/services/checkout.service.ts b/src/app/core/services/checkout.service.ts index efd88136..cb35f315 100644 --- a/src/app/core/services/checkout.service.ts +++ b/src/app/core/services/checkout.service.ts @@ -1,16 +1,16 @@ import { map, tap } from 'rxjs/operators'; -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; import { getOrderNumber } from './../../checkout/reducers/selectors'; import { CheckoutActions } from './../../checkout/actions/checkout.actions'; -import { Injectable } from '@angular/core'; +import { Injectable, Inject, PLATFORM_ID } from '@angular/core'; import { LineItem } from './../models/line_item'; import { AppState } from './../../interfaces'; import { Store } from '@ngrx/store'; import { Order } from '../models/order'; import { ToastrService } from 'ngx-toastr'; -import { Address } from '../models/address'; import * as CryptoJS from 'crypto-js'; import { environment } from '../../../environments/environment'; +import { isPlatformBrowser } from '@angular/common'; @Injectable() export class CheckoutService { @@ -28,7 +28,8 @@ export class CheckoutService { private http: HttpClient, private actions: CheckoutActions, private store: Store, - private toastyService: ToastrService) { + private toastyService: ToastrService, + @Inject(PLATFORM_ID) private platformId: any) { this.store.select(getOrderNumber) .subscribe(number => (this.orderNumber = number)); } @@ -101,7 +102,6 @@ export class CheckoutService { * @memberof CheckoutService */ createEmptyOrder() { - const user = JSON.parse(localStorage.getItem('user')); const headers = new HttpHeaders().set('Content-Type', 'text/plain'); return this.http @@ -233,7 +233,7 @@ export class CheckoutService { amount: paymentAmount, productinfo: `${environment.appName}-Product`, firstname: address.firstname, - email: JSON.parse(localStorage.getItem('user')).email, + email: isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('user')).email : '', udf1: `${orderNumber}` } // tslint:disable-next-line:max-line-length @@ -269,7 +269,7 @@ export class CheckoutService { * @memberof CheckoutService */ private getOrderToken() { - const order = JSON.parse(localStorage.getItem('order')); + const order = isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('order')) : {}; const token = order.order_token; return token; } @@ -288,6 +288,8 @@ export class CheckoutService { */ private setOrderTokenInLocalStorage(token: any): void { const jsonData = JSON.stringify(token); - localStorage.setItem('order', jsonData); + if (isPlatformBrowser(this.platformId)) { + localStorage.setItem('order', jsonData) ; + } } } diff --git a/src/app/core/services/product.service.ts b/src/app/core/services/product.service.ts index cf7f2747..fc23acd9 100644 --- a/src/app/core/services/product.service.ts +++ b/src/app/core/services/product.service.ts @@ -5,7 +5,7 @@ import { Taxonomy } from './../models/taxonomy'; import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Product } from '../models/product'; -import { map, tap } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; import { Observable } from 'rxjs'; @Injectable() @@ -19,7 +19,7 @@ export class ProductService { constructor( private http: HttpClient, private toastrService: ToastrService, - private apiParser: JsonApiParserService + private apiParser: JsonApiParserService, ) { } // tslint:disable-next-line:member-ordering success: any; @@ -38,7 +38,12 @@ export class ProductService { .get<{ data: CJsonApi }>( `api/v1/products/${id}?data_set=large&${+new Date()}` ) - .pipe(map(resp => this.apiParser.parseSingleObj(resp.data) as Product)); + .pipe( + map(resp => { + const product = this.apiParser.parseSingleObj(resp.data) as Product; + return product; + }) + ); } getProductReviews(products): Observable { diff --git a/src/app/home/content/content-header/content-header.component.ts b/src/app/home/content/content-header/content-header.component.ts index 0acc12ae..7b9fef53 100644 --- a/src/app/home/content/content-header/content-header.component.ts +++ b/src/app/home/content/content-header/content-header.component.ts @@ -1,5 +1,6 @@ import { Router } from '@angular/router'; -import { Component, OnInit, Output, EventEmitter, Input, ChangeDetectionStrategy } from '@angular/core'; +import { Component, OnInit, Output, EventEmitter, Input, ChangeDetectionStrategy, PLATFORM_ID, Inject } from '@angular/core'; +import { isPlatformBrowser } from '../../../../../node_modules/@angular/common'; @Component({ selector: 'app-content-header', templateUrl: './content-header.component.html', @@ -40,7 +41,7 @@ export class ContentHeaderComponent implements OnInit { isfilterModalShown; issortModalShown defaultselectedEntry = 'Relevance'; - constructor(private routernomal: Router) { } + constructor(private routernomal: Router, @Inject(PLATFORM_ID) private platformId: any) { } sortModalShow() { this.issortModalShown = true; } sortModalhide() { this.issortModalShown = false; } @@ -61,7 +62,9 @@ export class ContentHeaderComponent implements OnInit { ngOnInit() { if (window.screen.width <= 768) { - this.screenWidth = window.screen.width; + if (isPlatformBrowser(this.platformId)) { + this.screenWidth = window.screen.width; + } } } diff --git a/src/app/home/content/product-list/product-list.component.ts b/src/app/home/content/product-list/product-list.component.ts index 68970c3e..1db34dc9 100644 --- a/src/app/home/content/product-list/product-list.component.ts +++ b/src/app/home/content/product-list/product-list.component.ts @@ -1,9 +1,10 @@ import { CheckoutActions } from './../../../checkout/actions/checkout.actions'; import { AppState } from './../../../interfaces'; import { Store } from '@ngrx/store'; -import { Component, OnInit, Input, ChangeDetectionStrategy } from '@angular/core'; +import { Component, OnInit, Input, ChangeDetectionStrategy, Inject, PLATFORM_ID } from '@angular/core'; import { Router, ActivatedRoute } from '@angular/router'; import { environment } from '../../../../environments/environment'; +import { isPlatformBrowser } from '../../../../../node_modules/@angular/common'; @Component({ selector: 'app-product-list', templateUrl: './product-list.component.html', @@ -25,7 +26,8 @@ export class ProductListComponent implements OnInit { private store: Store, private checkoutActions: CheckoutActions, private router: ActivatedRoute, - private routernomal: Router) { + private routernomal: Router, + @Inject(PLATFORM_ID) private platformId: any) { this.router.queryParams .subscribe(params => { this.queryParams = params @@ -33,7 +35,9 @@ export class ProductListComponent implements OnInit { } ngOnInit() { - this.screenwidth = window.innerWidth; + if (isPlatformBrowser(this.platformId)) { + this.screenwidth = window.innerWidth; + } this.calculateInnerWidth(); } calculateInnerWidth() { diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 283d08c4..bf386f4d 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -13,9 +13,10 @@ import { AppState } from './../interfaces'; import { getTaxonomies, rootTaxonomyId } from './../product/reducers/selectors'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { Component, OnInit, ViewChild, ChangeDetectionStrategy } from '@angular/core'; +import { Component, OnInit, ViewChild, ChangeDetectionStrategy, PLATFORM_ID, Inject } from '@angular/core'; import { ModalDirective } from 'ngx-bootstrap/modal'; import { Product } from '../core/models/product'; +import { isPlatformBrowser } from '../../../node_modules/@angular/common'; @Component({ selector: 'app-home', @@ -40,7 +41,8 @@ export class HomeComponent implements OnInit { constructor( private store: Store, private actions: ProductActions, - private searchActions: SearchActions) { + private searchActions: SearchActions, + @Inject(PLATFORM_ID) private platformId: any) { this.store.dispatch(this.actions.getAllProducts(1)); this.store.dispatch(this.actions.getAllTaxonomies()); this.taxonomies$ = this.store.select(getTaxonomies); @@ -74,7 +76,9 @@ export class HomeComponent implements OnInit { this.isModalShown = false; } ngOnInit() { - this.screenwidth = window.innerWidth; + if (isPlatformBrowser(this.platformId)) { + this.screenwidth = window.innerWidth; + } this.calculateInnerWidth(); } diff --git a/src/app/home/sidebar/categories/categories.component.ts b/src/app/home/sidebar/categories/categories.component.ts index 229717a6..200ab027 100644 --- a/src/app/home/sidebar/categories/categories.component.ts +++ b/src/app/home/sidebar/categories/categories.component.ts @@ -2,8 +2,9 @@ import { ActivatedRoute } from '@angular/router'; import { AppState } from './../../../interfaces'; import { Store } from '@ngrx/store'; import { SearchActions } from './../../reducers/search.actions'; -import { Component, OnInit, Input, EventEmitter, Output, OnChanges } from '@angular/core'; +import { Component, OnInit, Input, EventEmitter, Output, OnChanges, Inject, PLATFORM_ID } from '@angular/core'; import { URLSearchParams } from '@angular/http' +import { isPlatformBrowser } from '../../../../../node_modules/@angular/common'; @Component({ @@ -25,7 +26,8 @@ export class CategoriesComponent implements OnInit { constructor( private searchActions: SearchActions, private store: Store, - private router: ActivatedRoute + private router: ActivatedRoute, + @Inject(PLATFORM_ID) private platformId: any ) { this.router.queryParams .subscribe(params => { @@ -40,7 +42,9 @@ export class CategoriesComponent implements OnInit { } showAllCategory() { this.showAll.emit() - window.location.reload(); + if (isPlatformBrowser(this.platformId)) { + window.location.reload(); + } } /** diff --git a/src/app/layout/footer/component/footer-contact-info/footer-contact-info.component.ts b/src/app/layout/footer/component/footer-contact-info/footer-contact-info.component.ts index 97b71841..48ca7cc0 100644 --- a/src/app/layout/footer/component/footer-contact-info/footer-contact-info.component.ts +++ b/src/app/layout/footer/component/footer-contact-info/footer-contact-info.component.ts @@ -1,5 +1,6 @@ import { environment } from './../../../../../environments/environment'; -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, Inject, PLATFORM_ID } from '@angular/core'; +import { isPlatformBrowser } from '../../../../../../node_modules/@angular/common'; @Component({ selector: 'app-footer-contact-info', @@ -8,11 +9,13 @@ import { Component, OnInit } from '@angular/core'; }) export class FooterContactInfoComponent implements OnInit { contact_info = environment.config.contact_info - constructor() { } + constructor(@Inject(PLATFORM_ID) private platformId: any) { } ngOnInit() { } scollTop() { - window.scrollTo({ top: 0, behavior: 'smooth' }) + if (isPlatformBrowser(this.platformId)) { + window.scrollTo({ top: 0, behavior: 'smooth' }) + } } } diff --git a/src/app/layout/header/components/header-search/header-search.component.ts b/src/app/layout/header/components/header-search/header-search.component.ts index 1e13bd23..4ad674cd 100644 --- a/src/app/layout/header/components/header-search/header-search.component.ts +++ b/src/app/layout/header/components/header-search/header-search.component.ts @@ -1,9 +1,10 @@ +import { isPlatformBrowser } from '@angular/common'; import { environment } from './../../../../../environments/environment'; import { Router, ActivatedRoute } from '@angular/router'; import { SearchActions } from './../../../../home/reducers/search.actions'; import { AppState } from './../../../../interfaces'; import { Store } from '@ngrx/store'; -import { Directive, Renderer2, ElementRef } from '@angular/core'; +import { Directive, Renderer2, ElementRef, PLATFORM_ID, Inject } from '@angular/core'; import { Component, OnInit, @@ -32,7 +33,7 @@ export class HeaderSearchComponent implements OnInit { private router: Router, private activatedRouter: ActivatedRoute, private renderer: Renderer2, - private el: ElementRef + @Inject(PLATFORM_ID) private platformId: any ) { this.activatedRouter.queryParams.subscribe(params => { this.queryParams = params; @@ -45,10 +46,12 @@ export class HeaderSearchComponent implements OnInit { showsearch() { this.isSearchopen = !this.isSearchopen; this.onSubCatClicked.emit(false); - if (this.isSearchopen) { - this.renderer.addClass(document.body, 'issearchopen'); - } else { - this.renderer.removeClass(document.body, 'issearchopen'); + if (isPlatformBrowser(this.platformId)) { + if (this.isSearchopen) { + this.renderer.addClass(document.body, 'issearchopen'); + } else { + this.renderer.removeClass(document.body, 'issearchopen'); + } } } diff --git a/src/app/layout/header/components/profile-dropdown/profile-dropdown.component.ts b/src/app/layout/header/components/profile-dropdown/profile-dropdown.component.ts index 571e4f0a..8e5b2dd9 100644 --- a/src/app/layout/header/components/profile-dropdown/profile-dropdown.component.ts +++ b/src/app/layout/header/components/profile-dropdown/profile-dropdown.component.ts @@ -1,5 +1,6 @@ +import { isPlatformBrowser } from '@angular/common'; import { Router } from '@angular/router'; -import { Component, OnInit, Input, OnChanges, ChangeDetectionStrategy } from '@angular/core'; +import { Component, OnInit, Input, OnChanges, ChangeDetectionStrategy, Inject, PLATFORM_ID } from '@angular/core'; import { AuthService } from '../../../../core/services/auth.service'; @Component({ @@ -16,17 +17,16 @@ export class ProfileDropdownComponent implements OnInit, OnChanges { subnav: boolean; isOpen: boolean; - constructor(private authService: AuthService, private router: Router) { + constructor(private authService: AuthService, private router: Router, @Inject(PLATFORM_ID) private platformId: any) { } ngOnInit() { } onOpenChange(data: boolean): void { - this.isOpen = !this.isOpen; } ngOnChanges() { - this.currentUser = JSON.parse(localStorage.getItem('user')) + this.currentUser = isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('user')) : null; if (this.currentUser) { this.email = this.currentUser.email.split('@')[0]; } @@ -36,7 +36,7 @@ export class ProfileDropdownComponent implements OnInit, OnChanges { this.subnav = !this.subnav; this.authService.logout(). - subscribe(res=>{ + subscribe(res => { this.router.navigate(['auth', 'login']); }); } diff --git a/src/app/layout/header/header.component.ts b/src/app/layout/header/header.component.ts index ed71acf8..41511b8f 100644 --- a/src/app/layout/header/header.component.ts +++ b/src/app/layout/header/header.component.ts @@ -17,12 +17,14 @@ import { getAuthStatus } from '../../auth/reducers/selectors'; import { Observable } from 'rxjs'; import { AuthService } from '../../core/services/auth.service'; import { AuthActions } from '../../auth/actions/auth.actions'; -import { TemplateRef } from '@angular/core'; +import { TemplateRef, Inject, PLATFORM_ID } from '@angular/core'; import { BsModalService } from 'ngx-bootstrap/modal'; import { BsModalRef } from 'ngx-bootstrap/modal/bs-modal-ref.service'; import { Directive, Renderer2, ElementRef } from '@angular/core'; import { ModalDirective } from 'ngx-bootstrap/modal'; import { LayoutState } from '../reducers/layout.state'; +import { isPlatformBrowser } from '../../../../node_modules/@angular/common'; + @Component({ selector: 'app-header', templateUrl: './header.component.html', @@ -59,20 +61,22 @@ export class HeaderComponent implements OnInit { constructor( private store: Store, - private authService: AuthService, private authActions: AuthActions, private searchActions: SearchActions, private actions: ProductActions, private router: Router, private modalService: BsModalService, - private renderer: Renderer2 + private renderer: Renderer2, + @Inject(PLATFORM_ID) private platformId: any ) { this.taxonomies$ = this.store.select(getTaxonomies); this.store.dispatch(this.actions.getAllTaxonomies()); - if (this.isSearchopen) { - this.renderer.addClass(document.body, 'issearchopen'); - } else { - this.renderer.removeClass(document.body, 'issearchopen'); + if (isPlatformBrowser(this.platformId)) { + if (this.isSearchopen) { + this.renderer.addClass(document.body, 'issearchopen'); + } else { + this.renderer.removeClass(document.body, 'issearchopen'); + } } } @@ -87,7 +91,9 @@ export class HeaderComponent implements OnInit { this.store.dispatch(this.authActions.login()); this.isAuthenticated = this.store.select(getAuthStatus); this.totalCartItems = this.store.select(getTotalCartItems); - this.screenwidth = window.innerWidth; + if (isPlatformBrowser(this.platformId)) { + this.screenwidth = window.innerWidth; + } this.calculateInnerWidth(); } calculateInnerWidth() { @@ -103,15 +109,17 @@ export class HeaderComponent implements OnInit { showModal(): void { this.isModalShown = !this.isModalShown; this.isSearchopen = !this.isSearchopen; - if (this.isModalShown) { - this.renderer.addClass(document.body, 'isModalShown'); - } else { - this.renderer.removeClass(document.body, 'isModalShown'); - } - if (this.isSearchopen) { - this.renderer.addClass(document.body, 'issearchopen'); - } else { - this.renderer.removeClass(document.body, 'issearchopen'); + if (isPlatformBrowser(this.platformId)) { + if (this.isModalShown) { + this.renderer.addClass(document.body, 'isModalShown'); + } else { + this.renderer.removeClass(document.body, 'isModalShown'); + } + if (this.isSearchopen) { + this.renderer.addClass(document.body, 'issearchopen'); + } else { + this.renderer.removeClass(document.body, 'issearchopen'); + } } } @@ -124,9 +132,9 @@ export class HeaderComponent implements OnInit { updateHeader(evt) { if (this.screenwidth >= 1000) { - this.currPos = - (window.pageYOffset || evt.target.scrollTop) - - (evt.target.clientTop || 0); + if (isPlatformBrowser(this.platformId)) { + this.currPos = (window.pageYOffset || evt.target.scrollTop) - (evt.target.clientTop || 0); + } if (this.currPos >= this.changePos) { this.isScrolled = true; } else { @@ -141,10 +149,12 @@ export class HeaderComponent implements OnInit { allmenuClosed(status) { this.isModalShown = status; this.isSearchopen = !status; - if (this.isSearchopen) { - this.renderer.addClass(document.body, 'issearchopen'); - } else { - this.renderer.removeClass(document.body, 'issearchopen'); + if (isPlatformBrowser(this.platformId)) { + if (this.isSearchopen) { + this.renderer.addClass(document.body, 'issearchopen'); + } else { + this.renderer.removeClass(document.body, 'issearchopen'); + } } } } diff --git a/src/app/product/actions/product-actions.spec.ts b/src/app/product/actions/product-actions.spec.ts index 0e391ca3..8fae51f2 100644 --- a/src/app/product/actions/product-actions.spec.ts +++ b/src/app/product/actions/product-actions.spec.ts @@ -34,7 +34,7 @@ fdescribe('products', () => { fdescribe('get product detail action', () => { fit('should trigger get product details action', () => { - let id = 'some id'; + const id = 'some id'; expect(actions.getProductDetail(id)).toEqual({ type: ProductActions.GET_PRODUCT_DETAIL, payload: id @@ -44,7 +44,7 @@ fdescribe('products', () => { fdescribe('get product detail success action', () => { fit('should trigger get product details success action', () => { - expect(actions.getProductDetailSuccess(product)).toEqual({ + expect(actions.getProductDetailSuccess(product as any)).toEqual({ type: ProductActions.GET_PRODUCT_DETAIL_SUCCESS, payload: product }); diff --git a/src/app/product/components/product-detail-page/product-details/product-details.component.ts b/src/app/product/components/product-detail-page/product-details/product-details.component.ts index acbc2898..5a0694c7 100644 --- a/src/app/product/components/product-detail-page/product-details/product-details.component.ts +++ b/src/app/product/components/product-detail-page/product-details/product-details.component.ts @@ -13,7 +13,9 @@ import { Component, OnInit, Input, - ChangeDetectionStrategy + ChangeDetectionStrategy, + PLATFORM_ID, + Inject } from '@angular/core'; import { Product } from './../../../../core/models/product'; @@ -21,9 +23,9 @@ import { ProductService } from './../../../../core/services/product.service'; import { Meta, Title } from '@angular/platform-browser'; import { environment } from '../../../../../environments/environment'; import { Taxon } from '../../../../core/models/taxon'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { CheckoutService } from '../../../../core/services/checkout.service'; +import { FormGroup } from '@angular/forms'; import { getLineItems } from '../../../../checkout/reducers/selectors'; +import { isPlatformBrowser } from '@angular/common'; @Component({ selector: 'app-product-details', @@ -62,13 +64,15 @@ export class ProductDetailsComponent implements OnInit { private productsActions: ProductActions, private meta: Meta, private title: Title, - + @Inject(PLATFORM_ID) private platformId: any ) { } ngOnInit() { - this.screenwidth = window.innerWidth; + if (isPlatformBrowser(this.platformId)) { + this.screenwidth = window.innerWidth; + } this.calculateInnerWidth(); this.addMetaInfo(this.product); this.initData(); @@ -186,7 +190,7 @@ export class ProductDetailsComponent implements OnInit { this.schema = { '@context': 'https://schema.org', '@type': 'Product', - 'url': location.href, + 'url': isPlatformBrowser(this.platformId) ? location.href : '', 'itemCondition': 'https://schema.org/NewCondition', 'aggregateRating': { '@type': 'AggregateRating', @@ -207,7 +211,9 @@ export class ProductDetailsComponent implements OnInit { } scrollToReviewMobile() { - document.getElementById('review').scrollIntoView({ behavior: 'smooth' }); + if (isPlatformBrowser(this.platformId)) { + document.getElementById('review').scrollIntoView({ behavior: 'smooth' }); + } } findBrand() { diff --git a/src/app/product/components/product-detail-page/write-product-review/write-product-review.component.ts b/src/app/product/components/product-detail-page/write-product-review/write-product-review.component.ts index 1cad5239..8f799d76 100644 --- a/src/app/product/components/product-detail-page/write-product-review/write-product-review.component.ts +++ b/src/app/product/components/product-detail-page/write-product-review/write-product-review.component.ts @@ -1,8 +1,9 @@ +import { isPlatformBrowser } from '@angular/common'; import { ToastrService } from 'ngx-toastr'; import { ActivatedRoute, Router } from '@angular/router'; import { ProductService } from './../../../../core/services/product.service'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; -import { Component, OnInit, Input, ChangeDetectionStrategy } from '@angular/core'; +import { Component, OnInit, Input, ChangeDetectionStrategy, PLATFORM_ID, Inject } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '../../../../interfaces'; import { switchMap } from 'rxjs/operators'; @@ -30,7 +31,8 @@ export class WriteProductReviewComponent implements OnInit { private activeRoute: ActivatedRoute, private toastrService: ToastrService, private router: Router, - private store: Store + private store: Store, + @Inject(PLATFORM_ID) private platformId: any ) { this.store.select(getAuthStatus).subscribe(auth => { this.isAuthenticated = auth; @@ -55,7 +57,7 @@ export class WriteProductReviewComponent implements OnInit { if (this.isAuthenticated) { this.reviewForm = this.fb.group({ rating: [rating, Validators.required], - name: [JSON.parse(localStorage.getItem('user')).email], + name: [isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('user')).email : ''], title: [title, Validators.required], review: [review, Validators.required] } @@ -75,7 +77,7 @@ export class WriteProductReviewComponent implements OnInit { name: formData.name, title: formData.title, review: formData.review, - user_id: JSON.parse(localStorage.getItem('user')).id + user_id: isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('user')).id : null } } } diff --git a/src/app/user/components/orders/order-detail/order-detail.component.ts b/src/app/user/components/orders/order-detail/order-detail.component.ts index 7419098f..b253219e 100644 --- a/src/app/user/components/orders/order-detail/order-detail.component.ts +++ b/src/app/user/components/orders/order-detail/order-detail.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { Component, OnInit, OnDestroy, Inject, PLATFORM_ID } from '@angular/core'; import { UserService } from '../../../services/user.service'; import { Order } from '../../../../core/models/order'; import { ActivatedRoute } from '@angular/router'; @@ -23,7 +24,8 @@ export class OrderDetailComponent implements OnInit, OnDestroy { constructor( private userService: UserService, private route: ActivatedRoute, - private checkoutService: CheckoutService + private checkoutService: CheckoutService, + @Inject(PLATFORM_ID) private platformId: any ) { } ngOnInit() { @@ -50,8 +52,10 @@ export class OrderDetailComponent implements OnInit, OnDestroy { retryPayment(order: Order) { this.checkoutService.makePayment(+order.total, order.bill_address, order.number) .subscribe((response: any) => { - response = response - window.open(response.url, '_self'); + response = response; + if (isPlatformBrowser(this.platformId)) { + window.open(response.url, '_self'); + } }); } } diff --git a/src/app/user/components/orders/orders.component.ts b/src/app/user/components/orders/orders.component.ts index ba04cfec..435c0dd1 100644 --- a/src/app/user/components/orders/orders.component.ts +++ b/src/app/user/components/orders/orders.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit } from '@angular/core'; +import { isPlatformBrowser } from '@angular/common'; +import { Component, OnInit, Inject, PLATFORM_ID } from '@angular/core'; import { Store } from '@ngrx/store'; import { AppState } from '../../../interfaces'; import { UserActions } from '../../actions/user.actions'; @@ -18,7 +19,8 @@ export class OrdersComponent implements OnInit { constructor( private store: Store, - private userActions: UserActions + private userActions: UserActions, + @Inject(PLATFORM_ID) private platformId: any ) { this.orders$ = this.store.select(getUserOrders); @@ -26,7 +28,7 @@ export class OrdersComponent implements OnInit { } ngOnInit() { - if (JSON.parse(localStorage.getItem('user'))) { + if (isPlatformBrowser(this.platformId) && JSON.parse(localStorage.getItem('user'))) { this.email = JSON.parse(localStorage.getItem('user')).email this.store.dispatch(this.userActions.getUserOrders(this.email, 1)); } diff --git a/src/app/user/services/user.service.ts b/src/app/user/services/user.service.ts index 09f03493..6a4e733c 100644 --- a/src/app/user/services/user.service.ts +++ b/src/app/user/services/user.service.ts @@ -1,23 +1,19 @@ import { HttpClient } from '@angular/common/http'; -import { Injectable } from '@angular/core'; -import { UserActions } from '../actions/user.actions'; -import { Store } from '@ngrx/store'; -import { AppState } from '../../interfaces'; +import { Injectable, PLATFORM_ID, Inject } from '@angular/core'; import { Order } from '../../core/models/order'; -import { Response } from '@angular/http'; import { User } from '../../core/models/user'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { ToastrService } from 'ngx-toastr'; +import { isPlatformBrowser } from '@angular/common'; @Injectable() export class UserService { constructor( private http: HttpClient, - private actions: UserActions, - private store: Store, - private toastrService: ToastrService + private toastrService: ToastrService, + @Inject(PLATFORM_ID) private platformId: any ) { } /** @@ -54,7 +50,7 @@ export class UserService { * @memberof UserService */ getUser(): Observable { - const user_id = JSON.parse(localStorage.getItem('user')).id; + const user_id = isPlatformBrowser(this.platformId) ? JSON.parse(localStorage.getItem('user')).id : null; return this.http.get(`api/v1/users/${user_id}`); } diff --git a/src/main.server.ts b/src/main.server.ts new file mode 100644 index 00000000..d7c01cde --- /dev/null +++ b/src/main.server.ts @@ -0,0 +1 @@ +export { AppServerModule } from './app/app.server.module'; diff --git a/src/main.ts b/src/main.ts index a9ca1caf..d16fcd3a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,4 +8,8 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule); +document.addEventListener('DOMContentLoaded', () => { + platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch(err => console.log(err)); +}); diff --git a/src/tsconfig.server.json b/src/tsconfig.server.json new file mode 100644 index 00000000..4401f4ca --- /dev/null +++ b/src/tsconfig.server.json @@ -0,0 +1,16 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/app", + "baseUrl": "./", + "module": "commonjs", + "types": [] + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ], + "angularCompilerOptions": { + "entryModule": "app/app.server.module#AppServerModule" + } +} diff --git a/webpack.server.config.js b/webpack.server.config.js new file mode 100644 index 00000000..0cb1717a --- /dev/null +++ b/webpack.server.config.js @@ -0,0 +1,32 @@ +const path = require('path'); +const webpack = require('webpack'); + +module.exports = { + entry: { server: './server.ts' }, + resolve: { extensions: ['.js', '.ts'] }, + target: 'node', + mode: 'none', + // this makes sure we include node_modules and other 3rd party libraries + externals: [/node_modules/], + output: { + path: path.join(__dirname, 'dist'), + filename: '[name].js' + }, + module: { + rules: [{ test: /\.ts$/, loader: 'ts-loader' }] + }, + plugins: [ + // Temporary Fix for issue: https://github.com/angular/angular/issues/11580 + // for 'WARNING Critical dependency: the request of a dependency is an expression' + new webpack.ContextReplacementPlugin( + /(.+)?angular(\\|\/)core(.+)?/, + path.join(__dirname, 'src'), // location of your src + {} // a map of your routes + ), + new webpack.ContextReplacementPlugin( + /(.+)?express(\\|\/)(.+)?/, + path.join(__dirname, 'src'), + {} + ) + ] +}; diff --git a/yarn.lock b/yarn.lock index 2f002ff2..5924ebeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -171,6 +171,14 @@ dependencies: tslib "^1.9.0" +"@angular/platform-server@^6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-6.1.1.tgz#fb5d0aac97bd36d281871594c83333b40e674ee2" + dependencies: + domino "^2.0.1" + tslib "^1.9.0" + xhr2 "^0.1.4" + "@angular/pwa@^0.7.2": version "0.7.2" resolved "https://registry.yarnpkg.com/@angular/pwa/-/pwa-0.7.2.tgz#a30655517abf3162c5f06ed86716f38e0ab90c6d" @@ -288,6 +296,18 @@ version "1.4.8" resolved "https://registry.yarnpkg.com/@ngu/carousel/-/carousel-1.4.8.tgz#102a2472e319fa2c048d59b5c1c347f2ef60f922" +"@nguniversal/common@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nguniversal/common/-/common-6.0.0.tgz#50e4b80d08618064e3404306b24b97877db9007d" + +"@nguniversal/express-engine@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nguniversal/express-engine/-/express-engine-6.0.0.tgz#f8bc7b5e940afb1ffdbdcb1bb22665d440ea0b0b" + +"@nguniversal/module-map-ngfactory-loader@^6.0.0": + version "6.0.0" + resolved "https://registry.yarnpkg.com/@nguniversal/module-map-ngfactory-loader/-/module-map-ngfactory-loader-6.0.0.tgz#0dd26c3f1c26d17bb21b8dfc0da53d82b7f11028" + "@ngx-lite/input-star-rating@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@ngx-lite/input-star-rating/-/input-star-rating-0.1.5.tgz#dbfa3e74a540e619d332058bc5af49de3cb2fa9d" @@ -332,12 +352,12 @@ semver-intersect "^1.1.2" "@types/crypto-js@^3.1.40": - version "3.1.40" - resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-3.1.40.tgz#4ce5f484af057b3013798bc28cd0516deba950d1" + version "3.1.43" + resolved "https://registry.yarnpkg.com/@types/crypto-js/-/crypto-js-3.1.43.tgz#b859347d6289ba13e347c335a4c9efa63337a748" "@types/fs-extra@^5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.2.tgz#235a7e2b56452cc0a6a4809b53e1d1eaffff9c96" + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.4.tgz#b971134d162cc0497d221adde3dbb67502225599" dependencies: "@types/node" "*" @@ -345,11 +365,7 @@ version "2.0.35" resolved "https://registry.yarnpkg.com/@types/grecaptcha/-/grecaptcha-2.0.35.tgz#f63fcd8f11e0aa62b6d8746267142440d8d89975" -"@types/jasmine@*": - version "2.8.6" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.6.tgz#14445b6a1613cf4e05dd61c3c3256d0e95c0421e" - -"@types/jasmine@~2.8.8": +"@types/jasmine@*", "@types/jasmine@~2.8.8": version "2.8.8" resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.8.tgz#bf53a7d193ea8b03867a38bfdb4fbb0e0bf066c9" @@ -363,18 +379,14 @@ version "0.5.7" resolved "https://registry.yarnpkg.com/@types/morris.js/-/morris.js-0.5.7.tgz#9cc9ccdaf8f3691ba37d21ed5e98c287549292ce" -"@types/node@*": - version "10.0.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.0.1.tgz#9095e8b9b10d1de6d49a939b2f65c2872a47afd9" - -"@types/node@^6.0.46": - version "6.0.107" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.107.tgz#917613ed129a5fd6601dc4b644c4c324aaad4f4c" - -"@types/node@~10.5.5": +"@types/node@*", "@types/node@~10.5.5": version "10.5.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.6.tgz#1640f021dd0eaf12e731e54198c12ad2e020dc8e" +"@types/node@^6.0.46": + version "6.0.115" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.115.tgz#2ebbd6e57589484c043a25ec3b75799c32f67520" + "@types/q@^0.0.32": version "0.0.32" resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" @@ -499,6 +511,17 @@ "@webassemblyjs/wast-parser" "1.4.3" long "^3.2.0" +"@webpack-contrib/schema-utils@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chalk "^2.3.2" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.1.2" + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -521,16 +544,16 @@ acorn-dynamic-import@^3.0.0: acorn "^5.0.0" acorn@^5.0.0, acorn@^5.3.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + version "5.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" addressparser@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" -adm-zip@^0.4.7: - version "0.4.9" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.9.tgz#1a574627d3aa4ea6b8b4948e066cbd6fed4ae2f6" +adm-zip@^0.4.9: + version "0.4.11" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.11.tgz#2aa54c84c4b01a9d0fb89bb11982a51f13e3d62a" after@0.8.2: version "0.8.2" @@ -546,6 +569,13 @@ ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + ajv@^5.0.0, ajv@^5.1.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" @@ -555,7 +585,16 @@ ajv@^5.0.0, ajv@^5.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0, ajv@~6.4.0: +ajv@^6.1.0: + version "6.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.1" + +ajv@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" dependencies: @@ -572,13 +611,20 @@ align-text@^0.1.1, align-text@^0.1.3: longest "^1.0.1" repeat-string "^1.5.2" -ambi@^2.2.0, ambi@^2.5.0: +ambi@^2.2.0: version "2.5.0" resolved "https://registry.yarnpkg.com/ambi/-/ambi-2.5.0.tgz#7c8e372be48891157e7cea01cb6f9143d1f74220" dependencies: editions "^1.1.1" typechecker "^4.3.0" +ambi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ambi/-/ambi-3.0.0.tgz#cc38f19b8e13d0d1026bee3bd573e298714624db" + dependencies: + editions "^1.3.4" + typechecker "^4.3.0" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -609,6 +655,10 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + ansi-gray@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" @@ -665,23 +715,23 @@ apache-md5@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.0.6.tgz#470239d40c54e7c32dd9d6eb11bc3578ecc903c2" -app-root-path@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" +app-root-path@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" dependencies: - default-require-extensions "^1.0.0" + default-require-extensions "^2.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -776,8 +826,10 @@ asn1.js@^4.0.0: minimalistic-assert "^1.0.0" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" @@ -817,13 +869,7 @@ async@1.x, async@^1.4.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" - dependencies: - lodash "^4.14.0" - -async@^2.5.0, async@~2.6.0: +async@^2.1.4, async@^2.5.0, async@~2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: @@ -833,7 +879,7 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -atob@^2.0.0: +atob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" @@ -980,8 +1026,8 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" @@ -1043,7 +1089,7 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" -body-parser@1.18.2, body-parser@^1.16.1: +body-parser@1.18.2: version "1.18.2" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" dependencies: @@ -1058,6 +1104,21 @@ body-parser@1.18.2, body-parser@^1.16.1: raw-body "2.3.2" type-is "~1.6.15" +body-parser@^1.16.1: + version "1.18.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "~1.6.3" + iconv-lite "0.4.23" + on-finished "~2.3.0" + qs "6.5.2" + raw-body "2.3.3" + type-is "~1.6.16" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -1079,18 +1140,6 @@ boom@2.x.x: dependencies: hoek "2.x.x" -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - bootstrap@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-4.1.3.tgz#0eb371af2c8448e8c210411d0cb824a6409a12be" @@ -1167,12 +1216,13 @@ browserify-cipher@^1.0.0: evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.1.tgz#3343124db6d7ad53e26a8826318712bdc8450f9c" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" @@ -1216,11 +1266,22 @@ btoa@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" -buffer-from@^1.0.0: +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" -buffer-from@^1.1.0: +buffer-from@^1.0.0, buffer-from@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -1371,7 +1432,7 @@ chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -1379,9 +1440,13 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chardet@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.5.0.tgz#fe3ac73c00c3d865ffcc02a0682e2c20b6a06029" + check-types@^7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.3.0.tgz#468f571a4435c24248f5fd0cb0e8d87c3c341e7d" + version "7.4.0" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-7.4.0.tgz#0378ec1b9616ec71f774931a3c6516fad8c152f4" cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" @@ -1410,8 +1475,8 @@ chokidar@^1.4.2: fsevents "^1.0.0" chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -1420,12 +1485,13 @@ chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^4.0.0" + lodash.debounce "^4.0.8" normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" - upath "^1.0.0" + upath "^1.0.5" optionalDependencies: - fsevents "^1.1.2" + fsevents "^1.2.2" chownr@^1.0.1: version "1.0.1" @@ -1463,16 +1529,32 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.1.x, clean-css@^4.1.11: +clean-css@4.1.x: version "4.1.11" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" dependencies: source-map "0.5.x" +clean-css@^4.1.11: + version "4.2.0" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.0.tgz#0a9d62040cddc7904c5edaee9bdeca642d9b9c1c" + dependencies: + source-map "~0.6.0" + cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1523,10 +1605,10 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" codelyzer@~4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.4.2.tgz#af11fed6ddf9362ed5b174495467fb7315306fb1" + version "4.4.3" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.4.3.tgz#367841b9a8dba94fbae55b1606f0c4321593c72e" dependencies: - app-root-path "^2.0.1" + app-root-path "^2.1.0" css-selector-tokenizer "^0.7.0" cssauron "^1.4.0" semver-dsl "^1.0.1" @@ -1541,14 +1623,14 @@ collection-visit@^1.0.0: object-visit "^1.0.0" color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + version "1.9.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: - color-name "^1.1.1" + color-name "1.1.1" -color-name@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" color-support@^1.1.3: version "1.1.3" @@ -1558,13 +1640,9 @@ colors@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -colors@^1.1.0, colors@latest: - version "1.2.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.3.tgz#1b152a9c4f6c9f74bc4bb96233ad0b7983b79744" - -colors@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.0.tgz#5f20c9fef6945cb1134260aab33bfbdc8295e04e" +colors@^1.1.0, colors@^1.2.5, colors@latest: + version "1.3.1" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.1.tgz#4accdb89cf2cabc7f982771925e9468784f32f3d" combine-lists@^1.0.0: version "1.0.1" @@ -1578,21 +1656,29 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.15.1, commander@2.15.x, commander@^2.12.1, commander@^2.13.0, commander@^2.9.0, commander@~2.15.0: +commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +commander@2.16.x, commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + +commander@^2.12.1, commander@^2.13.0, commander@^2.9.0: + version "2.17.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.0.tgz#9d07b25e2a6f198b76d8b756a0e8a9604a6a1a60" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" compare-versions@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" + version "3.3.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.3.0.tgz#af93ea705a96943f622ab309578b9b90586f39c3" component-bind@1.0.0: version "1.0.0" @@ -1606,22 +1692,22 @@ component-inherit@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" +compressible@~2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" dependencies: - mime-db ">= 1.33.0 < 2" + mime-db ">= 1.34.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.14" debug "2.6.9" on-headers "~1.0.1" - safe-buffer "5.1.1" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: @@ -1732,11 +1818,7 @@ copy-webpack-plugin@^4.5.2: p-limit "^1.0.0" serialize-javascript "^1.4.0" -core-js@^2.2.0, core-js@^2.4.0: - version "2.5.5" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.5.tgz#b14dde936c640c0579a6b50cabcc132dd6127e3b" - -core-js@^2.5.7: +core-js@^2.2.0, core-js@^2.4.0, core-js@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" @@ -1773,8 +1855,8 @@ cosmiconfig@^5.0.2: parse-json "^4.0.0" create-ecdh@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.1.tgz#44223dfed533193ba5ba54e0df5709b89acf1f82" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" dependencies: bn.js "^4.1.0" elliptic "^6.0.0" @@ -1821,18 +1903,22 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -1960,6 +2046,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -1968,9 +2060,9 @@ deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" -deep-extend@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.5.1.tgz#b894a9dd90d3023fbf1c55a394fb858eb2066f1f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-freeze-strict@^1.1.1: version "1.1.1" @@ -1980,11 +2072,11 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" dependencies: - strip-bom "^2.0.0" + strip-bom "^3.0.0" define-properties@^1.1.2: version "1.1.2" @@ -2175,11 +2267,15 @@ domhandler@2.1: domelementtype "1" domhandler@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" dependencies: domelementtype "1" +domino@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/domino/-/domino-2.0.3.tgz#729fc28e0a54249ba5aaf95d2a35750d12201b01" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -2222,9 +2318,9 @@ duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" -duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -2239,10 +2335,11 @@ eachr@^3.2.0: typechecker "^4.3.0" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" editions@^1.1.1, editions@^1.3.3, editions@^1.3.4: version "1.3.4" @@ -2253,8 +2350,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" ejs@^2.5.7: - version "2.5.9" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.9.tgz#7ba254582a560d267437109a68354112475b0ce5" + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" electron-to-chromium@^1.3.47: version "1.3.55" @@ -2326,8 +2423,8 @@ engine.io@~3.1.0: uws "~9.14.0" enhanced-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" @@ -2348,14 +2445,14 @@ errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -2372,8 +2469,8 @@ es-to-primitive@^1.1.1: is-symbol "^1.0.1" es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: - version "0.10.42" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.42.tgz#8c07dd33af04d5dcd1310b5cef13bea63a89ba8d" + version "0.10.45" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" @@ -2439,8 +2536,8 @@ escodegen@1.x.x: source-map "~0.6.1" eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + version "3.7.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -2454,8 +2551,8 @@ esprima@3.x.x, esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esrecurse@^4.1.0: version "4.2.1" @@ -2616,16 +2713,24 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: is-extendable "^1.0.1" extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -extendr@^3.2.0, extendr@^3.2.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/extendr/-/extendr-3.3.1.tgz#be3b69ccfeefa999bec5ccfb30f3f9aa76178d6c" +extendr@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/extendr/-/extendr-3.3.0.tgz#6a61ad3ad8b9b03afa561696c48bef47de053e37" dependencies: editions "^1.3.3" typechecker "^4.4.1" +external-editor@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.0.tgz#dc35c48c6f98a30ca27a20e9687d7f3c77704bb6" + dependencies: + chardet "^0.5.0" + iconv-lite "^0.4.22" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2673,6 +2778,10 @@ fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -2697,6 +2806,12 @@ faye-websocket@^0.10.0: dependencies: websocket-driver ">=0.5.1" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-loader@^1.1.11: version "1.1.11" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" @@ -2724,12 +2839,12 @@ filesize@^3.5.11: resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -2796,6 +2911,12 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + findit2@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/findit2/-/findit2-2.2.3.tgz#58a466697df8a6205cdfdbf395536b8bd777a5f6" @@ -2814,8 +2935,8 @@ follow-redirects@1.0.0: debug "^2.2.0" follow-redirects@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa" + version "1.5.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.2.tgz#5a9d80e0165957e5ef0c1210678fc5c4acb9fb03" dependencies: debug "^3.1.0" @@ -2859,6 +2980,14 @@ form-data@~2.0.0: combined-stream "^1.0.5" mime-types "^2.1.11" +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + form-data@~2.3.0, form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" @@ -2941,12 +3070,12 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0, fsevents@^1.1.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.3.tgz#08292982e7059f6674c93d8b829c1e8604979ac0" +fsevents@^1.0.0, fsevents@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: nan "^2.9.2" - node-pre-gyp "^0.9.0" + node-pre-gyp "^0.10.0" fstream@^1.0.0, fstream@^1.0.2: version "1.0.11" @@ -2964,7 +3093,7 @@ ftp@~0.3.10: readable-stream "1.1.x" xregexp "2.0.0" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2982,8 +3111,8 @@ gauge@~2.7.3: wide-align "^1.1.0" gaze@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + version "1.1.3" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" dependencies: globule "^1.0.0" @@ -2998,8 +3127,8 @@ generate-object-property@^1.1.0: is-property "^1.0.0" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" get-stdin@^4.0.1: version "4.0.1" @@ -3098,6 +3227,10 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" +global-modules-path@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/global-modules-path/-/global-modules-path-2.3.0.tgz#b0e2bac6beac39745f7db5c59d26a36a0b94f7dc" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3135,11 +3268,11 @@ globby@^7.1.1: slash "^1.0.0" globule@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + version "1.2.1" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d" dependencies: glob "~7.1.1" - lodash "~4.17.4" + lodash "~4.17.10" minimatch "~3.0.2" got@^6.7.1: @@ -3197,6 +3330,10 @@ handlebars@^4.0.1, handlebars@^4.0.3: optionalDependencies: uglify-js "^2.6" +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" @@ -3210,6 +3347,13 @@ har-validator@~2.0.6: is-my-json-valid "^2.12.4" pinkie-promise "^2.0.0" +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" @@ -3277,10 +3421,10 @@ has-values@^1.0.0: kind-of "^4.0.0" has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - function-bind "^1.0.2" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" @@ -3290,11 +3434,11 @@ hash-base@^3.0.0: safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" hawk@~3.1.3: version "3.1.3" @@ -3305,15 +3449,6 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -3337,13 +3472,9 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" hpack.js@^2.1.6: version "2.1.6" @@ -3359,16 +3490,16 @@ html-entities@^1.2.0, html-entities@^1.2.1: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.2.3: - version "3.5.15" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.15.tgz#f869848d4543cbfd84f26d5514a2a87cbf9a05e0" + version "3.5.19" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.19.tgz#ed53c4b7326fe507bc3a1adbcc3bbb56660a2ebd" dependencies: camel-case "3.0.x" clean-css "4.1.x" - commander "2.15.x" + commander "2.16.x" he "1.1.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.3.x" + uglify-js "3.4.x" html-webpack-plugin@^3.0.6: version "3.2.0" @@ -3423,7 +3554,7 @@ http-errors@1.6.2: setprototypeof "1.0.3" statuses ">= 1.3.1 < 2" -http-errors@1.6.3, http-errors@~1.6.2: +http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: @@ -3433,8 +3564,8 @@ http-errors@1.6.3, http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.12" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.12.tgz#b9cfbf4a2cf26f0fc34b10ca1489a27771e3474f" + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" http-proxy-agent@^2.1.0: version "2.1.0" @@ -3506,21 +3637,15 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -iconv-lite@0.4.23: +iconv-lite@0.4.23, iconv-lite@^0.4.22, iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.4: - version "0.4.21" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.21.tgz#c47f8733d02171189ebc4a400f3218d348094798" - dependencies: - safer-buffer "^2.1.0" - ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" iferr@^0.1.5: version "0.1.5" @@ -3533,8 +3658,8 @@ ignore-walk@^3.0.1: minimatch "^3.0.4" ignore@^3.3.5: - version "3.3.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.8.tgz#3f8e9c35d38708a3a7e0e9abb6c73e7ee7707b2b" + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" ignorefs@^1.0.0, ignorefs@^1.1.1: version "1.2.0" @@ -3627,12 +3752,34 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +inquirer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.0.0.tgz#e8c20303ddc15bbfc2c12a6213710ccd9e1413d8" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + internal-ip@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" dependencies: meow "^3.3.0" +interpret@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" @@ -3647,9 +3794,9 @@ ip@^1.1.0, ip@^1.1.2, ip@^1.1.4, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" is-absolute@^1.0.0: version "1.0.0" @@ -3691,8 +3838,8 @@ is-builtin-module@^1.0.0: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" is-ci@^1.0.10: version "1.1.0" @@ -3851,12 +3998,6 @@ is-obj@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" - dependencies: - is-number "^4.0.0" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -3887,6 +4028,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" @@ -3954,8 +4099,10 @@ isarray@2.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" isbinaryfile@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + dependencies: + buffer-alloc "^1.2.0" isexe@^2.0.0: version "2.0.0" @@ -4006,10 +4153,10 @@ istanbul-lib-coverage@^1.2.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" istanbul-lib-hook@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz#f614ec45287b2a8fc4f07f5660af787575601805" dependencies: - append-transform "^0.4.0" + append-transform "^1.0.0" istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.7.3: version "1.10.1" @@ -4033,8 +4180,8 @@ istanbul-lib-report@^1.1.4: supports-color "^3.1.2" istanbul-lib-source-maps@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" + version "1.2.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz#ffe6be4e7ab86d3603e4290d54990b14506fc9b1" dependencies: debug "^3.1.0" istanbul-lib-coverage "^1.2.0" @@ -4100,21 +4247,18 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" js-base64@^2.1.8: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + version "2.4.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-tokens@^3.0.0, js-tokens@^3.0.2: +js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@3.x, js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.9.0: +js-yaml@3.x, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -4141,10 +4285,20 @@ json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -4176,6 +4330,10 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -4228,10 +4386,10 @@ karma-jasmine@~1.1.2: resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.2.tgz#394f2b25ffb4a644b9ada6f22d443e2fd08886c3" karma-source-map-support@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz#1bf81e7bb4b089627ab352ec4179e117c406a540" + version "1.3.0" + resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz#36dd4d8ca154b62ace95696236fae37caf0a7dde" dependencies: - source-map-support "^0.4.1" + source-map-support "^0.5.5" karma@~2.0.5: version "2.0.5" @@ -4354,8 +4512,8 @@ libqp@1.1.0: resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" license-webpack-plugin@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.3.1.tgz#688b76472188ef597918b7cae3eec7dc2fa5a0e8" + version "1.4.0" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.4.0.tgz#be504a849ba7d736f1a6da4b133864f30af885fa" dependencies: ejs "^2.5.7" @@ -4421,6 +4579,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -4433,6 +4598,10 @@ lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -4458,7 +4627,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.14.2, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0, lodash@~4.17.4: +lodash@^4.0.0, lodash@^4.14.2, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@^4.5.0, lodash@~4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -4515,10 +4684,10 @@ longest@^1.0.1: resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" loud-rejection@^1.0.0, loud-rejection@^1.6.0: version "1.6.0" @@ -4539,14 +4708,7 @@ lru-cache@2.2.x: version "2.2.4" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.2.4.tgz#6c658619becf14031d0d0b594b16042ce4dc063d" -lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^4.1.2: +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: @@ -4583,8 +4745,8 @@ mailgun-js@^0.18.0: tsscmp "~1.0.0" make-dir@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: pify "^3.0.0" @@ -4614,6 +4776,10 @@ marked@^0.3.19: version "0.3.19" resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.19.tgz#5d47f709c4c9fc3c216b6d46127280f40b39d790" +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -4704,15 +4870,15 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +"mime-db@>= 1.34.0 < 2", mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" dependencies: - mime-db "~1.33.0" + mime-db "~1.35.0" mime@1.4.1: version "1.4.1" @@ -4731,13 +4897,14 @@ mimic-fn@^1.0.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" mini-css-extract-plugin@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz#ff3bf08bee96e618e177c16ca6131bfecef707f9" + version "0.4.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.1.tgz#d2bcf77bb2596b8e4bd9257e43d3f9164c2e86cb" dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" loader-utils "^1.1.0" webpack-sources "^1.1.0" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -4763,11 +4930,11 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -minipass@^2.2.1, minipass@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.4.tgz#03c824d84551ec38a8d1bb5bc350a5a30a354a40" +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" dependencies: - safe-buffer "^5.1.1" + safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.1.0: @@ -4860,20 +5027,23 @@ multimatch@^2.1.0: arrify "^1.0.0" minimatch "^3.0.0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + nan@^2.10.0, nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -4881,7 +5051,7 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -needle@^2.2.0: +needle@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" dependencies: @@ -4927,29 +5097,32 @@ ngx-toastr@^8.10.0: dependencies: tslib "^1.9.0" +nice-try@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" dependencies: lower-case "^1.1.1" -node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" node-gyp@^3.3.1: - version "3.6.2" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + version "3.7.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.7.0.tgz#789478e8f6c45e277aa014f3e28f958f286f9203" dependencies: fstream "^1.0.0" glob "^7.0.3" graceful-fs "^4.1.2" - minimatch "^3.0.2" mkdirp "^0.5.0" nopt "2 || 3" npmlog "0 || 1 || 2 || 3 || 4" osenv "0" - request "2" + request ">=2.9.0 <2.82.0" rimraf "2" semver "~5.3.0" tar "^2.0.0" @@ -4983,17 +5156,17 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-pre-gyp@^0.9.0: - version "0.9.1" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" - needle "^2.2.0" + needle "^2.2.1" nopt "^4.0.1" npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" tar "^4" @@ -5121,15 +5294,15 @@ npm-bundled@^1.0.1: validate-npm-package-name "^3.0.0" npm-packlist@^1.1.6: - version "1.1.10" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" npm-registry-client@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.5.1.tgz#8115809c0a4b40938b8a109b8ea74d26c6f5d7f1" + version "8.6.0" + resolved "https://registry.yarnpkg.com/npm-registry-client/-/npm-registry-client-8.6.0.tgz#7f1529f91450732e89f8518e0f21459deea3e4c4" dependencies: concat-stream "^1.5.2" graceful-fs "^4.1.6" @@ -5203,8 +5376,8 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-keys@^1.0.11, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" object-visit@^1.0.0: version "1.0.1" @@ -5261,6 +5434,12 @@ once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + open@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" @@ -5294,10 +5473,10 @@ optionator@^0.8.1: wordwrap "~1.0.0" original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + version "1.0.1" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.1.tgz#b0a53ff42ba997a8c9cd1fb5daaeb42b9d693190" dependencies: - url-parse "1.0.x" + url-parse "~1.4.0" os-browserify@^0.3.0: version "0.3.0" @@ -5344,17 +5523,29 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.0.0, p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -5363,6 +5554,10 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + pac-proxy-agent@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-2.0.2.tgz#90d9f6730ab0f4d2607dcdcd4d3d641aa26c3896" @@ -5501,13 +5696,13 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" path-proxy@~1.0.0: version "1.0.0" @@ -5555,6 +5750,10 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5634,15 +5833,7 @@ postcss-value-parser@^3.2.3: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.22: - version "6.0.22" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.22.tgz#e23b78314905c3b90cbd61702121e7a78848f2a3" - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^6.0.23: +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.22, postcss@^6.0.23: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: @@ -5723,11 +5914,11 @@ protractor@~5.4.0: webdriver-manager "^12.0.6" proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" dependencies: forwarded "~0.1.2" - ipaddr.js "1.6.0" + ipaddr.js "1.8.0" proxy-agent@~3.0.0: version "3.0.1" @@ -5776,10 +5967,10 @@ pump@^2.0.0, pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" dependencies: - duplexify "^3.5.3" + duplexify "^3.6.0" inherits "^2.0.3" pump "^2.0.0" @@ -5792,8 +5983,8 @@ punycode@1.4.1, punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" q@1.4.1: version "1.4.1" @@ -5807,14 +5998,22 @@ qjobs@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" -qs@6.5.1, qs@~6.5.1: +qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@6.5.2, qs@~6.5.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + qs@~6.2.0: version "6.2.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -5823,20 +6022,17 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - querystringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" @@ -5864,7 +6060,7 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" -raw-body@^2.2.0: +raw-body@2.3.3, raw-body@^2.2.0: version "2.3.3" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" dependencies: @@ -5877,11 +6073,11 @@ raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.7.tgz#8a10ca30d588d00464360372b890d06dacd02297" +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "^0.5.1" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -5907,7 +6103,7 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3: +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -5985,8 +6181,8 @@ reflect-metadata@^0.1.2: resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2" regenerate@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" regenerator-runtime@^0.11.0: version "0.11.1" @@ -6072,33 +6268,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -request@2, request@^2.74.0, request@^2.78.0, request@^2.83.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.6.0" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" - forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" - performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" - tunnel-agent "^0.6.0" - uuid "^3.1.0" - request@2.75.x: version "2.75.0" resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" @@ -6125,7 +6294,7 @@ request@2.75.x: tough-cookie "~2.3.0" tunnel-agent "~0.4.1" -request@2.87.0, request@^2.0.0: +request@2.87.0, request@^2.0.0, request@^2.74.0, request@^2.83.0, request@^2.87.0: version "2.87.0" resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" dependencies: @@ -6150,6 +6319,33 @@ request@2.87.0, request@^2.0.0: tunnel-agent "^0.6.0" uuid "^3.1.0" +"request@>=2.9.0 <2.82.0": + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + requestretry@^1.2.2: version "1.13.0" resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" @@ -6171,7 +6367,7 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -requires-port@1.0.x, requires-port@^1.0.0: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -6198,11 +6394,18 @@ resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2: - version "1.7.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.7.1.tgz#aadd656374fd298aee895bc026b8297418677fd3" + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -6234,6 +6437,12 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" @@ -6244,13 +6453,7 @@ rxjs-compat@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.2.2.tgz#3c0fcdb46130cc70aa55412c2b1147905ab4680a" -rxjs@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.0.0.tgz#d647e029b5854617f994c82fe57a4c6747b352da" - dependencies: - tslib "^1.9.0" - -rxjs@^6.2.2: +rxjs@^6.0.0, rxjs@^6.1.0, rxjs@^6.2.2: version "6.2.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" dependencies: @@ -6260,7 +6463,7 @@ safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6283,7 +6486,7 @@ safefs@^4.1.0: editions "^1.1.1" graceful-fs "^4.1.4" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6373,10 +6576,10 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + version "1.10.3" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823" dependencies: - node-forge "0.7.1" + node-forge "0.7.5" semver-diff@^2.0.0: version "2.1.0" @@ -6580,12 +6783,6 @@ sntp@1.x.x: dependencies: hoek "2.x.x" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - socket.io-adapter@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" @@ -6710,35 +6907,28 @@ source-map-loader@^0.2.3: source-map "~0.6.1" source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.1, source-map-support@~0.4.0: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - -source-map-support@^0.5.0: - version "0.5.5" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.5.tgz#0d4af9e00493e855402e8ec36ebed2d266fceb90" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@^0.5.6: +source-map-support@^0.5.0, source-map-support@^0.5.5, source-map-support@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" dependencies: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -6835,13 +7025,14 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" + safer-buffer "^2.0.2" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" @@ -6899,19 +7090,19 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.3.3" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -6936,7 +7127,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -6953,9 +7144,9 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +stringstream@~0.0.4: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" @@ -6975,6 +7166,10 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -7070,12 +7265,12 @@ tar@^2.0.0: inherits "2" tar@^4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" - minipass "^2.2.4" + minipass "^2.3.3" minizlib "^1.1.0" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -7089,13 +7284,14 @@ taskgroup@^4.0.5: csextends "^1.0.3" taskgroup@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-5.0.1.tgz#08736c9b24683b1434774231eb4b73aa7c3f79b5" + version "5.3.0" + resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-5.3.0.tgz#e211c841892ccb8eb78345e98f089d20f3e0dd02" dependencies: - ambi "^2.5.0" + ambi "^3.0.0" eachr "^3.2.0" - editions "^1.1.1" - extendr "^3.2.0" + editions "^1.3.4" + extendr "^3.2.2" + unbounded "^1.1.0" temp@^0.8.3: version "0.8.3" @@ -7110,6 +7306,10 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + through2@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -7117,7 +7317,7 @@ through2@^2.0.0: readable-stream "^2.1.5" xtend "~4.0.1" -through@2, through@X.X.X, through@~2.3, through@~2.3.1: +through@2, through@X.X.X, through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -7153,7 +7353,7 @@ tmp@0.0.30: dependencies: os-tmpdir "~1.0.1" -tmp@0.0.33, tmp@0.0.x: +tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: @@ -7226,8 +7426,18 @@ trim-right@^1.0.1: glob "^6.0.4" tryer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.0.tgz#027b69fa823225e551cace3ef03b11f6ab37c1d7" + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + +ts-loader@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-4.4.2.tgz#778d4464b24436873c78f7f9e914d88194c2a248" + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^3.1.4" + semver "^5.0.1" ts-node@~7.0.0: version "7.0.0" @@ -7269,8 +7479,8 @@ tsickle@^0.32.1: source-map-support "^0.5.0" tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" tslint@~5.11.0: version "5.11.0" @@ -7340,7 +7550,7 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript@2.8.3, typescript@^2.4.2: +typescript@2.8.3: version "2.8.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170" @@ -7348,26 +7558,26 @@ typescript@2.8.3, typescript@^2.4.2: version "2.7.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" +typescript@^2.4.2, typescript@~2.9.0, typescript@~2.9.1: + version "2.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + typescript@~2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" -typescript@~2.9.0, typescript@~2.9.1: - version "2.9.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" - uglify-es@^3.3.4: - version "3.3.10" - resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" dependencies: - commander "~2.14.1" + commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.3.x: - version "3.3.23" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.23.tgz#48ea43e638364d18be292a6fdc2b5b7c35f239ab" +uglify-js@3.4.x: + version "3.4.6" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" dependencies: - commander "~2.15.0" + commander "~2.16.0" source-map "~0.6.1" uglify-js@^2.6: @@ -7384,8 +7594,8 @@ uglify-to-browserify@~1.0.0: resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" uglifyjs-webpack-plugin@^1.2.4, uglifyjs-webpack-plugin@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz#2ef8387c8f1a903ec5e44fa36f9f3cbdcea67641" + version "1.2.7" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -7400,13 +7610,19 @@ ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" +unbounded@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbounded/-/unbounded-1.1.0.tgz#7bcab4f99615a33687d306cf2c050c635cecc7cd" + dependencies: + editions "^1.3.4" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" underscore@^1.8.3: - version "1.9.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.0.tgz#31dbb314cfcc88f169cd3692d9149d81a00a73e4" + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" underscore@~1.7.0: version "1.7.0" @@ -7440,8 +7656,8 @@ unique-string@^1.0.0: crypto-random-string "^1.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" unix-crypt-td-js@^1.0.0: version "1.0.0" @@ -7462,9 +7678,9 @@ unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" -upath@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.5.tgz#02cab9ecebe95bbec6d5fc2566325725ab6d1a73" +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" update-notifier@^2.3.0: version "2.5.0" @@ -7491,6 +7707,12 @@ uri-js@^3.0.2: dependencies: punycode "^2.1.0" +uri-js@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + urijs@^1.16.1: version "1.19.1" resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a" @@ -7517,16 +7739,9 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" - dependencies: - querystringify "0.0.x" - requires-port "1.0.x" - -url-parse@^1.1.8: - version "1.4.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.0.tgz#6bfdaad60098c7fe06f623e42b22de62de0d3d75" +url-parse@^1.1.8, url-parse@~1.4.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" dependencies: querystringify "^2.0.0" requires-port "^1.0.0" @@ -7539,10 +7754,8 @@ url@^0.11.0: querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" useragent@2.2.1: version "2.2.1" @@ -7562,12 +7775,18 @@ util.promisify@1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@0.10.3, util@^0.10.3: +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + utila@~0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" @@ -7584,17 +7803,21 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" uws@~9.14.0: version "9.14.0" resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" +v8-compile-cache@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.0.tgz#526492e35fc616864284700b7043e01baee09f0a" + validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -7618,8 +7841,8 @@ verror@1.10.0: extsprintf "^1.2.0" viz.js@^1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-1.8.1.tgz#277ab3cf4367c608a95b281a7472083c3e2ee6cf" + version "1.8.2" + resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-1.8.2.tgz#d9cc04cd99f98ec986bf9054db76a6cbcdc5d97a" vm-browserify@0.0.4: version "0.0.4" @@ -7680,17 +7903,17 @@ webdriver-js-extender@2.0.0: selenium-webdriver "^3.0.1" webdriver-manager@^12.0.6: - version "12.0.6" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b" + version "12.1.0" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.0.tgz#f6601e52de5f0c97fc7024c889eeb2416f2f1d9d" dependencies: - adm-zip "^0.4.7" + adm-zip "^0.4.9" chalk "^1.1.1" del "^2.2.0" glob "^7.0.3" ini "^1.3.4" minimist "^1.2.0" q "^1.4.1" - request "^2.78.0" + request "^2.87.0" rimraf "^2.5.2" semver "^5.3.0" xml2js "^0.4.17" @@ -7712,6 +7935,22 @@ webpack-bundle-analyzer@^2.13.1: opener "^1.4.3" ws "^4.0.0" +webpack-cli@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.1.0.tgz#d71a83687dcfeb758fdceeb0fe042f96bcf62994" + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + enhanced-resolve "^4.0.0" + global-modules-path "^2.1.0" + import-local "^1.0.0" + inquirer "^6.0.0" + interpret "^1.1.0" + loader-utils "^1.1.0" + supports-color "^5.4.0" + v8-compile-cache "^2.0.0" + yargs "^12.0.1" + webpack-core@^0.6.8: version "0.6.9" resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" @@ -7774,8 +8013,8 @@ webpack-log@^1.0.1, webpack-log@^1.1.2: uuid "^3.1.0" webpack-merge@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" dependencies: lodash "^4.17.5" @@ -7848,16 +8087,16 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@1, which@^1.1.1, which@^1.2.1, which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" dependencies: - string-width "^1.0.2" + string-width "^1.0.2 || 2" widest-line@^2.0.0: version "2.0.0" @@ -7935,6 +8174,10 @@ xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" +xhr2@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" + xml2js@^0.4.17: version "0.4.19" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" @@ -7954,6 +8197,10 @@ xregexp@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -7968,7 +8215,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -7980,9 +8227,9 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" -yargs-parser@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.0.0.tgz#c737c93de2567657750cb1f2c00be639fd19c994" +yargs-parser@^10.0.0, yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" dependencies: camelcase "^4.1.0" @@ -8015,6 +8262,23 @@ yargs@11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" +yargs@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" + dependencies: + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + yargs@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"