From b72a69fe270667ef9979c23af8f17c7b7e9105b9 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Thu, 2 Feb 2017 20:55:31 +0200 Subject: [PATCH 01/35] Update dependencies (#20) * Cleanup and add new client * Add travis-ci, and cleanup server * Update README file * Add server side * Add codecov to python in travis-ci * Try add python coverage * Fix coverage command on travis-ci * Try fix path in travis-ci * Install requirements in travis-ci * Create postgres database in travis-ci * Try coverage in xml * Try coverage in html * Create the coverage xml file after the report * Add codecov config file * Change pach to codecov config file * Add test for users api * Add pycodestyle to travis-ci * Execute python unit tests in travis-ci * Fix python coverage report * Ignore apps.py files in coverage --- .gitignore | 225 ++++++++++++++++++ .travis.yml | 54 +++++ README.md | 47 +++- client/.editorconfig | 3 +- client/.gitignore | 9 +- client/Dockerfile | 4 - client/README.md | 26 +- client/angular-cli.json | 41 +++- client/e2e/app.e2e-spec.ts | 8 +- client/e2e/app.po.ts | 4 +- client/karma.conf.js | 7 +- client/package.json | 66 +++-- client/protractor.conf.js | 2 +- client/proxy.conf.json | 6 + client/run.sh | 14 -- client/src/app/app.component.spec.ts | 15 +- client/src/app/index.ts | 2 - client/src/assets/.npmignore | 0 client/src/index.html | 3 +- client/src/main.ts | 4 +- client/src/polyfills.ts | 23 +- .../shared/index.ts => service-worker.js} | 0 client/src/{styles.css => styles.scss} | 2 +- client/src/test.ts | 36 ++- client/src/tsconfig.json | 1 + client/src/typings.d.ts | 5 - client/sw-precache-config.js | 11 + client/tslint.json | 26 +- codecov.yml | 36 +++ docker-compose.yml | 47 ---- nginx/Dockerfile | 4 - nginx/sites-enabled/django_project | 36 --- server/.gitignore | 6 - server/Dockerfile | 5 - server/README.md | 29 ++- server/api/tests.py | 25 +- server/config/local_settings.template | 26 ++ server/config/settings.py | 52 ++-- server/config/urls.py | 13 +- server/config/wsgi.py | 4 +- server/manage.py | 2 +- server/requirements.txt | 19 +- server/run.sh | 18 -- 43 files changed, 649 insertions(+), 317 deletions(-) create mode 100644 .gitignore create mode 100644 .travis.yml delete mode 100755 client/Dockerfile mode change 100755 => 100644 client/README.md create mode 100644 client/proxy.conf.json delete mode 100755 client/run.sh delete mode 100644 client/src/app/index.ts delete mode 100644 client/src/assets/.npmignore rename client/src/{app/shared/index.ts => service-worker.js} (100%) rename client/src/{styles.css => styles.scss} (80%) delete mode 100644 client/src/typings.d.ts create mode 100644 client/sw-precache-config.js create mode 100644 codecov.yml delete mode 100755 docker-compose.yml delete mode 100755 nginx/Dockerfile delete mode 100755 nginx/sites-enabled/django_project delete mode 100644 server/.gitignore delete mode 100644 server/Dockerfile create mode 100644 server/config/local_settings.template delete mode 100644 server/run.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b43c383 --- /dev/null +++ b/.gitignore @@ -0,0 +1,225 @@ + +# Created by https://www.gitignore.io/api/python,django,node,sass,virtualenv,jetbrains + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# dotenv +.env + +# virtualenv +.venv/ +venv/ +ENV/ + +# Spyder project settings +.spyderproject + +# Rope project settings +.ropeproject + + +### Django ### +*.pyc +db.sqlite3 +media + + +### Node ### +# Logs +logs +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules +jspm_packages + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + + + +### Sass ### +.sass-cache/ +*.css.map + + +### VirtualEnv ### +# Virtualenv +# http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ +[Bb]in +[Ii]nclude +[Ll]ib +[Ll]ib64 +[Ll]ocal +[Ss]cripts +pyvenv.cfg +.venv +pip-selfcheck.json + + +### JetBrains ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff: +.idea/workspace.xml +.idea/tasks.xml + +# Sensitive or high-churn files: +.idea/dataSources/ +.idea/dataSources.ids +.idea/dataSources.xml +.idea/dataSources.local.xml +.idea/sqlDataSources.xml +.idea/dynamic.xml +.idea/uiDesigner.xml + +# Gradle: +.idea/gradle.xml +.idea/libraries + +# Mongo Explorer plugin: +.idea/mongoSettings.xml + +## File-based project format: +*.iws + +## Plugin-specific files: + +# IntelliJ +/out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +### JetBrains Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# End of https://www.gitignore.io/api/python,django,node,sass,virtualenv,jetbrains diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7876b44 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,54 @@ +sudo: required +dist: trusty + +addons: + apt: + sources: + - google-chrome + packages: + - google-chrome-stable + +language: node_js +node_js: + - "6" + - "7" + +services: + - postgresql + +cache: + npm: true + directories: + - client/node_modules + +before_install: + - npm install -g npm@latest local-web-server codecov + - export CHROME_BIN=chromium-browser + - export DISPLAY=:99.0 + - sh -e /etc/init.d/xvfb start + +install: + # Client + - cd client && npm install + + # Server + - cd ../server && pip install coverage pycodestyle + - pip install -r requirements.txt + - psql -c 'create database server;' -U postgres + +script: + # Client + - cd ../client && npm run lint + - npm run test + - ng build --prod --aot + - cd dist && ws --port 4200& + - npm run e2e + + # Server + - cd ../server && coverage run --source='.' manage.py test + - coverage xml + - pycodestyle --show-source --max-line-length=119 --show-pep8 . + - python manage.py test + +after_script: + - cd .. && codecov diff --git a/README.md b/README.md index ee4db2a..0894ad5 100755 --- a/README.md +++ b/README.md @@ -1,28 +1,55 @@ -[![Build Status]() +# An opinionated Angular - Django cluster -# Angular 2.x - Django Cluster -The repo contains a `server` directory that contains an hello world app in [Django](https://www.djangoproject.com/), and a `client` directory which contains an [Angular (version 2.x)](https://angular.io/) hello world app (that has build with [Angular-CLI](https://github.com/angular/angular-cli) tool). +[![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Python 3][python3-image]][python3-url] [![Updates][updates-image]][updates-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] + +The `server` directory contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The `client` directory contain an [Angular](https://angular.io/) simple app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and ready to `AOT` compilation. The simple Angular app show the users from the Django api. + +The repo is a production ready app, that uses `nginx` to serve static files (the client app and static files from the server), and `gunicorn` for the server (python) stuff. All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [kubernetes](https://kubernetes.io/) to manage them. ## Pre Requirements + 1. install [docker](https://www.docker.com/). -2. install [docker-compose](https://docs.docker.com/compose/install/). +2. Don't know yet. ## Installation + Automatic installation of the project with docker, for development. 1. Run `$ docker-compose up` to build the docker images and run them. -3. Open the browser at [http://localhost:80](http://localhost:80) to see your Django (server) app. -3. Open the browser at [http://localhost:81](http://localhost:81) to see your Angular (client) app. +3. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. +3. Open the browser at [http://localhost:4200](http://localhost:4200) to see your Angular (client) app. If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file. ## Our Stack -* [Angular 2.x](https://angular.io/) -* [Django 1.9.x](https://www.djangoproject.com/) + +* [Angular 2.3](https://angular.io/) +* [Django 1.10.5](https://www.djangoproject.com/) * [PostgreSQL](http://www.postgresql.org/) +* [Docker](https://www.docker.com/) + +**Tools we use** + + * [Angular Material](https://material.angular.io/) + * [ngrx](https://github.com/ngrx) + * [Django REST framework](http://www.django-rest-framework.org/) + * [kubernetes](https://kubernetes.io/) ## Contribute + Just fork and do a pull request (; -## License -MIT +[license-image]: https://img.shields.io/badge/license-ISC-blue.svg +[license-url]: https://github.com/nirgn975/Angular2-Django-cluster/blob/master/LICENSE +[travis-image]: https://travis-ci.org/nirgn975/Angular2-Django-cluster.svg?branch=master +[travis-url]: https://travis-ci.org/nirgn975/Angular2-Django-cluster +[codecov-image]: https://codecov.io/gh/nirgn975/Angular2-Django-cluster/branch/master/graph/badge.svg +[codecov-url]: https://codecov.io/gh/nirgn975/Angular2-Django-cluster +[python3-image]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/python-3-shield.svg +[python3-url]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/ +[updates-image]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/shield.svg +[updates-url]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/ +[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular2-Django-cluster/badge +[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular2-Django-cluster +[donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg +[donate-url]: https://www.paypal.me/nirgn/2 diff --git a/client/.editorconfig b/client/.editorconfig index f352616..6e87a00 100644 --- a/client/.editorconfig +++ b/client/.editorconfig @@ -5,10 +5,9 @@ root = true charset = utf-8 indent_style = space indent_size = 2 -end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [*.md] -max_line_length = 0 +max_line_length = off trim_trailing_whitespace = false diff --git a/client/.gitignore b/client/.gitignore index fccc4d9..fe6f8a7 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -6,15 +6,22 @@ # dependencies /node_modules -/bower_components # IDEs and editors /.idea .project .classpath +.c9/ *.launch .settings/ +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + # misc /.sass-cache /connect.lock diff --git a/client/Dockerfile b/client/Dockerfile deleted file mode 100755 index 341a6b3..0000000 --- a/client/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:latest -MAINTAINER Nir Galon - -RUN apt-get update -y diff --git a/client/README.md b/client/README.md old mode 100755 new mode 100644 index e2aa560..b0d6f50 --- a/client/README.md +++ b/client/README.md @@ -1,17 +1,25 @@ -## Front-End -The front end (client) part of the project written in [Angular 2.x](https://angularjs.org/). +# Client -### Prerequisites +The front end (client) side of the project written in Angular, with Angular-CLI, ngrx, and material2. + +## Prerequisites * Install [Angular-cli](https://github.com/angular/angular-cli) * Install [npm](https://nodejs.org/en/) -## Installation +## Manual Installation -* run `npm install` to install global dependencies -* run `ng serve` to fire up the dev server -* open browser to [http://localhost:4200](http://localhost:4200) +1. Run `npm install` to install dependencies +2. Run `npm start` to fire up the dev server +3. Open browser to [http://localhost:4200](http://localhost:4200) ## Tests -* `ng test --no-watch` -* `ng e2e` + +* Run `npm run lint` to check for TSLint mistakes +* Run `npm test` to execute the unit tests via Karma +* Run `npm run e2e` to execute the end-to-end tests via Protractor + +## Deploy + +1. Run `ng build -prod -aot` to build the project +2. Run `npm run sw` to generate the service worker file (in dist directory) diff --git a/client/angular-cli.json b/client/angular-cli.json index 21a45b8..65781f3 100644 --- a/client/angular-cli.json +++ b/client/angular-cli.json @@ -1,21 +1,24 @@ { "project": { - "version": "1.0.0-beta.15", - "name": "hw" + "version": "1.0.0-beta.28.3", + "name": "client" }, "apps": [ { "root": "src", "outDir": "dist", - "assets": "assets", + "assets": [ + "assets", + "favicon.ico" + ], "index": "index.html", "main": "main.ts", + "polyfills": "polyfills.ts", "test": "test.ts", "tsconfig": "tsconfig.json", "prefix": "app", - "mobile": false, "styles": [ - "styles.css" + "styles.scss" ], "scripts": [], "environments": { @@ -25,20 +28,40 @@ } } ], - "addons": [], - "packages": [], "e2e": { "protractor": { "config": "./protractor.conf.js" } }, + "lint": [ + { + "files": "src/**/*.ts", + "project": "src/tsconfig.json" + }, + { + "files": "e2e/**/*.ts", + "project": "e2e/tsconfig.json" + } + ], "test": { "karma": { "config": "./karma.conf.js" } }, "defaults": { - "styleExt": "css", - "prefixInterfaces": false + "styleExt": "scss", + "prefixInterfaces": false, + "inline": { + "style": false, + "template": false + }, + "spec": { + "class": false, + "component": true, + "directive": true, + "module": false, + "pipe": true, + "service": true + } } } diff --git a/client/e2e/app.e2e-spec.ts b/client/e2e/app.e2e-spec.ts index 6b782c1..9e0783c 100644 --- a/client/e2e/app.e2e-spec.ts +++ b/client/e2e/app.e2e-spec.ts @@ -1,10 +1,10 @@ -import { HwPage } from './app.po'; +import { ClientPage } from './app.po'; -describe('hw App', function() { - let page: HwPage; +describe('client App', function() { + let page: ClientPage; beforeEach(() => { - page = new HwPage(); + page = new ClientPage(); }); it('should display message saying app works', () => { diff --git a/client/e2e/app.po.ts b/client/e2e/app.po.ts index 69ca451..96008a7 100644 --- a/client/e2e/app.po.ts +++ b/client/e2e/app.po.ts @@ -1,6 +1,6 @@ -import { browser, element, by } from 'protractor/globals'; +import { browser, element, by } from 'protractor'; -export class HwPage { +export class ClientPage { navigateTo() { return browser.get('/'); } diff --git a/client/karma.conf.js b/client/karma.conf.js index e28922a..1f2613a 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -17,6 +17,9 @@ module.exports = function (config) { preprocessors: { './src/test.ts': ['angular-cli'] }, + mime: { + 'text/x-typescript': ['ts','tsx'] + }, remapIstanbulReporter: { reports: { html: 'coverage', @@ -27,7 +30,9 @@ module.exports = function (config) { config: './angular-cli.json', environment: 'dev' }, - reporters: ['progress', 'karma-remap-istanbul'], + reporters: config.angularCli && config.angularCli.codeCoverage + ? ['progress', 'karma-remap-istanbul'] + : ['progress'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/client/package.json b/client/package.json index c99ef88..41ef191 100644 --- a/client/package.json +++ b/client/package.json @@ -1,44 +1,58 @@ { - "name": "hw", - "version": "0.0.0", - "license": "MIT", + "name": "client", + "version": "1.0.0", + "license": "ISC", "angular-cli": {}, "scripts": { - "start": "ng serve", - "lint": "tslint \"src/**/*.ts\"", - "test": "ng test", - "pree2e": "webdriver-manager update", - "e2e": "protractor" + "ng": "ng", + "start": "ng serve --proxy-config proxy.conf.json", + "lint": "tslint \"src/**/*.ts\" --project src/tsconfig.json --type-check && tslint \"e2e/**/*.ts\" --project e2e/tsconfig.json --type-check", + "test": "ng test --single-run --code-coverage", + "pree2e": "webdriver-manager update --standalone false --gecko false", + "e2e": "protractor", + "sw": "sw-precache --root=dist --config=sw-precache-config.js" }, - "private": true, + "private": false, "dependencies": { - "@angular/common": "2.0.0", - "@angular/compiler": "2.0.0", - "@angular/core": "2.0.0", - "@angular/forms": "2.0.0", - "@angular/http": "2.0.0", - "@angular/platform-browser": "2.0.0", - "@angular/platform-browser-dynamic": "2.0.0", - "@angular/router": "3.0.0", + "@angular/common": "^2.3.1", + "@angular/compiler": "^2.3.1", + "@angular/core": "^2.3.1", + "@angular/forms": "^2.3.1", + "@angular/http": "^2.3.1", + "@angular/material": "^2.0.0-beta.1", + "@angular/platform-browser": "^2.3.1", + "@angular/platform-browser-dynamic": "^2.3.1", + "@angular/router": "^3.3.1", + "@ngrx/core": "^1.2.0", + "@ngrx/effects": "^2.0.0", + "@ngrx/store": "^2.2.1", "core-js": "^2.4.1", - "rxjs": "5.0.0-beta.12", + "hammerjs": "^2.0.8", + "reselect": "^2.5.4", + "rxjs": "^5.0.1", "ts-helpers": "^1.1.1", - "zone.js": "^0.6.23" + "zone.js": "^0.7.2" }, "devDependencies": { - "@types/jasmine": "^2.2.30", - "angular-cli": "1.0.0-beta.15", - "codelyzer": "~0.0.26", - "jasmine-core": "2.4.1", + "@angular/compiler-cli": "^2.3.1", + "@ngrx/store-devtools": "^3.2.3", + "@types/hammerjs": "^2.0.34", + "@types/jasmine": "2.5.38", + "@types/node": "^6.0.42", + "angular-cli": "1.0.0-beta.28.3", + "codelyzer": "~2.0.0-beta.1", + "jasmine-core": "2.5.2", "jasmine-spec-reporter": "2.5.0", "karma": "1.2.0", "karma-chrome-launcher": "^2.0.0", "karma-cli": "^1.0.1", "karma-jasmine": "^1.0.2", "karma-remap-istanbul": "^0.2.1", - "protractor": "4.0.5", + "ngrx-store-freeze": "^0.1.6", + "protractor": "~4.0.13", + "sw-precache": "^4.3.0", "ts-node": "1.2.1", - "tslint": "3.13.0", - "typescript": "2.0.2" + "tslint": "^4.3.0", + "typescript": "~2.0.3" } } diff --git a/client/protractor.conf.js b/client/protractor.conf.js index 169743b..ffded70 100644 --- a/client/protractor.conf.js +++ b/client/protractor.conf.js @@ -1,5 +1,5 @@ // Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/docs/referenceConf.js +// https://github.com/angular/protractor/blob/master/lib/config.ts /*global jasmine */ var SpecReporter = require('jasmine-spec-reporter'); diff --git a/client/proxy.conf.json b/client/proxy.conf.json new file mode 100644 index 0000000..63dd627 --- /dev/null +++ b/client/proxy.conf.json @@ -0,0 +1,6 @@ +{ + "/api": { + "target": "http://localhost:3000", + "secure": false + } +} diff --git a/client/run.sh b/client/run.sh deleted file mode 100755 index 31ec8ee..0000000 --- a/client/run.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -#Disable npm progress bar - for speed. -npm set progress=false - -# Install Angular CLI tool. -npm install -g angular-cli typings --silent - -# Install npm dependencies. -npm install --silent -npm run postinstall - -# Start the npm server -ng serve diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index ca0107e..5be2cb3 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -3,31 +3,32 @@ import { TestBed, async } from '@angular/core/testing'; import { AppComponent } from './app.component'; -describe('App: Hw', () => { +describe('AppComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [ AppComponent ], }); + TestBed.compileComponents(); }); it('should create the app', async(() => { - let fixture = TestBed.createComponent(AppComponent); - let app = fixture.debugElement.componentInstance; + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); })); it(`should have as title 'app works!'`, async(() => { - let fixture = TestBed.createComponent(AppComponent); - let app = fixture.debugElement.componentInstance; + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; expect(app.title).toEqual('app works!'); })); it('should render title in a h1 tag', async(() => { - let fixture = TestBed.createComponent(AppComponent); + const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); - let compiled = fixture.debugElement.nativeElement; + const compiled = fixture.debugElement.nativeElement; expect(compiled.querySelector('h1').textContent).toContain('app works!'); })); }); diff --git a/client/src/app/index.ts b/client/src/app/index.ts deleted file mode 100644 index 875bdb2..0000000 --- a/client/src/app/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './app.component'; -export * from './app.module'; diff --git a/client/src/assets/.npmignore b/client/src/assets/.npmignore deleted file mode 100644 index e69de29..0000000 diff --git a/client/src/index.html b/client/src/index.html index 3bda2d9..7c71984 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -2,12 +2,11 @@ - Hw + Client - Loading... diff --git a/client/src/main.ts b/client/src/main.ts index 5c3c520..46c1c73 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,9 +1,7 @@ -import './polyfills.ts'; - import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { enableProdMode } from '@angular/core'; import { environment } from './environments/environment'; -import { AppModule } from './app/'; +import { AppModule } from './app/app.module'; if (environment.production) { enableProdMode(); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index 3b4c55b..1bdd4d3 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts @@ -1,5 +1,5 @@ -// This file includes polyfills needed by Angular 2 and is loaded before -// the app. You can add your own extra polyfills to this file. +// This file includes polyfills needed by Angular and is loaded before the app. +// You can add your own extra polyfills to this file. import 'core-js/es6/symbol'; import 'core-js/es6/object'; import 'core-js/es6/function'; @@ -17,3 +17,22 @@ import 'core-js/es6/reflect'; import 'core-js/es7/reflect'; import 'zone.js/dist/zone'; + +// If you need to support the browsers/features below, uncomment the import +// and run `npm install import-name-here'; +// Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + +// Needed for: IE9 +// import 'classlist.js'; + +// Animations +// Needed for: All but Chrome and Firefox, Not supported in IE9 +// import 'web-animations-js'; + +// Date, currency, decimal and percent pipes +// Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 +// import 'intl'; + +// NgClass on SVG elements +// Needed for: IE10, IE11 +// import 'classlist.js'; diff --git a/client/src/app/shared/index.ts b/client/src/service-worker.js similarity index 100% rename from client/src/app/shared/index.ts rename to client/src/service-worker.js diff --git a/client/src/styles.css b/client/src/styles.scss similarity index 80% rename from client/src/styles.css rename to client/src/styles.scss index e50a47e..90d4ee0 100644 --- a/client/src/styles.css +++ b/client/src/styles.scss @@ -1 +1 @@ -/* You can add global styles to this file, and also import other style files */ \ No newline at end of file +/* You can add global styles to this file, and also import other style files */ diff --git a/client/src/test.ts b/client/src/test.ts index 7727c8e..9bf7226 100644 --- a/client/src/test.ts +++ b/client/src/test.ts @@ -1,4 +1,4 @@ -import './polyfills.ts'; +// This file is required by karma.conf.js and loads recursively all the .spec and framework files import 'zone.js/dist/long-stack-trace-zone'; import 'zone.js/dist/proxy.js'; @@ -6,6 +6,11 @@ import 'zone.js/dist/sync-test'; import 'zone.js/dist/jasmine-patch'; import 'zone.js/dist/async-test'; import 'zone.js/dist/fake-async-test'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. declare var __karma__: any; @@ -14,21 +19,14 @@ declare var require: any; // Prevent Karma from running prematurely. __karma__.loaded = function () {}; - -Promise.all([ - System.import('@angular/core/testing'), - System.import('@angular/platform-browser-dynamic/testing') -]) - // First, initialize the Angular testing environment. - .then(([testing, testingBrowser]) => { - testing.getTestBed().initTestEnvironment( - testingBrowser.BrowserDynamicTestingModule, - testingBrowser.platformBrowserDynamicTesting() - ); - }) - // Then we find all the tests. - .then(() => require.context('./', true, /\.spec\.ts/)) - // And load the modules. - .then(context => context.keys().map(context)) - // Finally, start Karma to run the tests. - .then(__karma__.start, __karma__.error); +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); +// Finally, start Karma to run the tests. +__karma__.start(); diff --git a/client/src/tsconfig.json b/client/src/tsconfig.json index 9b4c84c..1cf713a 100644 --- a/client/src/tsconfig.json +++ b/client/src/tsconfig.json @@ -1,5 +1,6 @@ { "compilerOptions": { + "baseUrl": "", "declaration": false, "emitDecoratorMetadata": true, "experimentalDecorators": true, diff --git a/client/src/typings.d.ts b/client/src/typings.d.ts deleted file mode 100644 index a73f586..0000000 --- a/client/src/typings.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Typings reference file, see links for more information -// https://github.com/typings/typings -// https://www.typescriptlang.org/docs/handbook/writing-declaration-files.html - -declare var System: any; diff --git a/client/sw-precache-config.js b/client/sw-precache-config.js new file mode 100644 index 0000000..67c106e --- /dev/null +++ b/client/sw-precache-config.js @@ -0,0 +1,11 @@ +module.exports = { + navigateFallback: '/index.html', + stripPrefix: 'dist', + root: 'dist/', + staticFileGlobs: [ + 'dist/index.html', + 'dist/**.js', + 'dist/**.css', + 'dist/*/**.jpg' + ] +}; diff --git a/client/tslint.json b/client/tslint.json index 29f24ee..86bc184 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -3,6 +3,7 @@ "node_modules/codelyzer" ], "rules": { + "callable-types": true, "class-name": true, "comment-format": [ true, @@ -11,12 +12,14 @@ "curly": true, "eofline": true, "forin": true, + "import-blacklist": [true, "rxjs"], + "import-spacing": true, "indent": [ true, "spaces" ], + "interface-over-type-literal": true, "label-position": true, - "label-undefined": true, "max-line-length": [ true, 140 @@ -39,18 +42,17 @@ ], "no-construct": true, "no-debugger": true, - "no-duplicate-key": true, "no-duplicate-variable": true, "no-empty": false, + "no-empty-interface": true, "no-eval": true, "no-inferrable-types": true, "no-shadowed-variable": true, "no-string-literal": false, + "no-string-throw": true, "no-switch-case-fall-through": true, "no-trailing-whitespace": true, "no-unused-expression": true, - "no-unused-variable": true, - "no-unreachable": true, "no-use-before-declare": true, "no-var-keyword": true, "object-literal-sort-keys": false, @@ -61,6 +63,7 @@ "check-else", "check-whitespace" ], + "prefer-const": true, "quotemark": [ true, "single" @@ -83,6 +86,8 @@ "variable-declaration": "nospace" } ], + "typeof-compare": true, + "unified-signatures": true, "variable-name": false, "whitespace": [ true, @@ -93,12 +98,8 @@ "check-type" ], - "directive-selector-prefix": [true, "app"], - "component-selector-prefix": [true, "app"], - "directive-selector-name": [true, "camelCase"], - "component-selector-name": [true, "kebab-case"], - "directive-selector-type": [true, "attribute"], - "component-selector-type": [true, "element"], + "directive-selector": [true, "attribute", "app", "camelCase"], + "component-selector": [true, "element", "app", "kebab-case"], "use-input-property-decorator": true, "use-output-property-decorator": true, "use-host-property-decorator": true, @@ -107,6 +108,9 @@ "use-life-cycle-interface": true, "use-pipe-transform-interface": true, "component-class-suffix": true, - "directive-class-suffix": true + "directive-class-suffix": true, + "no-access-missing-member": true, + "templates-use-public": true, + "invoke-injectable": true } } diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 0000000..fd34efc --- /dev/null +++ b/codecov.yml @@ -0,0 +1,36 @@ +codecov: + notify: + require_ci_to_pass: true +comment: + behavior: default + layout: header, diff + require_changes: false +coverage: + precision: 2 + range: + - 70.0 + - 100.0 + round: down + status: + changes: false + project: + default: + enabled: yes + target: 85% + patch: + default: + enabled: yes + target: 80% +parsers: + gcov: + branch_detection: + conditional: true + loop: true + macro: false + method: false + javascript: + enable_partials: false +ignore: + - "server/manage.py" + - "server/config" + - "server/**/apps.py" diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100755 index 680d19d..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,47 +0,0 @@ -version: '2' -services: - nginx: - container_name: nginx - restart: always - build: nginx/ - ports: - - "8080:80" - - "8081:81" - volumes: - - /www/static - volumes_from: - - server - - client - links: - - server:server - - client:client - - database: - container_name: database - restart: always - image: postgres - - server: - container_name: server - restart: always - build: server/ - working_dir: /usr/src/app - command: sh run.sh - volumes: - - ./server:/usr/src/app - - ./server/static:/usr/src/app/static - expose: - - "8000" - depends_on: - - database - - client: - container_name: client - restart: always - build: client/ - working_dir: /www/app - command: sh run.sh - volumes: - - ./client:/www/app - expose: - - "4200" diff --git a/nginx/Dockerfile b/nginx/Dockerfile deleted file mode 100755 index db9381f..0000000 --- a/nginx/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM tutum/nginx - -RUN rm /etc/nginx/sites-enabled/default -ADD sites-enabled/ /etc/nginx/sites-enabled diff --git a/nginx/sites-enabled/django_project b/nginx/sites-enabled/django_project deleted file mode 100755 index 3a197d4..0000000 --- a/nginx/sites-enabled/django_project +++ /dev/null @@ -1,36 +0,0 @@ -server { - - listen 80; - server_name example.org; - charset utf-8; - - location /static { - autoindex on; - alias /usr/src/app/static; - } - - location / { - proxy_pass http://server:8000; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - client_max_body_size 50M; -} - -server { - - listen 81; - server_name example.org; - charset utf-8; - - location / { - proxy_pass http://client:4200; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - } - - client_max_body_size 50M; -} diff --git a/server/.gitignore b/server/.gitignore deleted file mode 100644 index f1232df..0000000 --- a/server/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.log -*.pot -*.pyc -static/ -__pycache__/ -local_settings.py diff --git a/server/Dockerfile b/server/Dockerfile deleted file mode 100644 index 5db0db6..0000000 --- a/server/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM python:3.5-onbuild -MAINTAINER Nir Galon -ENV PYTHONUNBUFFERED 1 - -RUN apt-get update -y diff --git a/server/README.md b/server/README.md index 1035e91..fc5ebaa 100644 --- a/server/README.md +++ b/server/README.md @@ -1,16 +1,25 @@ -## Back-End -The back end (server) part of the _YOUR-PROJECT-NAME_ project written in [Django 1.10.1](https://www.djangoproject.com/). +## server + +The server (backend) side of the project written [Python](https://www.python.org/) using [Django 1.10.5](https://www.djangoproject.com/), [Django REST framework](http://www.django-rest-framework.org/). + +## Prerequisites + +* Install [Python 3.x](https://www.python.org/) +* Install [Pip](https://pypi.python.org/pypi/pip) ## Manual Installation -1. Make sure you have Python 3.5 and pip installed. -2. `cd server/config` then `cp local_settings.template local_settings.py` and modify it by your local settings. -3. Install requirements with `pip install -r requirements.txt` (located under `server` directory). -4. Migrate the data with `python manage.py migrate`. -5. Import the dummy data with `python manage.py import_data`. -6. Run the server with `python manage.py runserver`. -7. Open the browser at [http://localhost:8000](http://localhost:8000). +1. `cd server/config` then `cp local_settings.template local_settings.py` and modify it by your local settings +2. Install requirements with `pip install -r requirements.txt` +3. Migrate the data with `python manage.py migrate` +4. Run the server with `python manage.py runserver` +5. Open the browser at [http://localhost:8000](http://localhost:8000) ## Tests -Run `python manage.py test`. +* Run `pycodestyle --show-source --max-line-length=119 --show-pep8 server;` to check for lint mistakes (by PEP8) +* Run `python manage.py test` to execute the unit tests + +## Deploy + +1. Not Yet diff --git a/server/api/tests.py b/server/api/tests.py index 3bfb5c8..6ab104d 100644 --- a/server/api/tests.py +++ b/server/api/tests.py @@ -1,15 +1,16 @@ -from django.test import TestCase +from rest_framework import status +from rest_framework.test import APITestCase +from django.contrib.auth.models import User -class TestPensionApi(TestCase): +class UsersApiTestCase(APITestCase): + def setUp(self): + User.objects.create_superuser('admin', 'admin@example.com', 'admin12345') - def test_api_root(self): - """ - Test the url of the api root. - """ - response = self.client.get('/api/') - self.assertEqual(response.status_code, 200) - - # When trailing slash is missing it should add it after redirection. - response = self.client.get('/api') - self.assertEqual(response.status_code, 301) + def test_get_users_objects(self): + response = self.client.get('/api/users/', format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(len(response.data), 1) + self.assertEqual(response.data[0]['email'], 'admin@example.com') + self.assertEqual(response.data[0]['username'], 'admin') + self.assertEqual(response.data[0]['url'], 'http://testserver/api/users/1/') diff --git a/server/config/local_settings.template b/server/config/local_settings.template new file mode 100644 index 0000000..42c3ede --- /dev/null +++ b/server/config/local_settings.template @@ -0,0 +1,26 @@ +import os +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +# Enable debug trace. +DEBUG = True + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '{{secret_key}}' + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.10/howto/static-files/ +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') +MEDIA_URL = '/staticuploads/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'staticuploads') + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': _user, + 'USER': _user, + 'PASSWORD': _user, + 'HOST': 'localhost', + 'PORT': '', + } +} diff --git a/server/config/settings.py b/server/config/settings.py index 1bf1880..65deff4 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -1,7 +1,7 @@ """ -Django settings for server project. +Django settings for config project. -Generated by 'django-admin startproject' using Django 1.10.1. +Generated by 'django-admin startproject' using Django 1.10.5. For more information on this file, see https://docs.djangoproject.com/en/1.10/topics/settings/ @@ -20,29 +20,29 @@ # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = ')zwr#-$o2xq=2yq%hmh_61tk%b#_buufq+pw3owxnuf(=g#_w9' +SECRET_KEY = '-#&29$6a5n)za$%q-9di^$lxu5bvo!so=0e$anel3o7^3oscz6' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -CORS_ORIGIN_REGEX_WHITELIST = ( - '^(localhost:)*', -) ALLOWED_HOSTS = [] # Application definition - INSTALLED_APPS = [ 'api', + 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + + 'admin_honeypot', + 'django_extensions', 'rest_framework', - 'corsheaders' + 'corsheaders', ] MIDDLEWARE = [ @@ -53,9 +53,10 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', ] -ROOT_URLCONF = 'server.urls' +ROOT_URLCONF = 'config.urls' TEMPLATES = [ { @@ -73,19 +74,18 @@ }, ] -WSGI_APPLICATION = 'server.wsgi.application' +WSGI_APPLICATION = 'config.wsgi.application' # Database # https://docs.djangoproject.com/en/1.10/ref/settings/#databases - DATABASES = { 'default': { - # Docker Postgres Database. 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'postgres', + 'NAME': 'server', 'USER': 'postgres', - 'HOST': 'database', + 'PASSWORD': '', + 'HOST': 'localhost', 'PORT': 5432, } } @@ -93,7 +93,6 @@ # Password validation # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators - AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', @@ -109,30 +108,23 @@ }, ] -REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': [ - 'rest_framework.permissions.AllowAny' - ], - 'PAGE_SIZE': 10, -} # Internationalization # https://docs.djangoproject.com/en/1.10/topics/i18n/ - LANGUAGE_CODE = 'en-us' - -TIME_ZONE = 'Asia/Jerusalem' - +TIME_ZONE = 'UTC' USE_I18N = True - USE_L10N = True - USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.10/howto/static-files/ - STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') -DATA_ROOT = os.path.abspath(os.path.join(BASE_DIR, "data")) + + +# Importing local settings if exists. +try: + from .local_settings import * +except ImportError: + pass diff --git a/server/config/urls.py b/server/config/urls.py index 69402ac..0264db0 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -1,4 +1,4 @@ -"""server URL Configuration +"""config URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: https://docs.djangoproject.com/en/1.10/topics/http/urls/ @@ -13,10 +13,17 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include from django.contrib import admin +from django.conf import settings +from django.conf.urls import url, include +from django.conf.urls.static import static urlpatterns = [ - url(r'^admin/', admin.site.urls), url(r'^api/', include('api.urls')), + url(r'^admin/', include('admin_honeypot.urls', namespace='admin_honeypot')), + url(r'^secret-admin/', admin.site.urls), ] + +# Serve static uploaded files if in debug mode. +# if settings.DEBUG: +# urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/server/config/wsgi.py b/server/config/wsgi.py index 985a602..5fa9332 100644 --- a/server/config/wsgi.py +++ b/server/config/wsgi.py @@ -1,5 +1,5 @@ """ -WSGI config for server project. +WSGI config for config project. It exposes the WSGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") application = get_wsgi_application() diff --git a/server/manage.py b/server/manage.py index 94ec858..68141ee 100755 --- a/server/manage.py +++ b/server/manage.py @@ -3,7 +3,7 @@ import sys if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") try: from django.core.management import execute_from_command_line except ImportError: diff --git a/server/requirements.txt b/server/requirements.txt index 2e43323..5579d80 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -1,14 +1,17 @@ # Install with: `pip install -r requirements.txt` -Django==1.10.1 -psycopg2==2.6.1 -gunicorn==19.3.0 -django-extensions==1.6.6 +Django==1.10.5 +psycopg2==2.6.2 +django-extensions==1.7.6 +gunicorn==19.6.0 + +# Security +django-admin-honeypot==1.0.0 # Rest Framework -djangorestframework==3.3.3 -Markdown==2.6.6 -django-filter==0.13.0 +djangorestframework==3.5.3 +Markdown==2.6.8 +django-filter==1.0.1 # CORS -django-cors-headers==1.1.0 +django-cors-headers==2.0.1 diff --git a/server/run.sh b/server/run.sh deleted file mode 100644 index 1ff0d42..0000000 --- a/server/run.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -apt-get -y install libpq-dev python3-dev - -echo "[run] Migrate DB" -python manage.py migrate - -echo "[run] Collect static files" -python manage.py collectstatic --noinput - -echo "[run] create superuser" -echo "from django.contrib.auth.models import User -if not User.objects.filter(username='admin').count(): - User.objects.create_superuser('admin', 'admin@example.com', 'pass') -" | python3 manage.py shell - -echo "[run] runserver" -/usr/local/bin/gunicorn config.wsgi:application -w 2 -b :8000 --reload From 12f25bc36157125442f54a12e6ecba4a4aefe3ea Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Thu, 2 Feb 2017 23:30:12 +0200 Subject: [PATCH 02/35] Show user info in frontend side (#34) * Add macos to gitignore file * Get the user data with ngrx, and show it * Add util file to codecov ignore list --- .gitignore | 25 +++++ .travis.yml | 1 - client/e2e/app.e2e-spec.ts | 5 - client/e2e/app.po.ts | 4 - client/proxy.conf.json | 2 +- client/src/app/actions/user.ts | 24 +++++ client/src/app/app-routing.module.ts | 17 ++++ client/src/app/app.component.css | 0 client/src/app/app.component.html | 3 - client/src/app/app.component.spec.ts | 19 ++-- client/src/app/app.component.ts | 6 +- client/src/app/app.module.ts | 26 ++++- .../app/components/users/users.component.html | 14 +++ .../app/components/users/users.component.scss | 10 ++ .../components/users/users.component.spec.ts | 35 +++++++ .../app/components/users/users.component.ts | 27 ++++++ client/src/app/effects/user.ts | 23 +++++ client/src/app/models/user.ts | 6 ++ client/src/app/reducers/index.ts | 89 ++++++++++++++++++ client/src/app/reducers/user.spec.ts | 58 ++++++++++++ client/src/app/reducers/user.ts | 27 ++++++ client/src/app/services/user.service.spec.ts | 60 ++++++++++++ client/src/app/services/user.service.ts | 23 +++++ client/src/app/util.ts | 20 ++++ client/src/assets/person-icon.png | Bin 0 -> 29454 bytes client/tslint.json | 5 +- codecov.yml | 1 + 27 files changed, 495 insertions(+), 35 deletions(-) create mode 100644 client/src/app/actions/user.ts create mode 100644 client/src/app/app-routing.module.ts delete mode 100644 client/src/app/app.component.css delete mode 100644 client/src/app/app.component.html create mode 100644 client/src/app/components/users/users.component.html create mode 100644 client/src/app/components/users/users.component.scss create mode 100644 client/src/app/components/users/users.component.spec.ts create mode 100644 client/src/app/components/users/users.component.ts create mode 100644 client/src/app/effects/user.ts create mode 100644 client/src/app/models/user.ts create mode 100644 client/src/app/reducers/index.ts create mode 100644 client/src/app/reducers/user.spec.ts create mode 100644 client/src/app/reducers/user.ts create mode 100644 client/src/app/services/user.service.spec.ts create mode 100644 client/src/app/services/user.service.ts create mode 100644 client/src/app/util.ts create mode 100644 client/src/assets/person-icon.png diff --git a/.gitignore b/.gitignore index b43c383..39caaf9 100644 --- a/.gitignore +++ b/.gitignore @@ -222,4 +222,29 @@ fabric.properties # .idea/misc.xml # *.ipr + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon +# Thumbnails +._* +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + # End of https://www.gitignore.io/api/python,django,node,sass,virtualenv,jetbrains diff --git a/.travis.yml b/.travis.yml index 7876b44..d2ff573 100644 --- a/.travis.yml +++ b/.travis.yml @@ -48,7 +48,6 @@ script: - cd ../server && coverage run --source='.' manage.py test - coverage xml - pycodestyle --show-source --max-line-length=119 --show-pep8 . - - python manage.py test after_script: - cd .. && codecov diff --git a/client/e2e/app.e2e-spec.ts b/client/e2e/app.e2e-spec.ts index 9e0783c..2e0023e 100644 --- a/client/e2e/app.e2e-spec.ts +++ b/client/e2e/app.e2e-spec.ts @@ -6,9 +6,4 @@ describe('client App', function() { beforeEach(() => { page = new ClientPage(); }); - - it('should display message saying app works', () => { - page.navigateTo(); - expect(page.getParagraphText()).toEqual('app works!'); - }); }); diff --git a/client/e2e/app.po.ts b/client/e2e/app.po.ts index 96008a7..3d4c82a 100644 --- a/client/e2e/app.po.ts +++ b/client/e2e/app.po.ts @@ -4,8 +4,4 @@ export class ClientPage { navigateTo() { return browser.get('/'); } - - getParagraphText() { - return element(by.css('app-root h1')).getText(); - } } diff --git a/client/proxy.conf.json b/client/proxy.conf.json index 63dd627..c7d3a2b 100644 --- a/client/proxy.conf.json +++ b/client/proxy.conf.json @@ -1,6 +1,6 @@ { "/api": { - "target": "http://localhost:3000", + "target": "http://localhost:8000", "secure": false } } diff --git a/client/src/app/actions/user.ts b/client/src/app/actions/user.ts new file mode 100644 index 0000000..83f5ae6 --- /dev/null +++ b/client/src/app/actions/user.ts @@ -0,0 +1,24 @@ +import { Action } from '@ngrx/store'; +import { User } from '../models/user'; +import { type } from '../util'; + +export const ActionTypes = { + LOAD_USER: type('[User] Load User'), + LOAD_USER_SUCCESS: type('[User] Load User Success'), +}; + +export class LoadUserAction implements Action { + type = ActionTypes.LOAD_USER; + + constructor() { } +} + +export class LoadUserSuccessAction implements Action { + type = ActionTypes.LOAD_USER_SUCCESS; + + constructor(public payload: User[]) { } +} + +export type Actions + = LoadUserAction + | LoadUserSuccessAction; diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts new file mode 100644 index 0000000..ccc2962 --- /dev/null +++ b/client/src/app/app-routing.module.ts @@ -0,0 +1,17 @@ + +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +import { UsersComponent } from './components/users/users.component'; + +const routes: Routes = [ + { path: '', redirectTo: 'users', pathMatch: 'full' }, + { path: 'users', component: UsersComponent }, +]; + + +@NgModule({ + imports: [ RouterModule.forRoot(routes) ], + exports: [ RouterModule ] +}) +export class AppRoutingModule {} diff --git a/client/src/app/app.component.css b/client/src/app/app.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html deleted file mode 100644 index b6931b5..0000000 --- a/client/src/app/app.component.html +++ /dev/null @@ -1,3 +0,0 @@ -

- {{title}} -

diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index 5be2cb3..db33a39 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -2,10 +2,16 @@ import { TestBed, async } from '@angular/core/testing'; import { AppComponent } from './app.component'; +import { MaterialModule } from '@angular/material'; +import { RouterTestingModule } from '@angular/router/testing'; describe('AppComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ + imports: [ + MaterialModule.forRoot(), + RouterTestingModule, + ], declarations: [ AppComponent ], @@ -18,17 +24,4 @@ describe('AppComponent', () => { const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); })); - - it(`should have as title 'app works!'`, async(() => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.debugElement.componentInstance; - expect(app.title).toEqual('app works!'); - })); - - it('should render title in a h1 tag', async(() => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.debugElement.nativeElement; - expect(compiled.querySelector('h1').textContent).toContain('app works!'); - })); }); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index ff63e05..1536d27 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -2,8 +2,10 @@ import { Component } from '@angular/core'; @Component({ selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] + template: ` + + `, + styles: [``] }) export class AppComponent { title = 'app works!'; diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 67ae491..00df90f 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -2,19 +2,39 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; +import { StoreModule } from '@ngrx/store'; +import { EffectsModule } from '@ngrx/effects'; +import { StoreDevtoolsModule } from '@ngrx/store-devtools'; +import { MaterialModule } from '@angular/material'; + +import { reducer } from './reducers'; +import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; +import { UsersComponent } from './components/users/users.component'; + +import { UserEffects } from './effects/user'; + +import { UserService } from './services/user.service'; @NgModule({ declarations: [ - AppComponent + AppComponent, + UsersComponent, ], imports: [ BrowserModule, FormsModule, - HttpModule + HttpModule, + AppRoutingModule, + MaterialModule.forRoot(), + StoreModule.provideStore(reducer), + StoreDevtoolsModule.instrumentOnlyWithExtension(), + EffectsModule.run(UserEffects), + ], + providers: [ + UserService, ], - providers: [], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/client/src/app/components/users/users.component.html b/client/src/app/components/users/users.component.html new file mode 100644 index 0000000..586e45a --- /dev/null +++ b/client/src/app/components/users/users.component.html @@ -0,0 +1,14 @@ + + +
+ {{user.username}} + {{user.email}} +
+ + +

{{user.url}}

+
+ + + +
diff --git a/client/src/app/components/users/users.component.scss b/client/src/app/components/users/users.component.scss new file mode 100644 index 0000000..350d4d6 --- /dev/null +++ b/client/src/app/components/users/users.component.scss @@ -0,0 +1,10 @@ +.example-card { + width: 300px; + display: inline-block; + margin: 15px; +} + +.example-header-image { + background-image: url('assets/img/examples/shiba1.jpg'); + background-size: cover; +} diff --git a/client/src/app/components/users/users.component.spec.ts b/client/src/app/components/users/users.component.spec.ts new file mode 100644 index 0000000..bf054ff --- /dev/null +++ b/client/src/app/components/users/users.component.spec.ts @@ -0,0 +1,35 @@ +/* tslint:disable:no-unused-variable */ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { By } from '@angular/platform-browser'; +import { DebugElement } from '@angular/core'; +import { MaterialModule } from '@angular/material'; +import { reducer } from '../../reducers'; +import { StoreModule } from '@ngrx/store'; + +import { UsersComponent } from './users.component'; + +describe('UsersComponent', () => { + let component: UsersComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [ + MaterialModule.forRoot(), + StoreModule.provideStore(reducer) + ], + declarations: [ UsersComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UsersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/components/users/users.component.ts b/client/src/app/components/users/users.component.ts new file mode 100644 index 0000000..958ee5f --- /dev/null +++ b/client/src/app/components/users/users.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import { Store } from '@ngrx/store'; + +import * as fromRoot from '../../reducers'; +import * as userAction from '../../actions/user'; +import { User } from '../../models/user'; + +@Component({ + selector: 'app-users', + templateUrl: './users.component.html', + styleUrls: ['./users.component.scss'] +}) +export class UsersComponent implements OnInit { + private user$: Observable; + + constructor( + private store: Store, + ) { + this.user$ = store.select(fromRoot.getUserState); + } + + ngOnInit() { + this.store.dispatch(new userAction.LoadUserAction()); + } + +} diff --git a/client/src/app/effects/user.ts b/client/src/app/effects/user.ts new file mode 100644 index 0000000..ead9e53 --- /dev/null +++ b/client/src/app/effects/user.ts @@ -0,0 +1,23 @@ +import 'rxjs/add/operator/switchMap'; +import { Injectable } from '@angular/core'; +import { Effect, Actions } from '@ngrx/effects'; +import { Action } from '@ngrx/store'; +import { Observable } from 'rxjs/Observable'; + +import { UserService } from '../services/user.service'; +import * as user from '../actions/user'; + +@Injectable() +export class UserEffects { + constructor( + private actions$: Actions, + private userService: UserService + ) { } + + @Effect() + loadTransaction$: Observable= this.actions$ + .ofType(user.ActionTypes.LOAD_USER) + .switchMap(() => this.userService.getUsers()) + .map(users => new user.LoadUserSuccessAction(users)); + +} diff --git a/client/src/app/models/user.ts b/client/src/app/models/user.ts new file mode 100644 index 0000000..bc9ac34 --- /dev/null +++ b/client/src/app/models/user.ts @@ -0,0 +1,6 @@ +export interface User { + url: string; + username: string; + email: string; + groups: Array; +} diff --git a/client/src/app/reducers/index.ts b/client/src/app/reducers/index.ts new file mode 100644 index 0000000..22558fd --- /dev/null +++ b/client/src/app/reducers/index.ts @@ -0,0 +1,89 @@ +import { createSelector } from 'reselect'; +import { ActionReducer } from '@ngrx/store'; +import { environment } from '../../environments/environment'; + +/** + * The compose function is one of our most handy tools. In basic terms, you give + * it any number of functions and it returns a function. This new function + * takes a value and chains it through every composed function, returning + * the output. + * + * More: https://drboolean.gitbooks.io/mostly-adequate-guide/content/ch5.html + */ +import { compose } from '@ngrx/core/compose'; + +/** + * storeFreeze prevents state from being mutated. When mutation occurs, an + * exception will be thrown. This is useful during development mode to + * ensure that none of the reducers accidentally mutates the state. + */ +import { storeFreeze } from 'ngrx-store-freeze'; + +/** + * combineReducers is another useful metareducer that takes a map of reducer + * functions and creates a new reducer that stores the gathers the values + * of each reducer and stores them using the reducer's key. Think of it + * almost like a database, where every reducer is a table in the db. + * + * More: https://egghead.io/lessons/javascript-redux-implementing-combinereducers-from-scratch + */ +import { combineReducers } from '@ngrx/store'; + + +/** + * Every reducer module's default export is the reducer function itself. In + * addition, each module should export a type or interface that describes + * the state of the reducer plus any selector functions. The `* as` + * notation packages up all of the exports into a single object. + */ +import * as fromUser from './user'; + + +/** + * As mentioned, we treat each reducer like a table in a database. This means + * our top level state interface is just a map of keys to inner state types. + */ +export interface State { + user: fromUser.State; +} + + +/** + * Because metareducers take a reducer function and return a new reducer, + * we can use our compose helper to chain them together. Here we are + * using combineReducers to make our top level reducer, and then + * wrapping that in storeLogger. Remember that compose applies + * the result from right to left. + */ +const reducers = { + user: fromUser.reducer, +}; + +const developmentReducer: ActionReducer = compose(storeFreeze, combineReducers)(reducers); +const productionReducer: ActionReducer = combineReducers(reducers); + +export function reducer(state: any, action: any) { + if (environment.production) { + return productionReducer(state, action); + } else { + return developmentReducer(state, action); + } +} + + +/** + * A selector function is a map function factory. We pass it parameters and it + * returns a function that maps from the larger state tree into a smaller + * piece of state. This selector simply selects the `books` state. + * + * Selectors are used with the `select` operator. + * + * ```ts + * class MyComponent { + * constructor(state$: Observable) { + * this.booksState$ = state$.select(getBooksState); + * } + * } + * ``` + */ +export const getUserState = (state: State) => state.user; diff --git a/client/src/app/reducers/user.spec.ts b/client/src/app/reducers/user.spec.ts new file mode 100644 index 0000000..4cb17be --- /dev/null +++ b/client/src/app/reducers/user.spec.ts @@ -0,0 +1,58 @@ +import { reducer } from './index'; + +describe('reducers', () => { + it('should handle "Load User" actions', () => { + let state; + state = reducer({ + user: [{ + url: '', + username: '', + email: '', + groups: [] + }]}, {type: '[User] Load User'}); + expect(state).toEqual({ + user: [{ + url: '', + username: '', + email: '', + groups: [] + }] + }); + }); + + it('should handle "Load User Success" actions', () => { + let state; + state = reducer({ + user: [{ + url: '', + username: '', + email: '', + groups: [] + }] + }, { + payload: [{ + url: 'http://localhost:4200/api/users/2/', + username: 'nir', + email: '', + groups: [] + }, { + url: 'http://localhost:4200/api/users/1/', + username: 'admin', + email: 'admin@example.com', + groups: [] + }], type: '[User] Load User Success'}); + expect(state).toEqual({ + user: [{ + url: 'http://localhost:4200/api/users/2/', + username: 'nir', + email: '', + groups: [] + }, { + url: 'http://localhost:4200/api/users/1/', + username: 'admin', + email: 'admin@example.com', + groups: [] + }] + }); + }); +}); diff --git a/client/src/app/reducers/user.ts b/client/src/app/reducers/user.ts new file mode 100644 index 0000000..54010f1 --- /dev/null +++ b/client/src/app/reducers/user.ts @@ -0,0 +1,27 @@ +import { User } from '../models/user'; +import * as user from '../actions/user'; + +export type State = User[]; + +const initialState: State = [{ + url: '', + username: '', + email: '', + groups: [], +}]; + +export function reducer(state = initialState, action: user.Actions): State { + switch (action.type) { + case user.ActionTypes.LOAD_USER: { + return initialState; + } + + case user.ActionTypes.LOAD_USER_SUCCESS: { + return action.payload; + } + + default: { + return state; + } + } +} diff --git a/client/src/app/services/user.service.spec.ts b/client/src/app/services/user.service.spec.ts new file mode 100644 index 0000000..b3d236e --- /dev/null +++ b/client/src/app/services/user.service.spec.ts @@ -0,0 +1,60 @@ +/* tslint:disable:no-unused-variable */ + +import { TestBed, async, inject } from '@angular/core/testing'; +import { UserService } from './user.service'; +import { HttpModule, Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http'; +import { MockBackend } from '@angular/http/testing'; + +describe('TransactionService', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpModule], + providers: [ + UserService, + { + provide: Http, + useFactory: (mockBackend, options) => { + return new Http(mockBackend, options); + }, + deps: [MockBackend, BaseRequestOptions] + }, + MockBackend, + BaseRequestOptions, + ] + }); + }); + + it('should create the service', inject([UserService], (service: UserService) => { + expect(service).toBeTruthy(); + })); + + it('should GET all the users', + inject([UserService, MockBackend], (service: UserService, mockBackend: MockBackend) => { + const mockResponse = [{ + 'url': 'http://localhost:8000/api/users/2/', + 'username': 'nir', + 'email': '', + 'groups': [] + }, { + 'url': 'http://localhost:8000/api/users/1/', + 'username': 'admin', + 'email': 'admin@example.com', + 'groups': [] + }]; + + mockBackend.connections.subscribe((connection) => { + connection.mockRespond(new Response(new ResponseOptions({ + body: JSON.stringify(mockResponse) + }))); + }); + + service.getUsers().subscribe(users => { + expect(users.length).toEqual(2); + expect(users[0].username).toEqual('nir'); + expect(users[0].url).toEqual('http://localhost:8000/api/users/2/'); + expect(users[1].username).toEqual('admin'); + expect(users[1].email).toEqual('admin@example.com'); + }); + })); + +}); diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts new file mode 100644 index 0000000..5b9cbd1 --- /dev/null +++ b/client/src/app/services/user.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { Http, Response } from '@angular/http'; +import { Observable } from 'rxjs/Rx'; + +import { User } from '../models/user'; + +@Injectable() +export class UserService { + + constructor( + private http: Http, + ) { } + + getUsers(): Observable { + return this.http.get('/api/users') + .map(res => res.json()) + .catch(this.handleError); + } + + private handleError(error: Response) { + return Observable.throw(error.json().error || 'Server error'); + } +} diff --git a/client/src/app/util.ts b/client/src/app/util.ts new file mode 100644 index 0000000..14cc719 --- /dev/null +++ b/client/src/app/util.ts @@ -0,0 +1,20 @@ +/** + * This function coerces a string into a string literal type. + * Using tagged union types in TypeScript 2.0, this enables + * powerful typechecking of our reducers. + * + * Since every action label passes through this function it + * is a good place to ensure all of our action labels + * are unique. + */ + +const typeCache: { [label: string]: boolean } = {}; +export function type(label: T | ''): T { + if (typeCache[label]) { + throw new Error(`Action type "${label}" is not unique"`); + } + + typeCache[label] = true; + + return label; +} diff --git a/client/src/assets/person-icon.png b/client/src/assets/person-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..297ac7dd78d37ae8a6390dac0601059d0da214b7 GIT binary patch literal 29454 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 b{;%nY=;O65-&ZDI#If&`W@U7~srv9=gAtp| literal 0 HcmV?d00001 diff --git a/client/tslint.json b/client/tslint.json index 86bc184..662471c 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -27,8 +27,7 @@ "member-access": false, "member-ordering": [ true, - "static-before-instance", - "variables-before-functions" + "static-before-instance" ], "no-arg": true, "no-bitwise": true, @@ -50,7 +49,7 @@ "no-shadowed-variable": true, "no-string-literal": false, "no-string-throw": true, - "no-switch-case-fall-through": true, + "no-switch-case-fall-through": false, "no-trailing-whitespace": true, "no-unused-expression": true, "no-use-before-declare": true, diff --git a/codecov.yml b/codecov.yml index fd34efc..b4b5ae4 100644 --- a/codecov.yml +++ b/codecov.yml @@ -31,6 +31,7 @@ parsers: javascript: enable_partials: false ignore: + - "client/src/app/util.ts" - "server/manage.py" - "server/config" - "server/**/apps.py" From 1e769da3f3ccce643eab67549aafdf187f5deef2 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Fri, 3 Feb 2017 16:11:24 +0200 Subject: [PATCH 03/35] Update the new repo name (#40) --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 0894ad5..6a504f9 100755 --- a/README.md +++ b/README.md @@ -40,16 +40,16 @@ If you want to install the project manually, go to the `/client` or `/server` di Just fork and do a pull request (; [license-image]: https://img.shields.io/badge/license-ISC-blue.svg -[license-url]: https://github.com/nirgn975/Angular2-Django-cluster/blob/master/LICENSE -[travis-image]: https://travis-ci.org/nirgn975/Angular2-Django-cluster.svg?branch=master -[travis-url]: https://travis-ci.org/nirgn975/Angular2-Django-cluster -[codecov-image]: https://codecov.io/gh/nirgn975/Angular2-Django-cluster/branch/master/graph/badge.svg -[codecov-url]: https://codecov.io/gh/nirgn975/Angular2-Django-cluster -[python3-image]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/python-3-shield.svg -[python3-url]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/ -[updates-image]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/shield.svg -[updates-url]: https://pyup.io/repos/github/nirgn975/angular2-django-cluster/ -[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular2-Django-cluster/badge -[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular2-Django-cluster +[license-url]: https://github.com/nirgn975/Angular-Django-cluster/blob/master/LICENSE +[travis-image]: https://travis-ci.org/nirgn975/Angular-Django-cluster.svg?branch=master +[travis-url]: https://travis-ci.org/nirgn975/Angular-Django-cluster +[codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-cluster/branch/master/graph/badge.svg +[codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-cluster +[python3-image]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/python-3-shield.svg +[python3-url]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/ +[updates-image]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/shield.svg +[updates-url]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/ +[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster/badge +[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster [donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg [donate-url]: https://www.paypal.me/nirgn/2 From ce2e4e2b65e26ab0835f9b842829dd36fc067c4c Mon Sep 17 00:00:00 2001 From: "pyup.io bot" Date: Tue, 7 Feb 2017 16:45:58 +0100 Subject: [PATCH 04/35] Update django-cors-headers from 2.0.1 to 2.0.2 (#42) --- server/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/requirements.txt b/server/requirements.txt index 5579d80..db9d90f 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -14,4 +14,4 @@ Markdown==2.6.8 django-filter==1.0.1 # CORS -django-cors-headers==2.0.1 +django-cors-headers==2.0.2 From 10e97a7b0c4b8ac524aafd57d52fbb8d70e19897 Mon Sep 17 00:00:00 2001 From: "pyup.io bot" Date: Fri, 10 Feb 2017 15:24:53 +0100 Subject: [PATCH 05/35] Update djangorestframework from 3.5.3 to 3.5.4 (#43) --- server/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/requirements.txt b/server/requirements.txt index db9d90f..368b79f 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -9,7 +9,7 @@ gunicorn==19.6.0 django-admin-honeypot==1.0.0 # Rest Framework -djangorestframework==3.5.3 +djangorestframework==3.5.4 Markdown==2.6.8 django-filter==1.0.1 From 6f21cc9b45cbd3959054b22d30ae7c2fc7b7f99d Mon Sep 17 00:00:00 2001 From: "pyup.io bot" Date: Sat, 25 Feb 2017 09:36:24 +0100 Subject: [PATCH 06/35] Update django-extensions from 1.7.6 to 1.7.7 (#44) --- server/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/requirements.txt b/server/requirements.txt index 368b79f..af52b49 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -2,7 +2,7 @@ Django==1.10.5 psycopg2==2.6.2 -django-extensions==1.7.6 +django-extensions==1.7.7 gunicorn==19.6.0 # Security From 0e9a169bcdd7e442a9d1a33a2aaba7d526f854fd Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Tue, 28 Feb 2017 09:37:07 +0200 Subject: [PATCH 07/35] Update README (#46) --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 6a504f9..d21aae2 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # An opinionated Angular - Django cluster -[![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Python 3][python3-image]][python3-url] [![Updates][updates-image]][updates-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] +[![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] The `server` directory contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The `client` directory contain an [Angular](https://angular.io/) simple app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and ready to `AOT` compilation. The simple Angular app show the users from the Django api. @@ -45,10 +45,6 @@ Just fork and do a pull request (; [travis-url]: https://travis-ci.org/nirgn975/Angular-Django-cluster [codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-cluster/branch/master/graph/badge.svg [codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-cluster -[python3-image]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/python-3-shield.svg -[python3-url]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/ -[updates-image]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/shield.svg -[updates-url]: https://pyup.io/repos/github/nirgn975/angular-django-cluster/ [dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster/badge [dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster [donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg From 781b7cb9dbe3b882463d04336818686e4c42e8f4 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Thu, 2 Mar 2017 00:43:28 +0200 Subject: [PATCH 08/35] Add Docker files to client and server (#41) * Add Dockerfile to client side * Cleanup * Docker for django app (server) works --- README.md | 13 ++++++++----- client/Dockerfile | 24 ++++++++++++++++++++++++ client/package.json | 2 +- server/Dockerfile | 21 +++++++++++++++++++++ server/README.md | 2 +- server/requirements.txt | 2 +- 6 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 client/Dockerfile create mode 100644 server/Dockerfile diff --git a/README.md b/README.md index d21aae2..4a3bccd 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# An opinionated Angular - Django cluster +# An opinionated Angular - Django RESTful cluster [![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] @@ -15,16 +15,19 @@ The repo is a production ready app, that uses `nginx` to serve static files (the Automatic installation of the project with docker, for development. -1. Run `$ docker-compose up` to build the docker images and run them. -3. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. +1. In `client` directory run `docker build -t client .` to build the Docker image. +2. Run ```docker run -dit -v `pwd`:/usr/src -p 4200:4200 --name=client-con client``` to run a container from that image. 3. Open the browser at [http://localhost:4200](http://localhost:4200) to see your Angular (client) app. +4. In `server` directory run `docker build -t server .` to build the Docker image. +5. Run ```docker run -dit -v `pwd`:/usr/src -p 8000:8000 --name=server-con server``` to run a container from that image. +6. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file. ## Our Stack -* [Angular 2.3](https://angular.io/) -* [Django 1.10.5](https://www.djangoproject.com/) +* [Angular](https://angular.io/) +* [Django](https://www.djangoproject.com/) * [PostgreSQL](http://www.postgresql.org/) * [Docker](https://www.docker.com/) diff --git a/client/Dockerfile b/client/Dockerfile new file mode 100644 index 0000000..8710ff7 --- /dev/null +++ b/client/Dockerfile @@ -0,0 +1,24 @@ +FROM node:latest +MAINTAINER Nir Galon + +RUN useradd --user-group --create-home --shell /bin/false app + +ENV APP_NAME "client" +ENV APP_USER "app" +ENV HOME /home/$APP_USER +ENV APP_DIR $HOME/$APP_NAME + +RUN npm install --global --silent angular-cli + +WORKDIR $APP_DIR +COPY package.json $APP_DIR/package.json +RUN npm install --silent && npm cache clean +COPY . $APP_DIR +RUN chown -R $APP_USER:$APP_USER $HOME/* + +USER $APP_USER +WORKDIR $APP_DIR + +EXPOSE 4200 + +CMD ["npm", "start"] diff --git a/client/package.json b/client/package.json index 41ef191..4f4a17b 100644 --- a/client/package.json +++ b/client/package.json @@ -5,7 +5,7 @@ "angular-cli": {}, "scripts": { "ng": "ng", - "start": "ng serve --proxy-config proxy.conf.json", + "start": "ng serve --host=0.0.0.0 --proxy-config proxy.conf.json", "lint": "tslint \"src/**/*.ts\" --project src/tsconfig.json --type-check && tslint \"e2e/**/*.ts\" --project e2e/tsconfig.json --type-check", "test": "ng test --single-run --code-coverage", "pree2e": "webdriver-manager update --standalone false --gecko false", diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..371c239 --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,21 @@ +FROM python:3-onbuild +MAINTAINER Nir Galon + +RUN useradd --user-group --create-home --shell /bin/false app + +ENV APP_NAME "server" +ENV APP_USER "app" +ENV HOME /home/$APP_USER +ENV APP_DIR $HOME/$APP_NAME + +WORKDIR $APP_DIR +COPY requirements.txt $APP_DIR/requirements.txt + +COPY . $APP_DIR +RUN chown -R $APP_USER:$APP_USER $HOME/* + +USER $APP_USER +WORKDIR $APP_DIR + +EXPOSE 8000 +CMD ["gunicorn", "config.wsgi", "-b", "0.0.0.0:8000"] diff --git a/server/README.md b/server/README.md index fc5ebaa..6bced75 100644 --- a/server/README.md +++ b/server/README.md @@ -1,4 +1,4 @@ -## server +## Server The server (backend) side of the project written [Python](https://www.python.org/) using [Django 1.10.5](https://www.djangoproject.com/), [Django REST framework](http://www.django-rest-framework.org/). diff --git a/server/requirements.txt b/server/requirements.txt index af52b49..bf5abce 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -1,6 +1,6 @@ # Install with: `pip install -r requirements.txt` -Django==1.10.5 +Django==1.10.6 psycopg2==2.6.2 django-extensions==1.7.7 gunicorn==19.6.0 From fe039c0b65203fa471df67ceb32527a080a4ab97 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Thu, 2 Mar 2017 01:34:29 +0200 Subject: [PATCH 09/35] Update ng-cli (#48) * Upgrade ng-cli version * Fix tests * Fix npm test command --- .../{angular-cli.json => .angular-cli.json} | 32 +++---- client/.gitignore | 1 + client/e2e/app.e2e-spec.ts | 2 +- .../e2e/{tsconfig.json => tsconfig.e2e.json} | 17 ++-- client/karma.conf.js | 25 ++--- client/package.json | 65 +++++++------ client/protractor.conf.js | 10 +- client/src/app/app.component.spec.ts | 14 ++- client/src/app/app.module.ts | 4 +- .../app/components/users/users.component.scss | 5 - client/src/environments/environment.ts | 2 +- client/src/main.ts | 5 +- client/src/polyfills.ts | 92 ++++++++++++------- .../src/{tsconfig.json => tsconfig.app.json} | 26 ++++-- client/src/tsconfig.spec.json | 27 ++++++ client/tsconfig.json | 14 +++ client/tslint.json | 2 +- 17 files changed, 204 insertions(+), 139 deletions(-) rename client/{angular-cli.json => .angular-cli.json} (58%) rename client/e2e/{tsconfig.json => tsconfig.e2e.json} (71%) rename client/src/{tsconfig.json => tsconfig.app.json} (53%) create mode 100644 client/src/tsconfig.spec.json create mode 100644 client/tsconfig.json diff --git a/client/angular-cli.json b/client/.angular-cli.json similarity index 58% rename from client/angular-cli.json rename to client/.angular-cli.json index 65781f3..8373969 100644 --- a/client/angular-cli.json +++ b/client/.angular-cli.json @@ -1,6 +1,6 @@ { + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "project": { - "version": "1.0.0-beta.28.3", "name": "client" }, "apps": [ @@ -15,14 +15,15 @@ "main": "main.ts", "polyfills": "polyfills.ts", "test": "test.ts", - "tsconfig": "tsconfig.json", + "tsconfig": "tsconfig.app.json", + "testTsconfig": "tsconfig.spec.json", "prefix": "app", "styles": [ "styles.scss" ], "scripts": [], + "environmentSource": "environments/environment.ts", "environments": { - "source": "environments/environment.ts", "dev": "environments/environment.ts", "prod": "environments/environment.prod.ts" } @@ -35,12 +36,13 @@ }, "lint": [ { - "files": "src/**/*.ts", - "project": "src/tsconfig.json" + "project": "src/tsconfig.app.json" }, { - "files": "e2e/**/*.ts", - "project": "e2e/tsconfig.json" + "project": "src/tsconfig.spec.json" + }, + { + "project": "e2e/tsconfig.e2e.json" } ], "test": { @@ -49,19 +51,7 @@ } }, "defaults": { - "styleExt": "scss", - "prefixInterfaces": false, - "inline": { - "style": false, - "template": false - }, - "spec": { - "class": false, - "component": true, - "directive": true, - "module": false, - "pipe": true, - "service": true - } + "styleExt": "css", + "component": {} } } diff --git a/client/.gitignore b/client/.gitignore index fe6f8a7..8ce8738 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -14,6 +14,7 @@ .c9/ *.launch .settings/ +*.sublime-workspace # IDE - VSCode .vscode/* diff --git a/client/e2e/app.e2e-spec.ts b/client/e2e/app.e2e-spec.ts index 2e0023e..7547b08 100644 --- a/client/e2e/app.e2e-spec.ts +++ b/client/e2e/app.e2e-spec.ts @@ -1,6 +1,6 @@ import { ClientPage } from './app.po'; -describe('client App', function() { +describe('client App', () => { let page: ClientPage; beforeEach(() => { diff --git a/client/e2e/tsconfig.json b/client/e2e/tsconfig.e2e.json similarity index 71% rename from client/e2e/tsconfig.json rename to client/e2e/tsconfig.e2e.json index 656bdb1..74c2bca 100644 --- a/client/e2e/tsconfig.json +++ b/client/e2e/tsconfig.e2e.json @@ -1,16 +1,19 @@ { - "compileOnSave": false, "compilerOptions": { + "sourceMap": true, "declaration": false, + "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "module": "commonjs", - "moduleResolution": "node", + "lib": [ + "es2016" + ], "outDir": "../dist/out-tsc-e2e", - "sourceMap": true, - "target": "es5", - "typeRoots": [ - "../node_modules/@types" + "module": "commonjs", + "target": "es6", + "types":[ + "jasmine", + "node" ] } } diff --git a/client/karma.conf.js b/client/karma.conf.js index 1f2613a..84b4cd5 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -4,35 +4,36 @@ module.exports = function (config) { config.set({ basePath: '', - frameworks: ['jasmine', 'angular-cli'], + frameworks: ['jasmine', '@angular/cli'], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), - require('karma-remap-istanbul'), - require('angular-cli/plugins/karma') + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular/cli/plugins/karma') ], + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, files: [ { pattern: './src/test.ts', watched: false } ], preprocessors: { - './src/test.ts': ['angular-cli'] + './src/test.ts': ['@angular/cli'] }, mime: { 'text/x-typescript': ['ts','tsx'] }, - remapIstanbulReporter: { - reports: { - html: 'coverage', - lcovonly: './coverage/coverage.lcov' - } + coverageIstanbulReporter: { + reports: [ 'html', 'lcovonly' ], + fixWebpackSourcePaths: true }, angularCli: { - config: './angular-cli.json', environment: 'dev' }, reporters: config.angularCli && config.angularCli.codeCoverage - ? ['progress', 'karma-remap-istanbul'] - : ['progress'], + ? ['progress', 'coverage-istanbul'] + : ['progress', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/client/package.json b/client/package.json index 4f4a17b..971365b 100644 --- a/client/package.json +++ b/client/package.json @@ -2,57 +2,56 @@ "name": "client", "version": "1.0.0", "license": "ISC", - "angular-cli": {}, "scripts": { "ng": "ng", "start": "ng serve --host=0.0.0.0 --proxy-config proxy.conf.json", - "lint": "tslint \"src/**/*.ts\" --project src/tsconfig.json --type-check && tslint \"e2e/**/*.ts\" --project e2e/tsconfig.json --type-check", + "build": "ng build", "test": "ng test --single-run --code-coverage", - "pree2e": "webdriver-manager update --standalone false --gecko false", - "e2e": "protractor", + "lint": "ng lint", + "e2e": "ng e2e", "sw": "sw-precache --root=dist --config=sw-precache-config.js" }, "private": false, "dependencies": { - "@angular/common": "^2.3.1", - "@angular/compiler": "^2.3.1", - "@angular/core": "^2.3.1", - "@angular/forms": "^2.3.1", - "@angular/http": "^2.3.1", - "@angular/material": "^2.0.0-beta.1", - "@angular/platform-browser": "^2.3.1", - "@angular/platform-browser-dynamic": "^2.3.1", - "@angular/router": "^3.3.1", + "@angular/common": "^2.4.0", + "@angular/compiler": "^2.4.0", + "@angular/core": "^2.4.0", + "@angular/forms": "^2.4.0", + "@angular/http": "^2.4.0", + "@angular/material": "^2.0.0-beta.2", + "@angular/platform-browser": "^2.4.0", + "@angular/platform-browser-dynamic": "^2.4.0", + "@angular/router": "^3.4.0", "@ngrx/core": "^1.2.0", "@ngrx/effects": "^2.0.0", "@ngrx/store": "^2.2.1", "core-js": "^2.4.1", "hammerjs": "^2.0.8", "reselect": "^2.5.4", - "rxjs": "^5.0.1", - "ts-helpers": "^1.1.1", - "zone.js": "^0.7.2" + "rxjs": "^5.1.0", + "zone.js": "^0.7.6" }, "devDependencies": { - "@angular/compiler-cli": "^2.3.1", + "@angular/cli": "1.0.0-rc.0", + "@angular/compiler-cli": "^2.4.0", "@ngrx/store-devtools": "^3.2.3", "@types/hammerjs": "^2.0.34", "@types/jasmine": "2.5.38", - "@types/node": "^6.0.42", - "angular-cli": "1.0.0-beta.28.3", - "codelyzer": "~2.0.0-beta.1", - "jasmine-core": "2.5.2", - "jasmine-spec-reporter": "2.5.0", - "karma": "1.2.0", - "karma-chrome-launcher": "^2.0.0", - "karma-cli": "^1.0.1", - "karma-jasmine": "^1.0.2", - "karma-remap-istanbul": "^0.2.1", - "ngrx-store-freeze": "^0.1.6", - "protractor": "~4.0.13", - "sw-precache": "^4.3.0", - "ts-node": "1.2.1", - "tslint": "^4.3.0", - "typescript": "~2.0.3" + "@types/node": "~6.0.60", + "codelyzer": "~2.0.0", + "jasmine-core": "~2.5.2", + "jasmine-spec-reporter": "~3.2.0", + "karma": "~1.4.1", + "karma-chrome-launcher": "~2.0.0", + "karma-cli": "~1.0.1", + "karma-coverage-istanbul-reporter": "^0.2.0", + "karma-jasmine": "~1.1.0", + "karma-jasmine-html-reporter": "^0.2.2", + "ngrx-store-freeze": "^0.1.9", + "protractor": "~5.1.0", + "sw-precache": "^5.0.0", + "ts-node": "~2.0.0", + "tslint": "~4.4.2", + "typescript": "~2.0.0" } } diff --git a/client/protractor.conf.js b/client/protractor.conf.js index ffded70..1c5e1e5 100644 --- a/client/protractor.conf.js +++ b/client/protractor.conf.js @@ -1,8 +1,7 @@ // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts -/*global jasmine */ -var SpecReporter = require('jasmine-spec-reporter'); +const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, @@ -20,13 +19,12 @@ exports.config = { defaultTimeoutInterval: 30000, print: function() {} }, - useAllAngular2AppRoots: true, beforeLaunch: function() { require('ts-node').register({ - project: 'e2e' + project: 'e2e/tsconfig.e2e.json' }); }, - onPrepare: function() { - jasmine.getEnv().addReporter(new SpecReporter()); + onPrepare() { + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } }; diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index db33a39..77c0551 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -1,23 +1,21 @@ -/* tslint:disable:no-unused-variable */ - import { TestBed, async } from '@angular/core/testing'; -import { AppComponent } from './app.component'; import { MaterialModule } from '@angular/material'; import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + describe('AppComponent', () => { - beforeEach(() => { + beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - MaterialModule.forRoot(), + MaterialModule, RouterTestingModule, ], declarations: [ AppComponent ], - }); - TestBed.compileComponents(); - }); + }).compileComponents(); + })); it('should create the app', async(() => { const fixture = TestBed.createComponent(AppComponent); diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 00df90f..4e8cfaf 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,3 +1,5 @@ +import 'hammerjs'; + import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; @@ -27,7 +29,7 @@ import { UserService } from './services/user.service'; FormsModule, HttpModule, AppRoutingModule, - MaterialModule.forRoot(), + MaterialModule, StoreModule.provideStore(reducer), StoreDevtoolsModule.instrumentOnlyWithExtension(), EffectsModule.run(UserEffects), diff --git a/client/src/app/components/users/users.component.scss b/client/src/app/components/users/users.component.scss index 350d4d6..024218a 100644 --- a/client/src/app/components/users/users.component.scss +++ b/client/src/app/components/users/users.component.scss @@ -3,8 +3,3 @@ display: inline-block; margin: 15px; } - -.example-header-image { - background-image: url('assets/img/examples/shiba1.jpg'); - background-size: cover; -} diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index 00313f1..b7f639a 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts @@ -1,7 +1,7 @@ // The file contents for the current environment will overwrite these during build. // The build system defaults to the dev environment which uses `environment.ts`, but if you do // `ng build --env=prod` then `environment.prod.ts` will be used instead. -// The list of which env maps to which file can be found in `angular-cli.json`. +// The list of which env maps to which file can be found in `.angular-cli.json`. export const environment = { production: false diff --git a/client/src/main.ts b/client/src/main.ts index 46c1c73..a9ca1ca 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,7 +1,8 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { enableProdMode } from '@angular/core'; -import { environment } from './environments/environment'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; if (environment.production) { enableProdMode(); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index 1bdd4d3..53bdaf1 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts @@ -1,38 +1,68 @@ -// This file includes polyfills needed by Angular and is loaded before the app. -// You can add your own extra polyfills to this file. -import 'core-js/es6/symbol'; -import 'core-js/es6/object'; -import 'core-js/es6/function'; -import 'core-js/es6/parse-int'; -import 'core-js/es6/parse-float'; -import 'core-js/es6/number'; -import 'core-js/es6/math'; -import 'core-js/es6/string'; -import 'core-js/es6/date'; -import 'core-js/es6/array'; -import 'core-js/es6/regexp'; -import 'core-js/es6/map'; -import 'core-js/es6/set'; -import 'core-js/es6/reflect'; +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** IE9, IE10 and IE11 requires all of the following polyfills. **/ +// import 'core-js/es6/symbol'; +// import 'core-js/es6/object'; +// import 'core-js/es6/function'; +// import 'core-js/es6/parse-int'; +// import 'core-js/es6/parse-float'; +// import 'core-js/es6/number'; +// import 'core-js/es6/math'; +// import 'core-js/es6/string'; +// import 'core-js/es6/date'; +// import 'core-js/es6/array'; +// import 'core-js/es6/regexp'; +// import 'core-js/es6/map'; +// import 'core-js/es6/set'; + +/** IE10 and IE11 requires the following for NgClass support on SVG elements */ +// import 'classlist.js'; // Run `npm install --save classlist.js`. + +/** IE10 and IE11 requires the following to support `@angular/animation`. */ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/** Evergreen browsers require these. **/ +import 'core-js/es6/reflect'; import 'core-js/es7/reflect'; -import 'zone.js/dist/zone'; -// If you need to support the browsers/features below, uncomment the import -// and run `npm install import-name-here'; -// Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html -// Needed for: IE9 -// import 'classlist.js'; +/** ALL Firefox browsers require the following to support `@angular/animation`. **/ +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + + + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; // Included with Angular CLI. + -// Animations -// Needed for: All but Chrome and Firefox, Not supported in IE9 -// import 'web-animations-js'; -// Date, currency, decimal and percent pipes -// Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 -// import 'intl'; +/*************************************************************************************************** + * APPLICATION IMPORTS + */ -// NgClass on SVG elements -// Needed for: IE10, IE11 -// import 'classlist.js'; +/** + * Date, currency, decimal and percent pipes. + * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 + */ +// import 'intl'; // Run `npm install --save intl`. diff --git a/client/src/tsconfig.json b/client/src/tsconfig.app.json similarity index 53% rename from client/src/tsconfig.json rename to client/src/tsconfig.app.json index 1cf713a..7bbfdf0 100644 --- a/client/src/tsconfig.json +++ b/client/src/tsconfig.app.json @@ -1,18 +1,24 @@ { "compilerOptions": { - "baseUrl": "", + "sourceMap": true, "declaration": false, + "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, - "lib": ["es6", "dom"], - "mapRoot": "./", - "module": "es6", - "moduleResolution": "node", - "outDir": "../dist/out-tsc", - "sourceMap": true, + "lib": [ + "es2016", + "dom" + ], + "outDir": "../out-tsc/app", "target": "es5", - "typeRoots": [ - "../node_modules/@types" + "module": "es2015", + "baseUrl": "", + "types": [ + "hammerjs" ] - } + }, + "exclude": [ + "test.ts", + "**/*.spec.ts" + ] } diff --git a/client/src/tsconfig.spec.json b/client/src/tsconfig.spec.json new file mode 100644 index 0000000..1dff6b4 --- /dev/null +++ b/client/src/tsconfig.spec.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ + "es2016" + ], + "outDir": "../out-tsc/spec", + "module": "commonjs", + "target": "es6", + "baseUrl": "", + "types": [ + "jasmine", + "node", + "hammerjs" + ] + }, + "files": [ + "test.ts" + ], + "include": [ + "**/*.spec.ts" + ] +} diff --git a/client/tsconfig.json b/client/tsconfig.json new file mode 100644 index 0000000..cde5e35 --- /dev/null +++ b/client/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "lib": [ + "es2016" + ] + } +} diff --git a/client/tslint.json b/client/tslint.json index 662471c..4124d9a 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -45,7 +45,7 @@ "no-empty": false, "no-empty-interface": true, "no-eval": true, - "no-inferrable-types": true, + "no-inferrable-types": [true, "ignore-params"], "no-shadowed-variable": true, "no-string-literal": false, "no-string-throw": true, From df74da5641479110733ad647cb26993ce14dcf1a Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 6 May 2017 12:07:02 +0300 Subject: [PATCH 10/35] Update pip versions (#51) --- .travis.yml | 2 +- server/README.md | 8 ++------ server/requirements.txt | 12 ++++++------ 3 files changed, 9 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index d2ff573..527e741 100644 --- a/.travis.yml +++ b/.travis.yml @@ -47,7 +47,7 @@ script: # Server - cd ../server && coverage run --source='.' manage.py test - coverage xml - - pycodestyle --show-source --max-line-length=119 --show-pep8 . + - pycodestyle --show-source --max-line-length=120 --show-pep8 . after_script: - cd .. && codecov diff --git a/server/README.md b/server/README.md index 6bced75..13d441a 100644 --- a/server/README.md +++ b/server/README.md @@ -1,6 +1,6 @@ ## Server -The server (backend) side of the project written [Python](https://www.python.org/) using [Django 1.10.5](https://www.djangoproject.com/), [Django REST framework](http://www.django-rest-framework.org/). +The server (backend) side of the project written [Python](https://www.python.org/) using [Django 1.11](https://www.djangoproject.com/), [Django REST framework](http://www.django-rest-framework.org/). ## Prerequisites @@ -17,9 +17,5 @@ The server (backend) side of the project written [Python](https://www.python.org ## Tests -* Run `pycodestyle --show-source --max-line-length=119 --show-pep8 server;` to check for lint mistakes (by PEP8) +* Run `pycodestyle --show-source --max-line-length=120 --show-pep8 server;` to check for lint mistakes (by PEP8) * Run `python manage.py test` to execute the unit tests - -## Deploy - -1. Not Yet diff --git a/server/requirements.txt b/server/requirements.txt index bf5abce..c0fc23a 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -1,17 +1,17 @@ # Install with: `pip install -r requirements.txt` -Django==1.10.6 -psycopg2==2.6.2 -django-extensions==1.7.7 -gunicorn==19.6.0 +Django==1.11 +psycopg2==2.7.1 +django-extensions==1.7.9 +gunicorn==19.7.1 # Security django-admin-honeypot==1.0.0 # Rest Framework -djangorestframework==3.5.4 +djangorestframework==3.6.2 Markdown==2.6.8 -django-filter==1.0.1 +django-filter==1.0.2 # CORS django-cors-headers==2.0.2 From 3e998dd20fad7aa27a569369881a4bb20219e1cf Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 6 May 2017 13:54:32 +0300 Subject: [PATCH 11/35] Update client dependencies (#52) * Update angular version * Fix lint errors * Test users component * Test user effects --- client/.gitignore | 5 +- client/e2e/tsconfig.e2e.json | 13 ++---- client/package.json | 39 ++++++++-------- client/src/app/actions/user.ts | 11 ++--- client/src/app/app.component.ts | 1 - client/src/app/app.module.ts | 2 + .../app/components/users/users.component.html | 6 +-- .../components/users/users.component.spec.ts | 46 +++++++++++++++++-- .../app/components/users/users.component.ts | 2 +- client/src/app/effects/user.spec.ts | 45 ++++++++++++++++++ client/src/app/effects/user.ts | 4 +- client/src/app/reducers/user.ts | 4 +- client/src/app/util.ts | 20 -------- client/src/index.html | 1 + client/src/styles.scss | 24 ++++++++++ client/src/tsconfig.app.json | 11 +---- client/src/tsconfig.spec.json | 17 ++----- client/src/typings.d.ts | 5 ++ client/tsconfig.json | 8 +++- codecov.yml | 2 +- server/config/settings.py | 16 +++---- server/config/urls.py | 2 +- server/config/wsgi.py | 2 +- 23 files changed, 182 insertions(+), 104 deletions(-) create mode 100644 client/src/app/effects/user.spec.ts delete mode 100644 client/src/app/util.ts create mode 100644 client/src/typings.d.ts diff --git a/client/.gitignore b/client/.gitignore index 8ce8738..54bfd20 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -3,6 +3,7 @@ # compiled output /dist /tmp +/out-tsc # dependencies /node_modules @@ -26,7 +27,7 @@ # misc /.sass-cache /connect.lock -/coverage/* +/coverage /libpeerconnection.log npm-debug.log testem.log @@ -36,6 +37,6 @@ testem.log /e2e/*.js /e2e/*.map -#System Files +# System Files .DS_Store Thumbs.db diff --git a/client/e2e/tsconfig.e2e.json b/client/e2e/tsconfig.e2e.json index 74c2bca..ac7a373 100644 --- a/client/e2e/tsconfig.e2e.json +++ b/client/e2e/tsconfig.e2e.json @@ -1,16 +1,9 @@ { + "extends": "../tsconfig.json", "compilerOptions": { - "sourceMap": true, - "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": [ - "es2016" - ], - "outDir": "../dist/out-tsc-e2e", + "outDir": "../out-tsc/e2e", "module": "commonjs", - "target": "es6", + "target": "es5", "types":[ "jasmine", "node" diff --git a/client/package.json b/client/package.json index 971365b..2903caf 100644 --- a/client/package.json +++ b/client/package.json @@ -13,28 +13,29 @@ }, "private": false, "dependencies": { - "@angular/common": "^2.4.0", - "@angular/compiler": "^2.4.0", - "@angular/core": "^2.4.0", - "@angular/forms": "^2.4.0", - "@angular/http": "^2.4.0", - "@angular/material": "^2.0.0-beta.2", - "@angular/platform-browser": "^2.4.0", - "@angular/platform-browser-dynamic": "^2.4.0", - "@angular/router": "^3.4.0", + "@angular/animations": "^4.1.1", + "@angular/common": "^4.0.0", + "@angular/compiler": "^4.0.0", + "@angular/core": "^4.0.0", + "@angular/forms": "^4.0.0", + "@angular/http": "^4.0.0", + "@angular/material": "^2.0.0-beta.3", + "@angular/platform-browser": "^4.0.0", + "@angular/platform-browser-dynamic": "^4.0.0", + "@angular/router": "^4.0.0", "@ngrx/core": "^1.2.0", - "@ngrx/effects": "^2.0.0", - "@ngrx/store": "^2.2.1", + "@ngrx/effects": "^2.0.3", + "@ngrx/store": "^2.2.2", "core-js": "^2.4.1", "hammerjs": "^2.0.8", - "reselect": "^2.5.4", + "reselect": "^3.0.0", "rxjs": "^5.1.0", - "zone.js": "^0.7.6" + "zone.js": "^0.8.4" }, "devDependencies": { - "@angular/cli": "1.0.0-rc.0", - "@angular/compiler-cli": "^2.4.0", - "@ngrx/store-devtools": "^3.2.3", + "@angular/cli": "1.0.2", + "@angular/compiler-cli": "^4.0.0", + "@ngrx/store-devtools": "^3.2.4", "@types/hammerjs": "^2.0.34", "@types/jasmine": "2.5.38", "@types/node": "~6.0.60", @@ -49,9 +50,9 @@ "karma-jasmine-html-reporter": "^0.2.2", "ngrx-store-freeze": "^0.1.9", "protractor": "~5.1.0", - "sw-precache": "^5.0.0", + "sw-precache": "^5.1.1", "ts-node": "~2.0.0", - "tslint": "~4.4.2", - "typescript": "~2.0.0" + "tslint": "~4.5.0", + "typescript": "~2.2.0" } } diff --git a/client/src/app/actions/user.ts b/client/src/app/actions/user.ts index 83f5ae6..9e04ba9 100644 --- a/client/src/app/actions/user.ts +++ b/client/src/app/actions/user.ts @@ -1,20 +1,17 @@ import { Action } from '@ngrx/store'; import { User } from '../models/user'; -import { type } from '../util'; -export const ActionTypes = { - LOAD_USER: type('[User] Load User'), - LOAD_USER_SUCCESS: type('[User] Load User Success'), -}; +export const LOAD_USER = '[User] Load User'; +export const LOAD_USER_SUCCESS = '[User] Load User Success'; export class LoadUserAction implements Action { - type = ActionTypes.LOAD_USER; + readonly type = LOAD_USER; constructor() { } } export class LoadUserSuccessAction implements Action { - type = ActionTypes.LOAD_USER_SUCCESS; + readonly type = LOAD_USER_SUCCESS; constructor(public payload: User[]) { } } diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index 1536d27..bdb6c83 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -8,5 +8,4 @@ import { Component } from '@angular/core'; styles: [``] }) export class AppComponent { - title = 'app works!'; } diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 4e8cfaf..b5511db 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -8,6 +8,7 @@ import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; import { MaterialModule } from '@angular/material'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { reducer } from './reducers'; import { AppRoutingModule } from './app-routing.module'; @@ -30,6 +31,7 @@ import { UserService } from './services/user.service'; HttpModule, AppRoutingModule, MaterialModule, + BrowserAnimationsModule, StoreModule.provideStore(reducer), StoreDevtoolsModule.instrumentOnlyWithExtension(), EffectsModule.run(UserEffects), diff --git a/client/src/app/components/users/users.component.html b/client/src/app/components/users/users.component.html index 586e45a..359bdb7 100644 --- a/client/src/app/components/users/users.component.html +++ b/client/src/app/components/users/users.component.html @@ -1,12 +1,12 @@
- {{user.username}} - {{user.email}} + {{ user.username }} + {{ user.email }}
-

{{user.url}}

+

{{ user.url }}

diff --git a/client/src/app/components/users/users.component.spec.ts b/client/src/app/components/users/users.component.spec.ts index bf054ff..f0f773d 100644 --- a/client/src/app/components/users/users.component.spec.ts +++ b/client/src/app/components/users/users.component.spec.ts @@ -1,7 +1,9 @@ -/* tslint:disable:no-unused-variable */ +import 'hammerjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { DebugElement } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; import { MaterialModule } from '@angular/material'; import { reducer } from '../../reducers'; import { StoreModule } from '@ngrx/store'; @@ -11,14 +13,28 @@ import { UsersComponent } from './users.component'; describe('UsersComponent', () => { let component: UsersComponent; let fixture: ComponentFixture; + let debugs: DebugElement[]; + let element: HTMLElement; + const users: any = Observable.of([{ + url: 'http://localhost/nirgalon', + username: 'Nir Galon', + email: 'nir@example.com', + groups: ['admin'] + }, { + url: 'http://localhost/adisaar', + username: 'Adi Saar', + email: '', + groups: ['users'] + }]); beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - MaterialModule.forRoot(), + MaterialModule, StoreModule.provideStore(reducer) ], - declarations: [ UsersComponent ] + declarations: [ UsersComponent ], + schemas: [ NO_ERRORS_SCHEMA ] }) .compileComponents(); })); @@ -26,10 +42,34 @@ describe('UsersComponent', () => { beforeEach(() => { fixture = TestBed.createComponent(UsersComponent); component = fixture.componentInstance; + + // Create a dummy transaction. + component.user$ = users; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should display first user email', () => { + element = fixture.debugElement.query(By.css('md-card-subtitle')).nativeElement; + expect(element.textContent).toContain('nir@example.com'); + }); + + it('should display users name', () => { + debugs = fixture.debugElement.queryAll(By.css('md-card-title')); + debugs.forEach((elem, index) => { + element = elem.nativeElement; + expect(element.textContent).toContain(users.value[index].username); + }); + }); + + it('should display the users url links', () => { + debugs = fixture.debugElement.queryAll(By.css('md-card-content > p')); + debugs.forEach((elem, index) => { + element = elem.nativeElement; + expect(element.textContent).toContain(users.value[index].url); + }); + }); }); diff --git a/client/src/app/components/users/users.component.ts b/client/src/app/components/users/users.component.ts index 958ee5f..637dec2 100644 --- a/client/src/app/components/users/users.component.ts +++ b/client/src/app/components/users/users.component.ts @@ -12,7 +12,7 @@ import { User } from '../../models/user'; styleUrls: ['./users.component.scss'] }) export class UsersComponent implements OnInit { - private user$: Observable; + public user$: Observable; constructor( private store: Store, diff --git a/client/src/app/effects/user.spec.ts b/client/src/app/effects/user.spec.ts new file mode 100644 index 0000000..0ec4356 --- /dev/null +++ b/client/src/app/effects/user.spec.ts @@ -0,0 +1,45 @@ +import { TestBed, async, inject } from '@angular/core/testing'; +import { EffectsTestingModule, EffectsRunner } from '@ngrx/effects/testing'; + +import { UserEffects } from './user'; +import { UserService } from '../services/user.service'; +import * as userAction from '../actions/user'; + +describe('UsersEffects', () => { + const userServiceStub = {}; + let runner: EffectsRunner; + let userEffects: UserEffects; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + EffectsTestingModule, + ], + providers: [ + { provide: UserService, useValue: userServiceStub }, + UserEffects, + ] + }); + }); + + beforeEach(inject([ + EffectsRunner, UserEffects + ], + (_runner, _userEffects) => { + runner = _runner; + userEffects = _userEffects; + } + )); + + it('should create the service', inject([UserEffects], (service: UserEffects) => { + expect(service).toBeTruthy(); + })); + + it('should return a LOAD_USER_SUCCESS action after LOAD_USER', () => { + runner.queue({ type: 'LOAD_USER' }); + + userEffects.loadUser$.subscribe(result => { + expect(result).toEqual({ type: 'LOAD_USER_SUCCESS' }); + }); + }); +}); diff --git a/client/src/app/effects/user.ts b/client/src/app/effects/user.ts index ead9e53..8e71811 100644 --- a/client/src/app/effects/user.ts +++ b/client/src/app/effects/user.ts @@ -15,8 +15,8 @@ export class UserEffects { ) { } @Effect() - loadTransaction$: Observable= this.actions$ - .ofType(user.ActionTypes.LOAD_USER) + loadUser$: Observable= this.actions$ + .ofType(user.LOAD_USER) .switchMap(() => this.userService.getUsers()) .map(users => new user.LoadUserSuccessAction(users)); diff --git a/client/src/app/reducers/user.ts b/client/src/app/reducers/user.ts index 54010f1..2458e4a 100644 --- a/client/src/app/reducers/user.ts +++ b/client/src/app/reducers/user.ts @@ -12,11 +12,11 @@ const initialState: State = [{ export function reducer(state = initialState, action: user.Actions): State { switch (action.type) { - case user.ActionTypes.LOAD_USER: { + case user.LOAD_USER: { return initialState; } - case user.ActionTypes.LOAD_USER_SUCCESS: { + case user.LOAD_USER_SUCCESS: { return action.payload; } diff --git a/client/src/app/util.ts b/client/src/app/util.ts deleted file mode 100644 index 14cc719..0000000 --- a/client/src/app/util.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * This function coerces a string into a string literal type. - * Using tagged union types in TypeScript 2.0, this enables - * powerful typechecking of our reducers. - * - * Since every action label passes through this function it - * is a good place to ensure all of our action labels - * are unique. - */ - -const typeCache: { [label: string]: boolean } = {}; -export function type(label: T | ''): T { - if (typeCache[label]) { - throw new Error(`Action type "${label}" is not unique"`); - } - - typeCache[label] = true; - - return label; -} diff --git a/client/src/index.html b/client/src/index.html index 7c71984..2db8d99 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -7,6 +7,7 @@ + Loading... diff --git a/client/src/styles.scss b/client/src/styles.scss index 90d4ee0..5367e13 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -1 +1,25 @@ /* You can add global styles to this file, and also import other style files */ +@import '~@angular/material/theming'; +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat-core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. +$candy-app-primary: mat-palette($mat-indigo); +$candy-app-accent: mat-palette($mat-pink, A200, A100, A400); + +// The warn palette is optional (defaults to red). +$candy-app-warn: mat-palette($mat-red); + +// Create the theme object (a Sass map containing all of the palettes). +$candy-app-theme: mat-light-theme($candy-app-primary, $candy-app-accent, $candy-app-warn); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include angular-material-theme($candy-app-theme); diff --git a/client/src/tsconfig.app.json b/client/src/tsconfig.app.json index 7bbfdf0..92fa007 100644 --- a/client/src/tsconfig.app.json +++ b/client/src/tsconfig.app.json @@ -1,16 +1,7 @@ { + "extends": "../tsconfig.json", "compilerOptions": { - "sourceMap": true, - "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": [ - "es2016", - "dom" - ], "outDir": "../out-tsc/app", - "target": "es5", "module": "es2015", "baseUrl": "", "types": [ diff --git a/client/src/tsconfig.spec.json b/client/src/tsconfig.spec.json index 1dff6b4..510e3f1 100644 --- a/client/src/tsconfig.spec.json +++ b/client/src/tsconfig.spec.json @@ -1,27 +1,20 @@ { + "extends": "../tsconfig.json", "compilerOptions": { - "sourceMap": true, - "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "lib": [ - "es2016" - ], "outDir": "../out-tsc/spec", "module": "commonjs", - "target": "es6", + "target": "es5", "baseUrl": "", "types": [ "jasmine", - "node", - "hammerjs" + "node" ] }, "files": [ "test.ts" ], "include": [ - "**/*.spec.ts" + "**/*.spec.ts", + "**/*.d.ts" ] } diff --git a/client/src/typings.d.ts b/client/src/typings.d.ts new file mode 100644 index 0000000..ef5c7bd --- /dev/null +++ b/client/src/typings.d.ts @@ -0,0 +1,5 @@ +/* SystemJS module definition */ +declare var module: NodeModule; +interface NodeModule { + id: string; +} diff --git a/client/tsconfig.json b/client/tsconfig.json index cde5e35..a35a8ee 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -2,13 +2,19 @@ "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", + "baseUrl": "src", "sourceMap": true, "declaration": false, "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, + "target": "es5", + "typeRoots": [ + "node_modules/@types" + ], "lib": [ - "es2016" + "es2016", + "dom" ] } } diff --git a/codecov.yml b/codecov.yml index b4b5ae4..01f5dab 100644 --- a/codecov.yml +++ b/codecov.yml @@ -20,7 +20,7 @@ coverage: patch: default: enabled: yes - target: 80% + target: 50% parsers: gcov: branch_detection: diff --git a/server/config/settings.py b/server/config/settings.py index 65deff4..2890e33 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -1,13 +1,13 @@ """ Django settings for config project. -Generated by 'django-admin startproject' using Django 1.10.5. +Generated by 'django-admin startproject' using Django 1.11. For more information on this file, see -https://docs.djangoproject.com/en/1.10/topics/settings/ +https://docs.djangoproject.com/en/1.11/topics/settings/ For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.10/ref/settings/ +https://docs.djangoproject.com/en/1.11/ref/settings/ """ import os @@ -17,7 +17,7 @@ # Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/ +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '-#&29$6a5n)za$%q-9di^$lxu5bvo!so=0e$anel3o7^3oscz6' @@ -78,7 +78,7 @@ # Database -# https://docs.djangoproject.com/en/1.10/ref/settings/#databases +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', @@ -92,7 +92,7 @@ # Password validation -# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', @@ -110,7 +110,7 @@ # Internationalization -# https://docs.djangoproject.com/en/1.10/topics/i18n/ +# https://docs.djangoproject.com/en/1.11/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True @@ -119,7 +119,7 @@ # Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.10/howto/static-files/ +# https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' diff --git a/server/config/urls.py b/server/config/urls.py index 0264db0..a95ce86 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -1,7 +1,7 @@ """config URL Configuration The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/1.10/topics/http/urls/ + https://docs.djangoproject.com/en/1.11/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views diff --git a/server/config/wsgi.py b/server/config/wsgi.py index 5fa9332..96cbb97 100644 --- a/server/config/wsgi.py +++ b/server/config/wsgi.py @@ -4,7 +4,7 @@ It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see -https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/ +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ """ import os From dc1afba255e97d4deea1d2dab7f320c2b46cd5c4 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sun, 16 Jul 2017 09:30:24 +0300 Subject: [PATCH 12/35] Finish Docker Swarm (#54) * Add files * Change nginx to haproxy * Update dependencies * Update README file * Server is working * Fix test errors * Show data from server * Serve static files for server * Cleanup --- README.md | 46 +++++- client/Dockerfile | 33 ++-- client/nginx/mime.types | 79 ++++++++++ client/nginx/nginx.conf | 40 +++++ client/package.json | 10 +- .../components/users/users.component.spec.ts | 1 + client/src/app/services/user.service.ts | 3 +- client/src/environments/environment.prod.ts | 3 +- client/src/environments/environment.ts | 3 +- codecov.yml | 1 - docker-compose.yml | 148 ++++++++++++++++++ server/Dockerfile | 2 +- server/config/settings.py | 17 +- server/config/urls.py | 6 +- server/entrypoint.sh | 16 ++ server/requirements.txt | 4 +- 16 files changed, 366 insertions(+), 46 deletions(-) create mode 100644 client/nginx/mime.types create mode 100644 client/nginx/nginx.conf create mode 100644 docker-compose.yml create mode 100644 server/entrypoint.sh diff --git a/README.md b/README.md index 4a3bccd..a5cf1ad 100755 --- a/README.md +++ b/README.md @@ -4,25 +4,27 @@ The `server` directory contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The `client` directory contain an [Angular](https://angular.io/) simple app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and ready to `AOT` compilation. The simple Angular app show the users from the Django api. -The repo is a production ready app, that uses `nginx` to serve static files (the client app and static files from the server), and `gunicorn` for the server (python) stuff. All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [kubernetes](https://kubernetes.io/) to manage them. +The repo is a production ready app, that uses `nginx` to serve static files (the client app and static files from the server), and `gunicorn` for the server (python) stuff. All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [Docker Swarm](https://docs.docker.com/engine/swarm/) to manage them. + +We use [ELK Stack](https://www.elastic.co/products) for logging. The `server` and the `client` logs sent to logstash, and saved in elasticsearch. There is also a kibana instance to check and analyze all the logs. ## Pre Requirements 1. install [docker](https://www.docker.com/). -2. Don't know yet. ## Installation Automatic installation of the project with docker, for development. 1. In `client` directory run `docker build -t client .` to build the Docker image. -2. Run ```docker run -dit -v `pwd`:/usr/src -p 4200:4200 --name=client-con client``` to run a container from that image. -3. Open the browser at [http://localhost:4200](http://localhost:4200) to see your Angular (client) app. -4. In `server` directory run `docker build -t server .` to build the Docker image. -5. Run ```docker run -dit -v `pwd`:/usr/src -p 8000:8000 --name=server-con server``` to run a container from that image. +2. In `server` directory run `docker build -t server .` to build the Docker image. +3. To create a swarm `docker swarm init`. +4. Run `docker stack deploy --compose-file=docker-compose.yml prod` +5. Open the browser at [http://localhost](http://localhost) to see your Angular (client) app. 6. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. +7. Open the browser at [http://localhost:5601](http://localhost:5601) to see Kibana and check your logs. -If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file. +**If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file.** ## Our Stack @@ -36,7 +38,35 @@ If you want to install the project manually, go to the `/client` or `/server` di * [Angular Material](https://material.angular.io/) * [ngrx](https://github.com/ngrx) * [Django REST framework](http://www.django-rest-framework.org/) - * [kubernetes](https://kubernetes.io/) + * [django-admin-honeypot](http://django-admin-honeypot.readthedocs.io/en/latest/) + * [ELK Stack](https://www.elastic.co/products) + * [Docker Swarm](https://docs.docker.com/engine/swarm/) + +## Tests + +There is already tests for the `server` and the `client`, we currently at **+90** percent coverage. + +We also write some tests for doing load test with [locust](http://locust.io/), you can find it under `server/stress_tests/`. To do a load test just install locust and write + +``` +locust --host=http://localhost +``` + +Then open up Locust’s web interface [http://localhost:8089](http://localhost:8089). + +## Rolling Updates + +To update the any of the containers that are in a service with a new image just create a new image, for example + +``` +docker build -t server:v2 . +``` + +And then update the service with the new image + +``` +docker service update --image server:v2 prod_server +``` ## Contribute diff --git a/client/Dockerfile b/client/Dockerfile index 8710ff7..90b3fe6 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -1,24 +1,25 @@ -FROM node:latest +FROM node:8.1.2 MAINTAINER Nir Galon -RUN useradd --user-group --create-home --shell /bin/false app +# Install nginx +RUN apt-get update && apt-get install -y --no-install-recommends \ + nginx-light -ENV APP_NAME "client" -ENV APP_USER "app" -ENV HOME /home/$APP_USER -ENV APP_DIR $HOME/$APP_NAME +# nginx files +COPY ./nginx /etc/nginx -RUN npm install --global --silent angular-cli +# Create app directory +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app -WORKDIR $APP_DIR -COPY package.json $APP_DIR/package.json -RUN npm install --silent && npm cache clean -COPY . $APP_DIR -RUN chown -R $APP_USER:$APP_USER $HOME/* +# Install app dependencies +COPY package.json /usr/src/app/ +RUN npm install -USER $APP_USER -WORKDIR $APP_DIR +# Bundle app source +COPY . /usr/src/app +RUN npm run build -- --prod +RUN npm run sw EXPOSE 4200 - -CMD ["npm", "start"] +CMD ["nginx", "-g", "daemon off;"] diff --git a/client/nginx/mime.types b/client/nginx/mime.types new file mode 100644 index 0000000..5d132eb --- /dev/null +++ b/client/nginx/mime.types @@ -0,0 +1,79 @@ +types { + text/html html htm shtml; + text/css css; + text/xml xml; + image/gif gif; + image/jpeg jpeg jpg; + application/x-javascript js; + application/atom+xml atom; + application/rss+xml rss; + + text/mathml mml; + text/plain txt; + text/vnd.sun.j2me.app-descriptor jad; + text/vnd.wap.wml wml; + text/x-component htc; + + image/png png; + image/tiff tif tiff; + image/vnd.wap.wbmp wbmp; + image/x-icon ico; + image/x-jng jng; + image/x-ms-bmp bmp; + image/svg+xml svg svgz; + image/webp webp; + + application/java-archive jar war ear; + application/mac-binhex40 hqx; + application/msword doc; + application/pdf pdf; + application/postscript ps eps ai; + application/rtf rtf; + application/vnd.ms-excel xls; + application/vnd.ms-powerpoint ppt; + application/vnd.wap.wmlc wmlc; + application/vnd.google-earth.kml+xml kml; + application/vnd.google-earth.kmz kmz; + application/x-7z-compressed 7z; + application/x-cocoa cco; + application/x-java-archive-diff jardiff; + application/x-java-jnlp-file jnlp; + application/x-makeself run; + application/x-perl pl pm; + application/x-pilot prc pdb; + application/x-rar-compressed rar; + application/x-redhat-package-manager rpm; + application/x-sea sea; + application/x-shockwave-flash swf; + application/x-stuffit sit; + application/x-tcl tcl tk; + application/x-x509-ca-cert der pem crt; + application/x-xpinstall xpi; + application/xhtml+xml xhtml; + application/zip zip; + + application/octet-stream bin exe dll; + application/octet-stream deb; + application/octet-stream dmg; + application/octet-stream eot; + application/octet-stream iso img; + application/octet-stream msi msp msm; + + audio/midi mid midi kar; + audio/mpeg mp3; + audio/ogg ogg; + audio/x-m4a m4a; + audio/x-realaudio ra; + + video/3gpp 3gpp 3gp; + video/mp4 mp4; + video/mpeg mpeg mpg; + video/quicktime mov; + video/webm webm; + video/x-flv flv; + video/x-m4v m4v; + video/x-mng mng; + video/x-ms-asf asx asf; + video/x-ms-wmv wmv; + video/x-msvideo avi; +} diff --git a/client/nginx/nginx.conf b/client/nginx/nginx.conf new file mode 100644 index 0000000..b8f153e --- /dev/null +++ b/client/nginx/nginx.conf @@ -0,0 +1,40 @@ +# -*- mode: nginx; mode: flyspell-prog; ispell-local-dictionary: "american" -*- + +### Very basic Nginx configuration. +user www-data; +worker_processes auto; +error_log /var/log/nginx/error.log; + +events { + worker_connections 4096; + multi_accept on; +} + +http { + include mime.types; + default_type application/octet-stream; + + access_log /var/log/nginx/access.log; + + sendfile on; + tcp_nopush on; + + keepalive_timeout 10; + tcp_nodelay on; + gzip on; + gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; + + server { + listen 4200; + + access_log /var/log/nginx/angular_access.log; + error_log /var/log/nginx/angular_error.log; + root /usr/src/app/dist; + + location /favicon.ico { + alias static/favicon.ico; + } + + } + +} diff --git a/client/package.json b/client/package.json index 2903caf..587af09 100644 --- a/client/package.json +++ b/client/package.json @@ -13,26 +13,28 @@ }, "private": false, "dependencies": { - "@angular/animations": "^4.1.1", + "@angular/animations": "^4.2.5", "@angular/common": "^4.0.0", "@angular/compiler": "^4.0.0", "@angular/core": "^4.0.0", "@angular/forms": "^4.0.0", "@angular/http": "^4.0.0", - "@angular/material": "^2.0.0-beta.3", + "@angular/material": "^2.0.0-beta.8", "@angular/platform-browser": "^4.0.0", "@angular/platform-browser-dynamic": "^4.0.0", "@angular/router": "^4.0.0", "@ngrx/core": "^1.2.0", "@ngrx/effects": "^2.0.3", "@ngrx/store": "^2.2.2", + "@ngrx/store-devtools": "^3.2.4", "core-js": "^2.4.1", "hammerjs": "^2.0.8", - "reselect": "^3.0.0", - "rxjs": "^5.1.0", + "reselect": "^3.0.1", + "rxjs": "^5.4.2", "zone.js": "^0.8.4" }, "devDependencies": { + "@angular/cdk": "^2.0.0-beta.8", "@angular/cli": "1.0.2", "@angular/compiler-cli": "^4.0.0", "@ngrx/store-devtools": "^3.2.4", diff --git a/client/src/app/components/users/users.component.spec.ts b/client/src/app/components/users/users.component.spec.ts index f0f773d..8271221 100644 --- a/client/src/app/components/users/users.component.spec.ts +++ b/client/src/app/components/users/users.component.spec.ts @@ -7,6 +7,7 @@ import { Observable } from 'rxjs/Observable'; import { MaterialModule } from '@angular/material'; import { reducer } from '../../reducers'; import { StoreModule } from '@ngrx/store'; +import 'rxjs/add/observable/of'; import { UsersComponent } from './users.component'; diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts index 5b9cbd1..9d0f410 100644 --- a/client/src/app/services/user.service.ts +++ b/client/src/app/services/user.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { Http, Response } from '@angular/http'; import { Observable } from 'rxjs/Rx'; +import { environment } from '../../environments/environment'; import { User } from '../models/user'; @Injectable() @@ -12,7 +13,7 @@ export class UserService { ) { } getUsers(): Observable { - return this.http.get('/api/users') + return this.http.get(`${environment.server}/api/users`) .map(res => res.json()) .catch(this.handleError); } diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts index 3612073..176c834 100644 --- a/client/src/environments/environment.prod.ts +++ b/client/src/environments/environment.prod.ts @@ -1,3 +1,4 @@ export const environment = { - production: true + production: true, + server: 'http://localhost:8000' }; diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index b7f639a..e7e0f32 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts @@ -4,5 +4,6 @@ // The list of which env maps to which file can be found in `.angular-cli.json`. export const environment = { - production: false + production: false, + server: 'http://localhost:8000' }; diff --git a/codecov.yml b/codecov.yml index 01f5dab..7f5580b 100644 --- a/codecov.yml +++ b/codecov.yml @@ -31,7 +31,6 @@ parsers: javascript: enable_partials: false ignore: - - "client/src/app/util.ts" - "server/manage.py" - "server/config" - "server/**/apps.py" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b96e900 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,148 @@ +version: "3" + +services: + proxy: + image: dockercloud/haproxy + environment: + - BALANCE=leastconn + - EXTRA_GLOBAL_SETTINGS=debug + volumes: + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 80:80 + networks: + - example_cluster + deploy: + placement: + constraints: [node.role == manager] + + database: + image: postgres + environment: + - POSTGRES_USER=nirgalon + - POSTGRES_PASSWORD=Zaq1234 + - POSTGRES_DB=server + deploy: + replicas: 1 + restart_policy: + condition: on-failure + max_attempts: 3 + window: 60s + networks: + - example_cluster + + client: + image: client + ports: + - "4200:4200" + environment: + - SERVICE_PORTS=4200 + deploy: + replicas: 1 + update_config: + parallelism: 2 + delay: 10s + restart_policy: + condition: on-failure + max_attempts: 3 + window: 120s + networks: + - example_cluster + + server: + image: server + ports: + - "8000:8000" + environment: + - DB_HOST=database + - DB_NAME=server + - DB_USER=nirgalon + - DB_PASS=Zaq1234 + command: bash -c "/home/app/server/entrypoint.sh && gunicorn config.wsgi -b 0.0.0.0:8000" + deploy: + replicas: 2 + update_config: + parallelism: 2 + delay: 10s + restart_policy: + condition: on-failure + max_attempts: 3 + window: 120s + depends_on: + - database + networks: + - example_cluster + + # visualizer: + # image: dockersamples/visualizer:stable + # ports: + # - "8080:8080" + # volumes: + # - "/var/run/docker.sock:/var/run/docker.sock" + # deploy: + # placement: + # constraints: [node.role == manager] + # networks: + # - example_cluster + # + # elasticsearch: + # image: elasticsearch:5.4.3 + # command: elasticsearch + # environment: + # ES_JAVA_OPTS: -Xms1g -Xmx1g + # ports: + # - "9200:9200" + # - "9300:9300" + # ulimits: + # memlock: -1 + # nofile: + # hard: 65536 + # soft: 65536 + # nproc: 65538 + # volumes: + # - esdata:/usr/share/elasticsearch/data:rw + # networks: + # - example_cluster + # deploy: + # mode: replicated + # replicas: 1 + # healthcheck: + # test: curl -s http://localhost:9200/_cluster/health | egrep 'yellow|green' + # interval: 30s + # retries: 1 + # + # kibana: + # image: kibana:5.4.3 + # ports: + # - "5601:5601" + # environment: + # ELASTICSEARCH_URL: http://elasticsearch:9200 + # networks: + # - example_cluster + # deploy: + # mode: replicated + # replicas: 1 + # healthcheck: + # test: wget -qO- http://localhost:5601 > /dev/null + # interval: 30s + # retries: 1 + # + # logstash: + # image: logstash:5.4.3 + # command: sh -c "logstash -e 'input { tcp { port => 5959 codec => json } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ \"elasticsearch\" ] } }'" + # ports: + # - "5959:5959/tcp" + # - "12201:12201/udp" + # networks: + # - example_cluster + # deploy: + # mode: replicated + # replicas: 1 + +volumes: + esdata: + driver: local + +networks: + example_cluster: + driver: overlay diff --git a/server/Dockerfile b/server/Dockerfile index 371c239..36ef76e 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -17,5 +17,5 @@ RUN chown -R $APP_USER:$APP_USER $HOME/* USER $APP_USER WORKDIR $APP_DIR +RUN chmod +x /home/app/server/entrypoint.sh EXPOSE 8000 -CMD ["gunicorn", "config.wsgi", "-b", "0.0.0.0:8000"] diff --git a/server/config/settings.py b/server/config/settings.py index 2890e33..ce1d218 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -27,6 +27,10 @@ ALLOWED_HOSTS = [] +CORS_ORIGIN_WHITELIST = ( + 'localhost:4200', + 'localhost:8000' +) # Application definition INSTALLED_APPS = [ @@ -46,6 +50,7 @@ ] MIDDLEWARE = [ + 'corsheaders.middleware.CorsMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -53,7 +58,6 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'corsheaders.middleware.CorsMiddleware', ] ROOT_URLCONF = 'config.urls' @@ -82,10 +86,10 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'server', - 'USER': 'postgres', - 'PASSWORD': '', - 'HOST': 'localhost', + 'NAME': os.environ.get('DB_NAME', ''), + 'USER': os.environ.get('DB_USER', ''), + 'PASSWORD': os.environ.get('DB_PASS', ''), + 'HOST': os.environ.get('DB_HOST', ''), 'PORT': 5432, } } @@ -120,7 +124,8 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ -STATIC_URL = '/static/' +STATIC_URL = '/home/app/server/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') # Importing local settings if exists. diff --git a/server/config/urls.py b/server/config/urls.py index a95ce86..720b24b 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -22,8 +22,4 @@ url(r'^api/', include('api.urls')), url(r'^admin/', include('admin_honeypot.urls', namespace='admin_honeypot')), url(r'^secret-admin/', admin.site.urls), -] - -# Serve static uploaded files if in debug mode. -# if settings.DEBUG: -# urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) +] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/server/entrypoint.sh b/server/entrypoint.sh new file mode 100644 index 0000000..3323260 --- /dev/null +++ b/server/entrypoint.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +echo "[run] go to project folder" +cd /home/app/server + +echo "[run] Migrate DB" +python manage.py migrate + +echo "[run] Collect static files" +python manage.py collectstatic --noinput + +echo "[run] create superuser" +echo "from django.contrib.auth.models import User +if not User.objects.filter(username='admin').count(): + User.objects.create_superuser('admin', 'admin@example.com', 'pass') +" | python manage.py shell diff --git a/server/requirements.txt b/server/requirements.txt index c0fc23a..06e7303 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -1,6 +1,6 @@ # Install with: `pip install -r requirements.txt` -Django==1.11 +Django==1.11.3 psycopg2==2.7.1 django-extensions==1.7.9 gunicorn==19.7.1 @@ -9,7 +9,7 @@ gunicorn==19.7.1 django-admin-honeypot==1.0.0 # Rest Framework -djangorestframework==3.6.2 +djangorestframework==3.6.3 Markdown==2.6.8 django-filter==1.0.2 From c3e9e85cb8bcf40bce0cc85652b92f9266396590 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sun, 16 Jul 2017 15:30:05 +0300 Subject: [PATCH 13/35] Add logging to ELK stack (#57) * Add ELK stack * Cleanup * Fix tests * Add logstash settings * Fix logging settings * Save logs in ELK --- client/karma.conf.js | 11 +++- docker-compose.yml | 130 +++++++++++++++++++------------------- server/api/views.py | 8 +++ server/config/settings.py | 26 ++++++++ server/requirements.txt | 3 + 5 files changed, 110 insertions(+), 68 deletions(-) diff --git a/client/karma.conf.js b/client/karma.conf.js index 84b4cd5..f2f5cf8 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -15,9 +15,14 @@ module.exports = function (config) { client:{ clearContext: false // leave Jasmine Spec Runner output visible in browser }, - files: [ - { pattern: './src/test.ts', watched: false } - ], + files: [{ + pattern: './node_modules/@angular/material/prebuilt-themes/indigo-pink.css', + included: true, + watched: true + }, { + pattern: './src/test.ts', + watched: false + }], preprocessors: { './src/test.ts': ['@angular/cli'] }, diff --git a/docker-compose.yml b/docker-compose.yml index b96e900..6e791fa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -73,71 +73,71 @@ services: networks: - example_cluster - # visualizer: - # image: dockersamples/visualizer:stable - # ports: - # - "8080:8080" - # volumes: - # - "/var/run/docker.sock:/var/run/docker.sock" - # deploy: - # placement: - # constraints: [node.role == manager] - # networks: - # - example_cluster - # - # elasticsearch: - # image: elasticsearch:5.4.3 - # command: elasticsearch - # environment: - # ES_JAVA_OPTS: -Xms1g -Xmx1g - # ports: - # - "9200:9200" - # - "9300:9300" - # ulimits: - # memlock: -1 - # nofile: - # hard: 65536 - # soft: 65536 - # nproc: 65538 - # volumes: - # - esdata:/usr/share/elasticsearch/data:rw - # networks: - # - example_cluster - # deploy: - # mode: replicated - # replicas: 1 - # healthcheck: - # test: curl -s http://localhost:9200/_cluster/health | egrep 'yellow|green' - # interval: 30s - # retries: 1 - # - # kibana: - # image: kibana:5.4.3 - # ports: - # - "5601:5601" - # environment: - # ELASTICSEARCH_URL: http://elasticsearch:9200 - # networks: - # - example_cluster - # deploy: - # mode: replicated - # replicas: 1 - # healthcheck: - # test: wget -qO- http://localhost:5601 > /dev/null - # interval: 30s - # retries: 1 - # - # logstash: - # image: logstash:5.4.3 - # command: sh -c "logstash -e 'input { tcp { port => 5959 codec => json } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ \"elasticsearch\" ] } }'" - # ports: - # - "5959:5959/tcp" - # - "12201:12201/udp" - # networks: - # - example_cluster - # deploy: - # mode: replicated - # replicas: 1 + visualizer: + image: dockersamples/visualizer:stable + ports: + - "8080:8080" + volumes: + - "/var/run/docker.sock:/var/run/docker.sock" + deploy: + placement: + constraints: [node.role == manager] + networks: + - example_cluster + + elasticsearch: + image: elasticsearch:5.4.3 + command: elasticsearch + environment: + ES_JAVA_OPTS: -Xms1g -Xmx1g + ports: + - "9200:9200" + - "9300:9300" + ulimits: + memlock: -1 + nofile: + hard: 65536 + soft: 65536 + nproc: 65538 + volumes: + - esdata:/usr/share/elasticsearch/data:rw + networks: + - example_cluster + deploy: + mode: replicated + replicas: 1 + healthcheck: + test: curl -s http://localhost:9200/_cluster/health | egrep 'yellow|green' + interval: 30s + retries: 1 + + kibana: + image: kibana:5.4.3 + ports: + - "5601:5601" + environment: + ELASTICSEARCH_URL: http://elasticsearch:9200 + networks: + - example_cluster + deploy: + mode: replicated + replicas: 1 + healthcheck: + test: wget -qO- http://localhost:5601 > /dev/null + interval: 30s + retries: 1 + + logstash: + image: logstash:5.4.3 + command: sh -c "logstash -e 'input { tcp { port => 5959 codec => json } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ \"elasticsearch\" ] } }'" + ports: + - "5959:5959/tcp" + - "12201:12201/udp" + networks: + - example_cluster + deploy: + mode: replicated + replicas: 1 volumes: esdata: diff --git a/server/api/views.py b/server/api/views.py index 61cb124..2b5eb5a 100644 --- a/server/api/views.py +++ b/server/api/views.py @@ -1,11 +1,19 @@ +import logging +import logstash + from rest_framework import viewsets from django.contrib.auth.models import User from api.serializers import UserSerializer +logstash_logger = logging.getLogger('python-logstash-logger') +logstash_logger.setLevel(logging.INFO) +logstash_logger.addHandler(logstash.TCPLogstashHandler('logstash', 5959, version=1)) + class UserViewSet(viewsets.ReadOnlyModelViewSet): """ API endpoint that allows users to be viewed or edited. """ + logstash_logger.info('logstash-server: test logstash info message.') queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer diff --git a/server/config/settings.py b/server/config/settings.py index ce1d218..4f53c41 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -112,6 +112,32 @@ }, ] +# Logging +# https://github.com/vklochan/python-logstash +LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'handlers': { + 'logstash': { + 'level': 'DEBUG', + 'class': 'logstash.LogstashHandler', + 'host': 'localhost', + 'port': 5959, + 'version': 1, + 'message_type': 'logstash', + 'fqdn': False, + 'tags': ['tag1', 'tag2'], + }, + }, + 'loggers': { + 'django.request': { + 'handlers': ['logstash'], + 'level': 'DEBUG', + 'propagate': True, + }, + }, +} + # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ diff --git a/server/requirements.txt b/server/requirements.txt index 06e7303..7bde05c 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -15,3 +15,6 @@ django-filter==1.0.2 # CORS django-cors-headers==2.0.2 + +# Logging +python-logstash==0.4.6 From c196f5edf6d80baa5af53adb7aa3d7eccd519fc8 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sun, 16 Jul 2017 16:05:05 +0300 Subject: [PATCH 14/35] Fix a typo in README file (#62) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5cf1ad..6464711 100755 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Then open up Locust’s web interface [http://localhost:8089](http://localhost:8 ## Rolling Updates -To update the any of the containers that are in a service with a new image just create a new image, for example +To update any of the containers that are in a service with a new image just create a new image, for example ``` docker build -t server:v2 . From e8d2f95296a86663b48a5b2f7043221741140dd8 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sun, 16 Jul 2017 16:31:11 +0300 Subject: [PATCH 15/35] Update dependencies (#63) * Update node.js version on travis-ci * Update client * Fix lint warnings * Update server --- .travis.yml | 3 +-- client/.angular-cli.json | 2 +- client/e2e/app.po.ts | 2 +- client/e2e/tsconfig.e2e.json | 4 +++- client/karma.conf.js | 14 +++-------- client/package.json | 37 ++++++++++++++-------------- client/protractor.conf.js | 4 +--- client/src/index.html | 2 +- client/src/polyfills.ts | 14 +++++++---- client/src/test.ts | 4 ++-- client/src/tsconfig.app.json | 2 +- client/src/tsconfig.spec.json | 2 +- client/tsconfig.json | 1 - client/tslint.json | 45 ++++++++++++++++++++++++++++------- server/requirements.txt | 4 ++-- 15 files changed, 81 insertions(+), 59 deletions(-) diff --git a/.travis.yml b/.travis.yml index 527e741..9bbe634 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,8 +10,7 @@ addons: language: node_js node_js: - - "6" - - "7" + - "8" services: - postgresql diff --git a/client/.angular-cli.json b/client/.angular-cli.json index 8373969..94ab521 100644 --- a/client/.angular-cli.json +++ b/client/.angular-cli.json @@ -51,7 +51,7 @@ } }, "defaults": { - "styleExt": "css", + "styleExt": "scss", "component": {} } } diff --git a/client/e2e/app.po.ts b/client/e2e/app.po.ts index 3d4c82a..f8950ce 100644 --- a/client/e2e/app.po.ts +++ b/client/e2e/app.po.ts @@ -1,4 +1,4 @@ -import { browser, element, by } from 'protractor'; +import { browser, by, element } from 'protractor'; export class ClientPage { navigateTo() { diff --git a/client/e2e/tsconfig.e2e.json b/client/e2e/tsconfig.e2e.json index ac7a373..1d9e5ed 100644 --- a/client/e2e/tsconfig.e2e.json +++ b/client/e2e/tsconfig.e2e.json @@ -2,10 +2,12 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/e2e", + "baseUrl": "./", "module": "commonjs", "target": "es5", - "types":[ + "types": [ "jasmine", + "jasminewd2", "node" ] } diff --git a/client/karma.conf.js b/client/karma.conf.js index f2f5cf8..1e161fd 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -12,9 +12,6 @@ module.exports = function (config) { require('karma-coverage-istanbul-reporter'), require('@angular/cli/plugins/karma') ], - client:{ - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, files: [{ pattern: './node_modules/@angular/material/prebuilt-themes/indigo-pink.css', included: true, @@ -23,11 +20,8 @@ module.exports = function (config) { pattern: './src/test.ts', watched: false }], - preprocessors: { - './src/test.ts': ['@angular/cli'] - }, - mime: { - 'text/x-typescript': ['ts','tsx'] + client:{ + clearContext: false // leave Jasmine Spec Runner output visible in browser }, coverageIstanbulReporter: { reports: [ 'html', 'lcovonly' ], @@ -36,9 +30,7 @@ module.exports = function (config) { angularCli: { environment: 'dev' }, - reporters: config.angularCli && config.angularCli.codeCoverage - ? ['progress', 'coverage-istanbul'] - : ['progress', 'kjhtml'], + reporters: ['progress', 'kjhtml'], port: 9876, colors: true, logLevel: config.LOG_INFO, diff --git a/client/package.json b/client/package.json index 587af09..a391223 100644 --- a/client/package.json +++ b/client/package.json @@ -13,7 +13,7 @@ }, "private": false, "dependencies": { - "@angular/animations": "^4.2.5", + "@angular/animations": "^4.3.0", "@angular/common": "^4.0.0", "@angular/compiler": "^4.0.0", "@angular/core": "^4.0.0", @@ -24,37 +24,38 @@ "@angular/platform-browser-dynamic": "^4.0.0", "@angular/router": "^4.0.0", "@ngrx/core": "^1.2.0", - "@ngrx/effects": "^2.0.3", - "@ngrx/store": "^2.2.2", - "@ngrx/store-devtools": "^3.2.4", + "@ngrx/effects": "^2.0.4", + "@ngrx/store": "^2.2.3", "core-js": "^2.4.1", "hammerjs": "^2.0.8", "reselect": "^3.0.1", - "rxjs": "^5.4.2", + "rxjs": "^5.1.0", "zone.js": "^0.8.4" }, "devDependencies": { "@angular/cdk": "^2.0.0-beta.8", - "@angular/cli": "1.0.2", + "@angular/cli": "1.2.1", "@angular/compiler-cli": "^4.0.0", + "@angular/language-service": "^4.0.0", "@ngrx/store-devtools": "^3.2.4", "@types/hammerjs": "^2.0.34", - "@types/jasmine": "2.5.38", + "@types/jasmine": "~2.5.53", + "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", - "codelyzer": "~2.0.0", - "jasmine-core": "~2.5.2", - "jasmine-spec-reporter": "~3.2.0", - "karma": "~1.4.1", - "karma-chrome-launcher": "~2.0.0", + "codelyzer": "~3.0.1", + "jasmine-core": "~2.6.2", + "jasmine-spec-reporter": "~4.1.0", + "karma": "~1.7.0", + "karma-chrome-launcher": "~2.1.1", "karma-cli": "~1.0.1", - "karma-coverage-istanbul-reporter": "^0.2.0", + "karma-coverage-istanbul-reporter": "^1.2.1", "karma-jasmine": "~1.1.0", "karma-jasmine-html-reporter": "^0.2.2", "ngrx-store-freeze": "^0.1.9", - "protractor": "~5.1.0", - "sw-precache": "^5.1.1", - "ts-node": "~2.0.0", - "tslint": "~4.5.0", - "typescript": "~2.2.0" + "protractor": "~5.1.2", + "sw-precache": "^5.2.0", + "ts-node": "~3.0.4", + "tslint": "~5.3.2", + "typescript": "~2.3.3" } } diff --git a/client/protractor.conf.js b/client/protractor.conf.js index 1c5e1e5..7ee3b5e 100644 --- a/client/protractor.conf.js +++ b/client/protractor.conf.js @@ -19,12 +19,10 @@ exports.config = { defaultTimeoutInterval: 30000, print: function() {} }, - beforeLaunch: function() { + onPrepare() { require('ts-node').register({ project: 'e2e/tsconfig.e2e.json' }); - }, - onPrepare() { jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } }; diff --git a/client/src/index.html b/client/src/index.html index 2db8d99..0b914e0 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -1,5 +1,5 @@ - + Client diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index 53bdaf1..7831e97 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts @@ -31,21 +31,21 @@ // import 'core-js/es6/array'; // import 'core-js/es6/regexp'; // import 'core-js/es6/map'; +// import 'core-js/es6/weak-map'; // import 'core-js/es6/set'; /** IE10 and IE11 requires the following for NgClass support on SVG elements */ // import 'classlist.js'; // Run `npm install --save classlist.js`. -/** IE10 and IE11 requires the following to support `@angular/animation`. */ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. - - /** Evergreen browsers require these. **/ import 'core-js/es6/reflect'; import 'core-js/es7/reflect'; -/** ALL Firefox browsers require the following to support `@angular/animation`. **/ +/** + * Required to support Web Animations `@angular/animation`. + * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + **/ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. @@ -66,3 +66,7 @@ import 'zone.js/dist/zone'; // Included with Angular CLI. * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 */ // import 'intl'; // Run `npm install --save intl`. +/** + * Need to import at least one locale-data with intl. + */ +// import 'intl/locale-data/jsonp/en'; diff --git a/client/src/test.ts b/client/src/test.ts index 9bf7226..cd612ee 100644 --- a/client/src/test.ts +++ b/client/src/test.ts @@ -13,8 +13,8 @@ import { } from '@angular/platform-browser-dynamic/testing'; // Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. -declare var __karma__: any; -declare var require: any; +declare const __karma__: any; +declare const require: any; // Prevent Karma from running prematurely. __karma__.loaded = function () {}; diff --git a/client/src/tsconfig.app.json b/client/src/tsconfig.app.json index 92fa007..94e4d39 100644 --- a/client/src/tsconfig.app.json +++ b/client/src/tsconfig.app.json @@ -2,8 +2,8 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/app", + "baseUrl": "./", "module": "es2015", - "baseUrl": "", "types": [ "hammerjs" ] diff --git a/client/src/tsconfig.spec.json b/client/src/tsconfig.spec.json index 510e3f1..63d89ff 100644 --- a/client/src/tsconfig.spec.json +++ b/client/src/tsconfig.spec.json @@ -2,9 +2,9 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/spec", + "baseUrl": "./", "module": "commonjs", "target": "es5", - "baseUrl": "", "types": [ "jasmine", "node" diff --git a/client/tsconfig.json b/client/tsconfig.json index a35a8ee..1f9b558 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -2,7 +2,6 @@ "compileOnSave": false, "compilerOptions": { "outDir": "./dist/out-tsc", - "baseUrl": "src", "sourceMap": true, "declaration": false, "moduleResolution": "node", diff --git a/client/tslint.json b/client/tslint.json index 4124d9a..fc55c97 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -3,6 +3,7 @@ "node_modules/codelyzer" ], "rules": { + "arrow-return-shorthand": true, "callable-types": true, "class-name": true, "comment-format": [ @@ -12,7 +13,10 @@ "curly": true, "eofline": true, "forin": true, - "import-blacklist": [true, "rxjs"], + "import-blacklist": [ + true, + "rxjs" + ], "import-spacing": true, "indent": [ true, @@ -27,7 +31,14 @@ "member-access": false, "member-ordering": [ true, - "static-before-instance" + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } ], "no-arg": true, "no-bitwise": true, @@ -41,18 +52,24 @@ ], "no-construct": true, "no-debugger": true, - "no-duplicate-variable": true, + "no-duplicate-super": true, "no-empty": false, "no-empty-interface": true, "no-eval": true, - "no-inferrable-types": [true, "ignore-params"], + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-misused-new": true, + "no-non-null-assertion": true, "no-shadowed-variable": true, "no-string-literal": false, "no-string-throw": true, - "no-switch-case-fall-through": false, + "no-switch-case-fall-through": true, "no-trailing-whitespace": true, + "no-unnecessary-initializer": true, "no-unused-expression": true, - "no-use-before-declare": true, + "no-use-before-declare": false, "no-var-keyword": true, "object-literal-sort-keys": false, "one-line": [ @@ -69,6 +86,7 @@ ], "radix": true, "semicolon": [ + true, "always" ], "triple-equals": [ @@ -96,9 +114,18 @@ "check-separator", "check-type" ], - - "directive-selector": [true, "attribute", "app", "camelCase"], - "component-selector": [true, "element", "app", "kebab-case"], + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], "use-input-property-decorator": true, "use-output-property-decorator": true, "use-host-property-decorator": true, diff --git a/server/requirements.txt b/server/requirements.txt index 7bde05c..8b9074f 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -2,7 +2,7 @@ Django==1.11.3 psycopg2==2.7.1 -django-extensions==1.7.9 +django-extensions==1.8.1 gunicorn==19.7.1 # Security @@ -14,7 +14,7 @@ Markdown==2.6.8 django-filter==1.0.2 # CORS -django-cors-headers==2.0.2 +django-cors-headers==2.1.0 # Logging python-logstash==0.4.6 From 47719a66913684f1cfb92aa1d234f7b743381c31 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Mon, 17 Jul 2017 01:17:41 +0300 Subject: [PATCH 16/35] Add stress-test with locustio (#64) * Add load tests * Fix lint errors * Add load tests file to codecov ignore --- README.md | 2 +- codecov.yml | 1 + docker-compose.yml | 2 ++ server/config/local_settings.template | 13 ------------- server/config/settings.py | 7 +++---- server/locustfile.py | 20 ++++++++++++++++++++ server/requirements.txt | 6 ++++++ 7 files changed, 33 insertions(+), 18 deletions(-) create mode 100644 server/locustfile.py diff --git a/README.md b/README.md index 6464711..f3335ab 100755 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Automatic installation of the project with docker, for development. There is already tests for the `server` and the `client`, we currently at **+90** percent coverage. -We also write some tests for doing load test with [locust](http://locust.io/), you can find it under `server/stress_tests/`. To do a load test just install locust and write +We also write some tests for doing load test with [locust](http://locust.io/), you can find it under `server/locustfile.py`. To do a load test just install locust (it's in the `requirements.txt` file) go to `server` directory and ``` locust --host=http://localhost diff --git a/codecov.yml b/codecov.yml index 7f5580b..0360543 100644 --- a/codecov.yml +++ b/codecov.yml @@ -33,4 +33,5 @@ parsers: ignore: - "server/manage.py" - "server/config" + - "server/locustfile" - "server/**/apps.py" diff --git a/docker-compose.yml b/docker-compose.yml index 6e791fa..9ae14d0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -54,10 +54,12 @@ services: ports: - "8000:8000" environment: + - DEBUG=False - DB_HOST=database - DB_NAME=server - DB_USER=nirgalon - DB_PASS=Zaq1234 + - SECRET_KEY=-#&29$$6a5n)za$$%q-9di^$$lxu5bvo!so=0e$$anel3o7^3oscz6 command: bash -c "/home/app/server/entrypoint.sh && gunicorn config.wsgi -b 0.0.0.0:8000" deploy: replicas: 2 diff --git a/server/config/local_settings.template b/server/config/local_settings.template index 42c3ede..8e5d1f7 100644 --- a/server/config/local_settings.template +++ b/server/config/local_settings.template @@ -1,19 +1,6 @@ -import os -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - # Enable debug trace. DEBUG = True -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = '{{secret_key}}' - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.10/howto/static-files/ -STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') -MEDIA_URL = '/staticuploads/' -MEDIA_ROOT = os.path.join(BASE_DIR, 'staticuploads') - DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', diff --git a/server/config/settings.py b/server/config/settings.py index 4f53c41..5fde2fc 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -20,10 +20,10 @@ # See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = '-#&29$6a5n)za$%q-9di^$lxu5bvo!so=0e$anel3o7^3oscz6' +SECRET_KEY = os.environ.get('SECRET_KEY', True) # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = os.environ.get('DEBUG', False) ALLOWED_HOSTS = [] @@ -35,14 +35,13 @@ # Application definition INSTALLED_APPS = [ 'api', - + 'flat_responsive', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', - 'admin_honeypot', 'django_extensions', 'rest_framework', diff --git a/server/locustfile.py b/server/locustfile.py new file mode 100644 index 0000000..8c8add6 --- /dev/null +++ b/server/locustfile.py @@ -0,0 +1,20 @@ +from locust import HttpLocust, TaskSet, task + + +class UserBehavior(TaskSet): + # def on_start(self): + # """ on_start is called when a Locust start before any task is scheduled """ + # self.login() + + # def login(self): + # self.client.post("/login", {"username":"ellen_key", "password":"education"}) + + @task(1) + def users(self): + self.client.get('/api/users') + + +class WebsiteUser(HttpLocust): + task_set = UserBehavior + min_wait = 5000 + max_wait = 9000 diff --git a/server/requirements.txt b/server/requirements.txt index 8b9074f..146cde1 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -5,6 +5,9 @@ psycopg2==2.7.1 django-extensions==1.8.1 gunicorn==19.7.1 +# Admin +django-flat-responsive==1.4.1 + # Security django-admin-honeypot==1.0.0 @@ -18,3 +21,6 @@ django-cors-headers==2.1.0 # Logging python-logstash==0.4.6 + +# Testing +locustio==0.8a2 From 32809c0f2fc97a213c62a3beab1f972c24ae3acf Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Mon, 17 Jul 2017 08:54:54 +0300 Subject: [PATCH 17/35] Add an Django Admin section (#67) --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index f3335ab..61340dd 100755 --- a/README.md +++ b/README.md @@ -42,6 +42,12 @@ Automatic installation of the project with docker, for development. * [ELK Stack](https://www.elastic.co/products) * [Docker Swarm](https://docs.docker.com/engine/swarm/) +## Django Admin + + * When install the project with docker, there is an `entrypoint.sh` script that runs in the `server` container. It'll migrate the database and create a new super user with a username `admin` and a password `pass`. + * We use [django-admin-honeypot](https://github.com/dmpayton/django-admin-honeypot) to fake the default Django admin login screen to log and notify admins of attempted unauthorized access. So the real Django admin login screen will be under `/secret-admin`. + * We also use [django-flat-responsive](https://github.com/elky/django-flat-responsive) to make the Django admin screens responsive to mobile. + ## Tests There is already tests for the `server` and the `client`, we currently at **+90** percent coverage. From fd4529bc5c6c4ab7631ab3b0de2075db2125f542 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sun, 23 Jul 2017 00:55:58 +0300 Subject: [PATCH 18/35] Add permissions to API (#68) * Add auth to server and fix user.service to accommodate it * Fix tests * Fix test --- client/src/app/services/user.service.ts | 12 ++++++++++-- server/api/tests.py | 8 +++++++- server/config/settings.py | 9 ++++++++- server/locustfile.py | 10 ++-------- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts index 9d0f410..a1f617a 100644 --- a/client/src/app/services/user.service.ts +++ b/client/src/app/services/user.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Http, Response } from '@angular/http'; +import { Http, Response, Headers, RequestOptions } from '@angular/http'; import { Observable } from 'rxjs/Rx'; import { environment } from '../../environments/environment'; @@ -12,8 +12,16 @@ export class UserService { private http: Http, ) { } + private appendToken(): RequestOptions { + const headers = new Headers(); + headers.append('Authorization', `Basic ${btoa('admin:pass')}`); + return new RequestOptions({ headers: headers }); + } + getUsers(): Observable { - return this.http.get(`${environment.server}/api/users`) + const options = this.appendToken(); + + return this.http.get(`${environment.server}/api/users`, options) .map(res => res.json()) .catch(this.handleError); } diff --git a/server/api/tests.py b/server/api/tests.py index 6ab104d..a1a1c48 100644 --- a/server/api/tests.py +++ b/server/api/tests.py @@ -1,6 +1,7 @@ from rest_framework import status from rest_framework.test import APITestCase from django.contrib.auth.models import User +from requests.auth import HTTPBasicAuth class UsersApiTestCase(APITestCase): @@ -8,9 +9,14 @@ def setUp(self): User.objects.create_superuser('admin', 'admin@example.com', 'admin12345') def test_get_users_objects(self): + self.client.login(username='admin', password='admin12345') response = self.client.get('/api/users/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(len(response.data), 1) self.assertEqual(response.data[0]['email'], 'admin@example.com') self.assertEqual(response.data[0]['username'], 'admin') - self.assertEqual(response.data[0]['url'], 'http://testserver/api/users/1/') + self.assertEqual(response.data[0]['url'], 'http://testserver/api/users/2/') + + def test_forbidden_get_users_objects(self): + response = self.client.get('/api/users/', format='json') + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) diff --git a/server/config/settings.py b/server/config/settings.py index 5fde2fc..30f9442 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -25,7 +25,7 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = os.environ.get('DEBUG', False) -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['localhost'] CORS_ORIGIN_WHITELIST = ( 'localhost:4200', @@ -137,6 +137,13 @@ }, } +# REST API +REST_FRAMEWORK = { + 'DEFAULT_PERMISSION_CLASSES': ( + 'rest_framework.permissions.IsAuthenticated', + ) +} + # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ diff --git a/server/locustfile.py b/server/locustfile.py index 8c8add6..84986d5 100644 --- a/server/locustfile.py +++ b/server/locustfile.py @@ -2,16 +2,10 @@ class UserBehavior(TaskSet): - # def on_start(self): - # """ on_start is called when a Locust start before any task is scheduled """ - # self.login() - - # def login(self): - # self.client.post("/login", {"username":"ellen_key", "password":"education"}) - @task(1) def users(self): - self.client.get('/api/users') + self.client.login(username='admin', password='pass') + self.client.get('/api/users', serlf.headers) class WebsiteUser(HttpLocust): From 8afd134dab375f8ad793bcb593d5f8d5b0629fb1 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 29 Jul 2017 18:50:22 +0300 Subject: [PATCH 19/35] Backup PostgreSQL automatically (#69) * Lower postgres restart policy * Add a backup script to postgres db to run in cron.daily * Add an option to login to api view * Fix server test * Add Database Backups section to README * Edit README file * Edit README file take 2 * Try different indentation * Fix tests take 1 * Fix tests teke 2 --- .travis.yml | 2 +- README.md | 62 ++++- client/.angular-cli.json | 9 +- client/Dockerfile | 2 +- client/package.json | 8 +- client/src/app/app.module.ts | 2 - database/autopgsqlbackup | 473 +++++++++++++++++++++++++++++++++++ docker-compose.yml | 5 +- server/api/tests.py | 8 +- server/config/settings.py | 3 +- server/config/urls.py | 1 + 11 files changed, 549 insertions(+), 26 deletions(-) create mode 100755 database/autopgsqlbackup diff --git a/.travis.yml b/.travis.yml index 9bbe634..86c6bd6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ script: # Client - cd ../client && npm run lint - npm run test - - ng build --prod --aot + - npm run build -- --prod - cd dist && ws --port 4200& - npm run e2e diff --git a/README.md b/README.md index 61340dd..f281e85 100755 --- a/README.md +++ b/README.md @@ -1,12 +1,20 @@ -# An opinionated Angular - Django RESTful cluster +# An Angular - Django Project Seed [![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] -The `server` directory contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The `client` directory contain an [Angular](https://angular.io/) simple app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and ready to `AOT` compilation. The simple Angular app show the users from the Django api. +This repo is a production ready seed project. The app shows a list of users. -The repo is a production ready app, that uses `nginx` to serve static files (the client app and static files from the server), and `gunicorn` for the server (python) stuff. All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [Docker Swarm](https://docs.docker.com/engine/swarm/) to manage them. +## Structure -We use [ELK Stack](https://www.elastic.co/products) for logging. The `server` and the `client` logs sent to logstash, and saved in elasticsearch. There is also a kibana instance to check and analyze all the logs. +* The `client` service is a build of the `client` directory. It contain an [Angular](https://angular.io/) app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and `AOT` compiled. The app shows the users from the Django api. +* The `server` service is a build of the `server` directory. It contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The Python serve through a [gunicorn](http://gunicorn.org/) server installed in the container. +* There is a `postgres` service for the Django database. The `database` directory contains the automatic backup script. +* There is an `nginx` service to serve static files (the client app). +* There is an `haproxy` service to get all the HTTP requests and do load balancing between the containers in the services. +* There are a separate containers for the [ELK Stack](https://www.elastic.co/products) for logging. The `server` and the `client` logs sent to logstash, and saved in elasticsearch. There is also a kibana instance to check and analyze all the logs. +* There is a `visualizer` container to visualize where is each container is located at (on which server). + +All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [Docker Swarm](https://docs.docker.com/engine/swarm/) to manage them. ## Pre Requirements @@ -19,10 +27,18 @@ Automatic installation of the project with docker, for development. 1. In `client` directory run `docker build -t client .` to build the Docker image. 2. In `server` directory run `docker build -t server .` to build the Docker image. 3. To create a swarm `docker swarm init`. -4. Run `docker stack deploy --compose-file=docker-compose.yml prod` -5. Open the browser at [http://localhost](http://localhost) to see your Angular (client) app. -6. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. -7. Open the browser at [http://localhost:5601](http://localhost:5601) to see Kibana and check your logs. +4. Download all docker images: + * `docker pull dockercloud/haproxy` + * `docker pull postgres` + * `docker pull dockersamples/visualizer:stable` + * `docker pull elasticsearch:5.4.3` + * `docker pull kibana:5.4.3` + * `docker pull logstash:5.4.3` +5. Run `docker stack deploy --compose-file=docker-compose.yml prod` +6. Open the browser at [http://localhost](http://localhost) to see your Angular (client) app. +7. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. +8. Open the browser at [http://localhost:8080](http://localhost:8080) to see the visualizer. +9. Open the browser at [http://localhost:5601](http://localhost:5601) to see Kibana and check your logs. **If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file.** @@ -52,7 +68,25 @@ Automatic installation of the project with docker, for development. There is already tests for the `server` and the `client`, we currently at **+90** percent coverage. -We also write some tests for doing load test with [locust](http://locust.io/), you can find it under `server/locustfile.py`. To do a load test just install locust (it's in the `requirements.txt` file) go to `server` directory and +To run the `client` tests and lint run the commands below in the `client` directory. + +``` +npm run lint +npm run test +``` + +To run the `server` tests and lint run the commands below in the `server` directory. + +``` +pycodestyle --show-source --max-line-length=120 --show-pep8 .; +python manage.py test +``` + +## Load Tests + +We also write some tests for doing load test with [locust](http://locust.io/), you can find it under `server/locustfile.py`. + +To do a load test just install locust (it's in the `requirements.txt` file) go to `server` directory and run ``` locust --host=http://localhost @@ -74,6 +108,16 @@ And then update the service with the new image docker service update --image server:v2 prod_server ``` +## Database Backups + +Each day a backup of the PostgreSQL database will be created. The daily backups are rotated weekly, so maximum 7 backup files will be at the daily directory at once. + +Each Saturday morning a weekly backup will be created at the weekly directory. The weekly backups are rotated on a 5 week cycle. + +Each month at the 1st of the month a monthly backup will be created at the monthly directory. Monthly backups are **NOT** rotated + +The backups are saved at `/var/backups/postgres` at the host machine via a shared volume. It can be configured in the `docker-compose.yml` at `volumes` section of the `database` service. + ## Contribute Just fork and do a pull request (; diff --git a/client/.angular-cli.json b/client/.angular-cli.json index 94ab521..1d240cc 100644 --- a/client/.angular-cli.json +++ b/client/.angular-cli.json @@ -36,13 +36,16 @@ }, "lint": [ { - "project": "src/tsconfig.app.json" + "project": "src/tsconfig.app.json", + "exclude": "**/node_modules/**" }, { - "project": "src/tsconfig.spec.json" + "project": "src/tsconfig.spec.json", + "exclude": "**/node_modules/**" }, { - "project": "e2e/tsconfig.e2e.json" + "project": "e2e/tsconfig.e2e.json", + "exclude": "**/node_modules/**" } ], "test": { diff --git a/client/Dockerfile b/client/Dockerfile index 90b3fe6..4ff59a3 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -1,4 +1,4 @@ -FROM node:8.1.2 +FROM node:8.2.1 MAINTAINER Nir Galon # Install nginx diff --git a/client/package.json b/client/package.json index a391223..3430573 100644 --- a/client/package.json +++ b/client/package.json @@ -13,7 +13,7 @@ }, "private": false, "dependencies": { - "@angular/animations": "^4.3.0", + "@angular/animations": "^4.0.0", "@angular/common": "^4.0.0", "@angular/compiler": "^4.0.0", "@angular/core": "^4.0.0", @@ -29,12 +29,12 @@ "core-js": "^2.4.1", "hammerjs": "^2.0.8", "reselect": "^3.0.1", - "rxjs": "^5.1.0", - "zone.js": "^0.8.4" + "rxjs": "^5.4.1", + "zone.js": "^0.8.14" }, "devDependencies": { "@angular/cdk": "^2.0.0-beta.8", - "@angular/cli": "1.2.1", + "@angular/cli": "1.2.6", "@angular/compiler-cli": "^4.0.0", "@angular/language-service": "^4.0.0", "@ngrx/store-devtools": "^3.2.4", diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index b5511db..6a26bd4 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -2,7 +2,6 @@ import 'hammerjs'; import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; -import { FormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; @@ -27,7 +26,6 @@ import { UserService } from './services/user.service'; ], imports: [ BrowserModule, - FormsModule, HttpModule, AppRoutingModule, MaterialModule, diff --git a/database/autopgsqlbackup b/database/autopgsqlbackup new file mode 100755 index 0000000..b4522dc --- /dev/null +++ b/database/autopgsqlbackup @@ -0,0 +1,473 @@ +#!/bin/bash +# +#===================================================================== +# Set the following variables to your system needs +# (Detailed instructions below variables) +#===================================================================== + +# Username to access the PostgreSQL server e.g. dbuser +USERNAME=$POSTGRES_USER + +# Password +# create a file $HOME/.pgpass containing a line like this +# hostname:*:*:dbuser:dbpass +# replace hostname with the value of DBHOST and postgres with +# the value of USERNAME + +# Host name (or IP address) of PostgreSQL server e.g localhost +DBHOST=localhost + +# List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3" +DBNAMES="$POSTGRES_DB" + +# Backup directory location e.g /backups +BACKUPDIR="/var/backups/postgres" + +# Mail setup +# What would you like to be mailed to you? +# - log : send only log file +# - files : send log file and sql files as attachments (see docs) +# - stdout : will simply output the log to the screen if run manually. +MAILCONTENT="log" + +# Set the maximum allowed email size in k. (4000 = approx 5MB email [see docs]) +MAXATTSIZE="4000" + +# Email Address to send mail to? (user@domain.com) +MAILADDR="root@localhost" + + +# ============================================================ +# === ADVANCED OPTIONS ( Read the doc's below for details )=== +#============================================================= + +# List of DBBNAMES for Monthly Backups. +MDBNAMES="template1 $DBNAMES" + +# List of DBNAMES to EXLUCDE if DBNAMES are set to all (must be in " quotes) +DBEXCLUDE="" + +# Include CREATE DATABASE in backup? +CREATE_DATABASE=yes + +# Separate backup directory and file for each DB? (yes or no) +SEPDIR=yes + +# Which day do you want weekly backups? (1 to 7 where 1 is Monday) +DOWEEKLY=6 + +# Choose Compression type. (gzip or bzip2) +COMP=bzip2 + +# Command to run before backups (uncomment to use) +#PREBACKUP="/etc/pgsql-backup-pre" + +# Command run after backups (uncomment to use) +#POSTBACKUP="bash /home/backups/scripts/ftp_pgsql" + +#===================================================================== +# Options documentation +#===================================================================== +# Set USERNAME and PASSWORD of a user that has at least SELECT permission +# to ALL databases. +# +# Set the DBHOST option to the server you wish to backup, leave the +# default to backup "this server".(to backup multiple servers make +# copies of this file and set the options for that server) +# +# Put in the list of DBNAMES(Databases)to be backed up. If you would like +# to backup ALL DBs on the server set DBNAMES="all".(if set to "all" then +# any new DBs will automatically be backed up without needing to modify +# this backup script when a new DB is created). +# +# If the DB you want to backup has a space in the name replace the space +# with a % e.g. "data base" will become "data%base" +# NOTE: Spaces in DB names may not work correctly when SEPDIR=no. +# +# You can change the backup storage location from /backups to anything +# you like by using the BACKUPDIR setting.. +# +# The MAILCONTENT and MAILADDR options and pretty self explanitory, use +# these to have the backup log mailed to you at any email address or multiple +# email addresses in a space seperated list. +# (If you set mail content to "log" you will require access to the "mail" program +# on your server. If you set this to "files" you will have to have mutt installed +# on your server. If you set it sto stdout it will log to the screen if run from +# the console or to the cron job owner if run through cron) +# +# MAXATTSIZE sets the largest allowed email attachments total (all backup files) you +# want the script to send. This is the size before it is encoded to be sent as an email +# so if your mail server will allow a maximum mail size of 5MB I would suggest setting +# MAXATTSIZE to be 25% smaller than that so a setting of 4000 would probably be fine. +# +# Finally copy automysqlbackup.sh to anywhere on your server and make sure +# to set executable permission. You can also copy the script to +# /etc/cron.daily to have it execute automatically every night or simply +# place a symlink in /etc/cron.daily to the file if you wish to keep it +# somwhere else. +# NOTE:On Debian copy the file with no extention for it to be run +# by cron e.g just name the file "automysqlbackup" +# +# Thats it.. +# +# +# === Advanced options doc's === +# +# The list of MDBNAMES is the DB's to be backed up only monthly. You should +# always include "mysql" in this list to backup your user/password +# information along with any other DBs that you only feel need to +# be backed up monthly. (if using a hosted server then you should +# probably remove "mysql" as your provider will be backing this up) +# NOTE: If DBNAMES="all" then MDBNAMES has no effect as all DBs will be backed +# up anyway. +# +# If you set DBNAMES="all" you can configure the option DBEXCLUDE. Other +# wise this option will not be used. +# This option can be used if you want to backup all dbs, but you want +# exclude some of them. (eg. a db is to big). +# +# Set CREATE_DATABASE to "yes" (the default) if you want your SQL-Dump to create +# a database with the same name as the original database when restoring. +# Saying "no" here will allow your to specify the database name you want to +# restore your dump into, making a copy of the database by using the dump +# created with automysqlbackup. +# NOTE: Not used if SEPDIR=no +# +# The SEPDIR option allows you to choose to have all DBs backed up to +# a single file (fast restore of entire server in case of crash) or to +# seperate directories for each DB (each DB can be restored seperately +# in case of single DB corruption or loss). +# +# To set the day of the week that you would like the weekly backup to happen +# set the DOWEEKLY setting, this can be a value from 1 to 7 where 1 is Monday, +# The default is 6 which means that weekly backups are done on a Saturday. +# +# COMP is used to choose the copmression used, options are gzip or bzip2. +# bzip2 will produce slightly smaller files but is more processor intensive so +# may take longer to complete. +# +# Use PREBACKUP and POSTBACKUP to specify Per and Post backup commands +# or scripts to perform tasks either before or after the backup process. +# +# +#===================================================================== +# Backup Rotation.. +#===================================================================== +# +# Daily Backups are rotated weekly.. +# Weekly Backups are run by default on Saturday Morning when +# cron.daily scripts are run...Can be changed with DOWEEKLY setting.. +# Weekly Backups are rotated on a 5 week cycle.. +# Monthly Backups are run on the 1st of the month.. +# Monthly Backups are NOT rotated automatically... +# It may be a good idea to copy Monthly backups offline or to another +# server.. +# +#===================================================================== +# Please Note!! +#===================================================================== +# +# I take no resposibility for any data loss or corruption when using +# this script.. +# This script will not help in the event of a hard drive crash. If a +# copy of the backup has not be stored offline or on another PC.. +# You should copy your backups offline regularly for best protection. +# +# Happy backing up... +# +#===================================================================== +# Change Log +#===================================================================== +# +# VER 1.0 - (2005-03-25) +# Initial Release - based on AutoMySQLBackup 2.2 +# +#===================================================================== +#===================================================================== +# +# Should not need to be modified from here down!! +# +#===================================================================== +#===================================================================== +PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/postgres/bin:/usr/local/pgsql/bin +DATE=`date +%Y-%m-%d` # Datestamp e.g 2002-09-21 +DOW=`date +%A` # Day of the week e.g. Monday +DNOW=`date +%u` # Day number of the week 1 to 7 where 1 represents Monday +DOM=`date +%d` # Date of the Month e.g. 27 +M=`date +%B` # Month e.g January +W=`date +%V` # Week Number e.g 37 +VER=1.0 # Version Number +LOGFILE=$BACKUPDIR/$DBHOST-`date +%N`.log # Logfile Name +OPT="" # OPT string for use with mysqldump ( see man mysqldump ) +BACKUPFILES="" # thh: added for later mailing + +# Create required directories +if [ ! -e "$BACKUPDIR" ] # Check Backup Directory exists. + then + mkdir -p "$BACKUPDIR" +fi + +if [ ! -e "$BACKUPDIR/daily" ] # Check Daily Directory exists. + then + mkdir -p "$BACKUPDIR/daily" +fi + +if [ ! -e "$BACKUPDIR/weekly" ] # Check Weekly Directory exists. + then + mkdir -p "$BACKUPDIR/weekly" +fi + +if [ ! -e "$BACKUPDIR/monthly" ] # Check Monthly Directory exists. + then + mkdir -p "$BACKUPDIR/monthly" +fi + + +# IO redirection for logging. +touch $LOGFILE +exec 6>&1 # Link file descriptor #6 with stdout. + # Saves stdout. +exec > $LOGFILE # stdout replaced with file $LOGFILE. + + +# Functions + +# Database dump function +dbdump () { +pg_dump --username=$USERNAME $HOST $OPT $1 > $2 +return 0 +} + +# Compression function +SUFFIX="" +compression () { +if [ "$COMP" = "gzip" ]; then + gzip -f "$1" + echo + echo Backup Information for "$1" + gzip -l "$1.gz" + SUFFIX=".gz" +elif [ "$COMP" = "bzip2" ]; then + echo Compression information for "$1.bz2" + bzip2 -f -v $1 2>&1 + SUFFIX=".bz2" +else + echo "No compression option set, check advanced settings" +fi +return 0 +} + + +# Run command before we begin +if [ "$PREBACKUP" ] + then + echo ====================================================================== + echo "Prebackup command output." + echo + eval $PREBACKUP + echo + echo ====================================================================== + echo +fi + + +if [ "$SEPDIR" = "yes" ]; then # Check if CREATE DATABSE should be included in Dump + if [ "$CREATE_DATABASE" = "no" ]; then + OPT="$OPT" + else + OPT="$OPT --create" + fi +else + OPT="$OPT" +fi + +# Hostname for LOG information +if [ "$DBHOST" = "localhost" ]; then + DBHOST="`hostname -f`" + HOST="" +else + HOST="-h $DBHOST" +fi + +# If backing up all DBs on the server +if [ "$DBNAMES" = "all" ]; then + DBNAMES="`psql -U $USERNAME $HOST -l -A -F: | sed -ne "/:/ { /Name:Owner/d; /template0/d; s/:.*$//; p }"`" + + # If DBs are excluded + for exclude in $DBEXCLUDE + do + DBNAMES=`echo $DBNAMES | sed "s/\b$exclude\b//g"` + done + + MDBNAMES=$DBNAMES +fi + +echo ====================================================================== +echo AutoPostgreSQLBackup VER $VER +echo http://autopgsqlbackup.frozenpc.net/ +echo +echo Backup of Database Server - $DBHOST +echo ====================================================================== + +# Test is seperate DB backups are required +if [ "$SEPDIR" = "yes" ]; then +echo Backup Start Time `date` +echo ====================================================================== + # Monthly Full Backup of all Databases + if [ $DOM = "01" ]; then + for MDB in $MDBNAMES + do + + # Prepare $DB for using + MDB="`echo $MDB | sed 's/%/ /g'`" + + if [ ! -e "$BACKUPDIR/monthly/$MDB" ] # Check Monthly DB Directory exists. + then + mkdir -p "$BACKUPDIR/monthly/$MDB" + fi + echo Monthly Backup of $MDB... + dbdump "$MDB" "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql" + compression "$BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$MDB/${MDB}_$DATE.$M.$MDB.sql$SUFFIX" + echo ---------------------------------------------------------------------- + done + fi + + for DB in $DBNAMES + do + # Prepare $DB for using + DB="`echo $DB | sed 's/%/ /g'`" + + # Create Separate directory for each DB + if [ ! -e "$BACKUPDIR/daily/$DB" ] # Check Daily DB Directory exists. + then + mkdir -p "$BACKUPDIR/daily/$DB" + fi + + if [ ! -e "$BACKUPDIR/weekly/$DB" ] # Check Weekly DB Directory exists. + then + mkdir -p "$BACKUPDIR/weekly/$DB" + fi + + # Weekly Backup + if [ $DNOW = $DOWEEKLY ]; then + echo Weekly Backup of Database \( $DB \) + echo Rotating 5 weeks Backups... + if [ "$W" -le 05 ];then + REMW=`expr 48 + $W` + elif [ "$W" -lt 15 ];then + REMW=0`expr $W - 5` + else + REMW=`expr $W - 5` + fi + eval rm -fv "$BACKUPDIR/weekly/$DB/week.$REMW.*" + echo + dbdump "$DB" "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql" + compression "$BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/$DB/${DB}_week.$W.$DATE.sql$SUFFIX" + echo ---------------------------------------------------------------------- + + # Daily Backup + else + echo Daily Backup of Database \( $DB \) + echo Rotating last weeks Backup... + eval rm -fv "$BACKUPDIR/daily/$DB/*.$DOW.sql.*" + echo + dbdump "$DB" "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql" + compression "$BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DB/${DB}_$DATE.$DOW.sql$SUFFIX" + echo ---------------------------------------------------------------------- + fi + done +echo Backup End `date` +echo ====================================================================== + + +else # One backup file for all DBs +echo Backup Start `date` +echo ====================================================================== + # Monthly Full Backup of all Databases + if [ $DOM = "01" ]; then + echo Monthly full Backup of \( $MDBNAMES \)... + dbdump "$MDBNAMES" "$BACKUPDIR/monthly/$DATE.$M.all-databases.sql" + compression "$BACKUPDIR/monthly/$DATE.$M.all-databases.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/monthly/$DATE.$M.all-databases.sql$SUFFIX" + echo ---------------------------------------------------------------------- + fi + + # Weekly Backup + if [ $DNOW = $DOWEEKLY ]; then + echo Weekly Backup of Databases \( $DBNAMES \) + echo + echo Rotating 5 weeks Backups... + if [ "$W" -le 05 ];then + REMW=`expr 48 + $W` + elif [ "$W" -lt 15 ];then + REMW=0`expr $W - 5` + else + REMW=`expr $W - 5` + fi + eval rm -fv "$BACKUPDIR/weekly/week.$REMW.*" + echo + dbdump "$DBNAMES" "$BACKUPDIR/weekly/week.$W.$DATE.sql" + compression "$BACKUPDIR/weekly/week.$W.$DATE.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/weekly/week.$W.$DATE.sql$SUFFIX" + echo ---------------------------------------------------------------------- + + # Daily Backup + else + echo Daily Backup of Databases \( $DBNAMES \) + echo + echo Rotating last weeks Backup... + eval rm -fv "$BACKUPDIR/daily/*.$DOW.sql.*" + echo + dbdump "$DBNAMES" "$BACKUPDIR/daily/$DATE.$DOW.sql" + compression "$BACKUPDIR/daily/$DATE.$DOW.sql" + BACKUPFILES="$BACKUPFILES $BACKUPDIR/daily/$DATE.$DOW.sql$SUFFIX" + echo ---------------------------------------------------------------------- + fi +echo Backup End Time `date` +echo ====================================================================== +fi +echo Total disk space used for backup storage.. +echo Size - Location +echo `du -hs "$BACKUPDIR"` +echo + + +# Run command when we're done +if [ "$POSTBACKUP" ] + then + echo ====================================================================== + echo "Postbackup command output." + echo + eval $POSTBACKUP + echo + echo ====================================================================== +fi + +#Clean up IO redirection +exec 1>&6 6>&- # Restore stdout and close file descriptor #6. + +if [ "$MAILCONTENT" = "files" ] +then + #Get backup size + ATTSIZE=`du -c $BACKUPFILES | grep "[[:digit:][:space:]]total$" |sed s/\s*total//` + if [ $MAXATTSIZE -ge $ATTSIZE ] + then + BACKUPFILES=`echo "$BACKUPFILES" | sed -e "s# # -a #g"` #enable multiple attachments + mutt -s "PostgreSQL Backup Log and SQL Files for $DBHOST - $DATE" $BACKUPFILES $MAILADDR < $LOGFILE #send via mutt + else + cat "$LOGFILE" | mail -s "WARNING! - PostgreSQL Backup exceeds set maximum attachment size on $HOST - $DATE" $MAILADDR + fi +elif [ "$MAILCONTENT" = "log" ] +then + cat "$LOGFILE" | mail -s "PostgreSQL Backup Log for $DBHOST - $DATE" $MAILADDR +else + cat "$LOGFILE" +fi + +# Clean up Logfile +eval rm -f "$LOGFILE" + +exit 0 diff --git a/docker-compose.yml b/docker-compose.yml index 9ae14d0..9422a1c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,12 +22,15 @@ services: - POSTGRES_USER=nirgalon - POSTGRES_PASSWORD=Zaq1234 - POSTGRES_DB=server + volumes: + - ./database:/etc/cron.daily + - /var/backups:/var/backups deploy: replicas: 1 restart_policy: condition: on-failure max_attempts: 3 - window: 60s + window: 20s networks: - example_cluster diff --git a/server/api/tests.py b/server/api/tests.py index a1a1c48..8b1cf5d 100644 --- a/server/api/tests.py +++ b/server/api/tests.py @@ -12,10 +12,10 @@ def test_get_users_objects(self): self.client.login(username='admin', password='admin12345') response = self.client.get('/api/users/', format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(len(response.data), 1) - self.assertEqual(response.data[0]['email'], 'admin@example.com') - self.assertEqual(response.data[0]['username'], 'admin') - self.assertEqual(response.data[0]['url'], 'http://testserver/api/users/2/') + self.assertEqual(len(response.data['results']), 1) + self.assertEqual(response.data['results'][0]['email'], 'admin@example.com') + self.assertEqual(response.data['results'][0]['username'], 'admin') + self.assertEqual(response.data['results'][0]['url'], 'http://testserver/api/users/2/') def test_forbidden_get_users_objects(self): response = self.client.get('/api/users/', format='json') diff --git a/server/config/settings.py b/server/config/settings.py index 30f9442..3202000 100644 --- a/server/config/settings.py +++ b/server/config/settings.py @@ -141,7 +141,8 @@ REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', - ) + ), + 'PAGE_SIZE': 10, } diff --git a/server/config/urls.py b/server/config/urls.py index 720b24b..3ef7e75 100644 --- a/server/config/urls.py +++ b/server/config/urls.py @@ -20,6 +20,7 @@ urlpatterns = [ url(r'^api/', include('api.urls')), + url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), url(r'^admin/', include('admin_honeypot.urls', namespace='admin_honeypot')), url(r'^secret-admin/', admin.site.urls), ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) From 3a061b14c36c59f1571293517826fd7e28da9d80 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 29 Jul 2017 20:21:53 +0300 Subject: [PATCH 20/35] Final things before release (#71) * Add angular2-logger package * Fix codacy errors * Add codacy badge * Add maintenance badge * Fix github releases badge * Remove angular2-logger package * Update links --- README.md | 22 ++++++++++++++-------- server/api/tests.py | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f281e85..463d537 100755 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # An Angular - Django Project Seed -[![license][license-image]][license-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Donate][donate-image]][donate-url] +[![license][license-image]][license-url] [![GitHub release][github-image]][github-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Codacy Badge][codacy-image]][codacy-url] [![Maintenance][maintenance-image]][maintenance-url] [![Donate][donate-image]][donate-url] This repo is a production ready seed project. The app shows a list of users. @@ -123,12 +123,18 @@ The backups are saved at `/var/backups/postgres` at the host machine via a share Just fork and do a pull request (; [license-image]: https://img.shields.io/badge/license-ISC-blue.svg -[license-url]: https://github.com/nirgn975/Angular-Django-cluster/blob/master/LICENSE -[travis-image]: https://travis-ci.org/nirgn975/Angular-Django-cluster.svg?branch=master -[travis-url]: https://travis-ci.org/nirgn975/Angular-Django-cluster -[codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-cluster/branch/master/graph/badge.svg -[codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-cluster -[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster/badge -[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-cluster +[license-url]: https://github.com/nirgn975/Angular-Django-Project-Seed/blob/master/LICENSE +[github-image]: https://img.shields.io/github/release/nirgn975/Angular-Django-Project-Seed.svg +[github-url]: https://github.com/nirgn975/Angular-Django-Project-Seed/releases +[travis-image]: https://travis-ci.org/nirgn975/Angular-Django-Project-Seed.svg?branch=master +[travis-url]: https://travis-ci.org/nirgn975/Angular-Django-Project-Seed +[codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-Project-Seed/branch/master/graph/badge.svg +[codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-Project-Seed +[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-Project-Seed/badge +[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-Project-Seed +[codacy-image]: https://api.codacy.com/project/badge/Grade/b276134fff7f47439a01fc6d85cf2ff9 +[codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Project-Seed?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Project-Seed&utm_campaign=Badge_Grade +[maintenance-image]: https://img.shields.io/maintenance/yes/2017.svg +[maintenance-url]: https://github.com/nirgn975 [donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg [donate-url]: https://www.paypal.me/nirgn/2 diff --git a/server/api/tests.py b/server/api/tests.py index 8b1cf5d..738f180 100644 --- a/server/api/tests.py +++ b/server/api/tests.py @@ -1,10 +1,10 @@ from rest_framework import status from rest_framework.test import APITestCase from django.contrib.auth.models import User -from requests.auth import HTTPBasicAuth class UsersApiTestCase(APITestCase): + @classmethod def setUp(self): User.objects.create_superuser('admin', 'admin@example.com', 'admin12345') From 453cd1857f721749bb182e54a75a667ae244e5ce Mon Sep 17 00:00:00 2001 From: nirgn975 Date: Sun, 30 Jul 2017 10:03:11 +0300 Subject: [PATCH 21/35] Add the project logo to README file --- README.md | 26 +++++++++++++------------- angular-django-seed-project.png | Bin 0 -> 70315 bytes angular-django-seed-project.psd | Bin 0 -> 277560 bytes 3 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 angular-django-seed-project.png create mode 100644 angular-django-seed-project.psd diff --git a/README.md b/README.md index 463d537..f31756f 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# An Angular - Django Project Seed + [![license][license-image]][license-url] [![GitHub release][github-image]][github-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Codacy Badge][codacy-image]][codacy-url] [![Maintenance][maintenance-image]][maintenance-url] [![Donate][donate-image]][donate-url] @@ -78,7 +78,7 @@ npm run test To run the `server` tests and lint run the commands below in the `server` directory. ``` -pycodestyle --show-source --max-line-length=120 --show-pep8 .; +pycodestyle --show-source --max-line-length=120 --show-pep8 . python manage.py test ``` @@ -123,17 +123,17 @@ The backups are saved at `/var/backups/postgres` at the host machine via a share Just fork and do a pull request (; [license-image]: https://img.shields.io/badge/license-ISC-blue.svg -[license-url]: https://github.com/nirgn975/Angular-Django-Project-Seed/blob/master/LICENSE -[github-image]: https://img.shields.io/github/release/nirgn975/Angular-Django-Project-Seed.svg -[github-url]: https://github.com/nirgn975/Angular-Django-Project-Seed/releases -[travis-image]: https://travis-ci.org/nirgn975/Angular-Django-Project-Seed.svg?branch=master -[travis-url]: https://travis-ci.org/nirgn975/Angular-Django-Project-Seed -[codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-Project-Seed/branch/master/graph/badge.svg -[codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-Project-Seed -[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-Project-Seed/badge -[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-Project-Seed -[codacy-image]: https://api.codacy.com/project/badge/Grade/b276134fff7f47439a01fc6d85cf2ff9 -[codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Project-Seed?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Project-Seed&utm_campaign=Badge_Grade +[license-url]: https://github.com/nirgn975/Angular-Django-Seed-Project/blob/master/LICENSE +[github-image]: https://img.shields.io/github/release/nirgn975/Angular-Django-Seed-Project.svg +[github-url]: https://github.com/nirgn975/Angular-Django-Seed-Project/releases +[travis-image]: https://travis-ci.org/nirgn975/Angular-Django-Seed-Project.svg?branch=master +[travis-url]: https://travis-ci.org/nirgn975/Angular-Django-Seed-Project +[codecov-image]: https://codecov.io/gh/nirgn975/Angular-Django-Seed-Project/branch/master/graph/badge.svg +[codecov-url]: https://codecov.io/gh/nirgn975/Angular-Django-Seed-Project +[dependencyci-image]: https://dependencyci.com/github/nirgn975/Angular-Django-Seed-Project/badge +[dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-Seed-Project +[codacy-image]: https://api.codacy.com/project/badge/Grade/cdf4939e98804872b377a4120a4f4571 +[codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Seed-Project?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Seed-Project&utm_campaign=Badge_Grade [maintenance-image]: https://img.shields.io/maintenance/yes/2017.svg [maintenance-url]: https://github.com/nirgn975 [donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg diff --git a/angular-django-seed-project.png b/angular-django-seed-project.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb80820104dc01da9602502b24a15a88f0d7269 GIT binary patch literal 70315 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�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

3E)7Kr)PvIu?^rg zHwrxSku@br)p+QRw7?3HCE=~%#md+U;m7v=dW0&Ga-$F?-=e{j+`v>Ip6v8Q%nUoN zR>zQM8el-=_h~Ax?L6&m7;32vUaEr+x4L@!t&JZ%yY*&@2ES`H11eL@+YIms(@FLA~*XD0)ZU;k*~RkpXkw-yw3*pd40mOl8U0V+V;k)lz5@0 zNZgA5*W%FE2QP>`;FceUO>rSh?)b0gODlT1Ouhy6l9juE!-_atl00tNhF2{v`ziXa9zSP#1 z$RR8ha?>l$o}lp^WdEGpvMR<6`)B#LF1VZy@93!BBKwCrA{Pp`Oz-Gm>gzpVf!=Y9 zP6h`?H@eCmMs;0$4zBX8!J|8PS?|N#q8#Mu%f4OEKXAprcsq$KRnBe8=%$R}=_Z#aEWXndGCS(BTI~bV*I33NO#tO{=UM0JH_;j+czh?n#MpNN zspH*GgFcJ?Y-o4QQQu12|LNmtD^`zT`=e9;(bR`xNP+rR+J1z2sSk5$U@5II4T$dP zLA%xJ9GRi=0_0y36WF^Bt^pH#_p*!c2%d(6U+Sn^&V8qMpz2{%Xl1^Lu6%O`+e}>W z_Cs+i6DLU3{!G?P%E8>vk85{kzckC|SJ3h;x zu#Z#!XYcsA!uZW3+pJbwA9`*I2_D!6qf_~PQeiK^YSho4z;dH|C&#_ohxTTs=VIYd zU`?6rYz~Oj8QA5J9&L zf*Dv-E6O7jokr(&$=&Dd<}R9pSyNwvm4YYC! zwA7WuXQ?WMvpu}H>ciirEKU5ArVju-oI^a)MzcVk&~@J|SRHEvrqt$XU}_v$(4!;} zsKGWJNPA}vHK2dE#A!5Q8Xmo*2p4|JWTlBLwiwrQYqS;~P36rkpAz%l`L@;K#7yKm zV?`MdHph{=pgLa!8C6>K>hC`7aTs_Brfm|}8WBV$tFnLQeJ@RLA<5EQWwWXG$j5uZ z7(H}8DHC9d>aWo(90t?!r<$F5YR>}jnXAg$as!)+V>ckt6HXqK*S~geORyDn z4n&+Q9{DvouI?%D2}*$4>9|5#Bbi>BNy+pUB&otbfVyZDpAd0ud`$0IWL6nktp4~XSk<@Hh%2I`)_@woz6SWpSu%@tjE-(G zWY?^cnuXD1>cB5U4zfk))IxM)GEyLwzKmw$$VzvbtZ3GU_40&JVfM}@)ZQA){h;M4 z62qZ~U97YDEw55L>UQlCle1P?TUK54_jr)({(N9}(@cQOU>|6Qmme7cbbyURzP9jf zNV#PP*Xn}w7GF0}2VK3h<$vH|LxG0VU`GZrUBuc80Zl>a8f}0pkU5W?Qd*G`3q4~# zPI~5h1r9WMZo_1)mdeUQ@K8#=@=|4)iw$pK6@V5ss7rBTv?A`Ec?Sfbe{G&>2ykMM z-U$@yPWMrC3Ie=>3Rhxx0qxZZ8iaM(ty)ALi_|P7tvg&!BRbCjA5n z8}u(l;Xx~&(Ot6@alVA7R0Lu}WU%2!rk-vMw8FHOBsy}j&dklDiX=G*6BLi$Ulyv ztTqBAu!!DRkKcd&B0vVgx_F@BB|K36z-2^v)Fr~SobXCm-TE4vWgNjfLG2J4f-tc% zPdEvBYtIBZq}?p*py4lAS>)pyfPnW?r6Jb-Ah6@pD~z+`WOudTd{C^t4c1JgdC;h~ z*g9Jpu2fUNLRwx?*@8eU2-LA1To?AcD|pP9R!fCd7a)kj*Pk+5Sw*QD?H-73-He}X zRYnK0%&FlOa0du%K$u{OCv>dGVQJO0Q0rzCz$<@*vz_!j63yI5G7ax?HW8yN`ok5_ zodO0W>Qah*x1lg+IRh|pHmR$S_JMAl73#W%7Q|8_49>EjfFY9(;3?N36!AtmwV#gL zg}Qnyvdh_lKmvp#&94V{zV6Bu7ve@gww}jJwwW2!#g$$ zs$sMeyYWRT4}RbaDro~qzooQPjV^XHJ2xL@L=|g`%ZOIdvlX(cx_U(PW>9C1a^7=y z;a3~a+s)%zgK&UX-~j)s+J!Pbbat&TtSQGDF}Ge`=5ROGJF)*PUS}G~o10pRC*nF# zCa7&Knz##{pLNfol2ZH-k~h(&-eiBD4#Rqs4WscW0K-&JAp>l71Gpy*w%1VZlCHUY zwnD0I?b4$z9&N&P&m|%d`E%6SPHG{Ug#s(d*U={yktK`0Ojsf2h7L^#xvMQWFzn*g z)gRD~vdj}owk^tcSx;j%+uca`;z$@T{YN7UY>AP|9ajERY)s5foN~lO&?{G^E~gN0 z8}6R~FfpmkB!WTeoscH(%@uS3x?H>bk^X@aYr$?+*&e>0Av6X+-cybhj} zPN9H8zyjs=T7v_khHkUk?n!@p&I)g+Y6khuLf7ZIHflPIC*BY0r61;P0A@fH-2a54 z06F|u=%0@ID75;mP}P)BShfv#?;)n1o;tK*M>IM@S6g0%O<|4a!A~aphnw-7+uydC zXCO`^x?DBC#nhvpL=+HV9fPa2pr%5YC&HJIOcc}}5c-u`$Nc?DD`BWXAESst=!Z>p zfxS$m3;pCju$vKW!*<=wp~~{BD2VF;9RQb9QLQSZsA8LWlyOs|lcz)qbWU$+4`?Zk za^OR2VA}n-7@5D2w-HDH+=qLnlx&bbI(oIm>QXEiTTgN5fp(4E)F(7?H4gckxB}f- zXgPpNm=2-?C5Xd4jhMyL5E!ywg0q0t;JElL+OH$nFDI4ObQDxq39|(DrDaH~wpp%g z7gKlnD|#d$W9v~2PuGN9N8BAeW~h4~OT{`N=iZt6gSv3IUoOZ4PJcZ*V7F{*<`c*=0o;6D1$8 zP-PoRevx?Ls76-SsCIEpSyiV_-&v3L^ORCUGR*k}0E@)y^2{72B{4b*e~6_fA3!1; zy4VBlfDjPI*d)jBq@Et6CU@Fk4E{>k$3UnU^>;nSX4CCu5KP%oj~cEj zG-)TMwDX74r#R`|?*io00A_O-i;$~Bfxb2b`egQjM#SiG-gT|zhy~7K8$wtGHmat2 zNmRA`6E!~4$UikWQP3A5*p#9l6kxVks@VZh4O%K@hoxEuJJfcI9ab_azropqbGuAO z26r2({|gnCk7{Ey-0pHT5xPY30YXjGcCpBEd!f35;%{w0Kmcftp~h;1RMSy6_$jJT zyIO_JLUgvq>KIN2&e)p6Kvp1|gSmlkeZzvdz%2SMLlGdft5#vTnBg?DeazLkve`)6 zcAz=1zXLX;4+GAExYlV~kOeED{>6RTP(Xnf{^BoCt~1cB)Ce2gH>-@m{1D0OaaDCW z(Ir!+yHbX{^=Vq5(7&85P;9ZC<_MGuQUF2V2!pGXU9gcuh51uDa%~G(7wy7!=I-*Co>1!#j7<{p~k(2+2+1Ks#EtVKc&igKoKKYon8)HF{|+Wxg1l^(8fB zsM5srW*O5!beYfA zZCJx?R=)v>V(6|W+hFyxIG^wZ*?49mZ-FbO2O%Jk6~)difNELFj##l0v*9g+Nc$$t z=T1on>h+(UV>uOqy^zw3;!6P`F&bT{Boy%7TR$jT1%=SHJQZ~^v*sc33OKY+bo4nG8wERR(7sDFiM z^@?rq6ZcYK7%D)@E1(@QAE>c5Wu?)r>43I^{_W_rjtM3mT@nff&lZUVVcO7DbTJU? z7)XfD;xIPSE?{a@X$IoXXqQo>?lD*gvA@P`DCDQ*kT`vFvm?QU7?a6aRaWaXVMJLc z@>-}3tIv?UOm=rCV&*81y@HfJvWdDOv1CNKs*dw`pNjubHme15(KXWf$u|H1e((DZ za}WK9b^<7gfIShL9cH?e!hc82Wql)DVlgtp5yNq7sX;Z2pf!+a>s?Bl?mW$yl}yrS zqqv=h+4v)AT*^VCUD(EkDi9H+t|}s$b8G@bJhw?Ed~+J z;`zdk;k*9Mi96Ko<|GT zy-71{XKDyfnt)=!XtX6X8cD`3eMdF^gMhpq@Mtt@_ln3sQ8EHv4%0UI*83XKovH}L z2whETc|2O%NbGv09k<62qVxn@D|JM4$HcXO$A2ieeu!_NWkGb{a8Ma9*T#``M2mif zCfb0KYhj{@D0nGNX9gmJC=DO|sHwdZKpLIxrqPjr0WJuMZ;Ua8{B$iAFVO+;2!1oN z8II%mf}Ck0ydMj_tRsTMa+)En24d4C*Nv{=%|v`e1PNNx$CyAoBv;Lx&?zIKgG^yo z%2_V0(6sAyM=|NJIre~k7a&o*TFHyN)k<5?JvA6G0D81i-NT@E8D)*)rd8XWE)WOd ziVPN_?Pfef6k!DJp7KIG!l#1h#AJ8CBhRpt4+2B~HC21cvSNKl7@ z_EcG}7l>-RZWkcJnLEOA%^C1OAiN=#3!;M0v`BeXLsh9jPd^R<6?ccusVGKE)360x zMxa*E?!=cxiF9M;VaQeDdxCLrjLGIF(guaYe14Bme};CU|#XLLZ@Kx=VK;;@m`QUy&E z={-6=`2yIb-svV9PX}MHq#cnAAJi5p*OMd((0z1B+r-TAYdBieds7W%6H0sxl}a`t zBNCcmP;VJ#(%HuK0TVhdENEEULJ|gc^AG|e)YY^WS_Q|WMdLqWwH`S}=;(kOBH#%} z>Disgr3O{{jQum60Y5z~oY^s$X(Syca54xcKm$(# zJ!-1L!_Bq_eE$&UMlF=bVQw-3OMtTk34Rsm9!#Q~2>AAkV185&Ou+rj&hiZMF##CY z-k^o|h021C1$_AhCL~~qBC1E80kAEp$tJ74JdxK5#PWfHtHZl}h@lrvAv`a-~S_j*LLZZSOPte(Mg4IDuhstzZE zame!l-_5}eg6SxDNecc7c8+vT7ulxd@Z2BtT@Qu@3j;;4lS=l~!uA{J$6$V+fll)! z>`5l1*=9M$E7*3!isL%O_~pK!$4+BZ*se$erZGoh-VZ|}+0Y21)6R|W3Ht6N#soN* zkmNZqt72?|S{|B`$*+WkIRL+m;+^pJwqu_QgnhRv|Wc` z2HA(3GUJe$xhV)=z2=bW$WXI{Z^Fl zG>9^)P@Nz$Vk^hzJp*!ybUl-Z&dITPpT6P=gOvc5Ba>uw-iId=fGIX;a=gwB+Jv+Dij%+Ns*)T zKFs4JOHwj3rWKORjQG&8d7qx*Bw-1e8RPg=u|hgN@6*>gi99AF^O{1Mk-286XmZ}i zr#Y!OI&E#nutJiNnHVuO@8dTC3YMIi;ii#eLuTfEdWMsP#%E;qD&!fN>B|v@4qoj$ zoJ6)VeXWy*PFW%f{_tH+DvDaOHp8Y6XJoGC!uQPmn8UBPLXM#=cYxAp9}i%eNG}>o}Q^!cxXk*i}nY7`T<5=nzA-SrBj;o+ZB@-c`b<8EmkN?OGt`O%a~M*5s~9U4hMZ(&xOcVDl#)OV&qo(VP+<;kS8Sl>62}# z@skSL)wSs>q(_5(Lz9SFlbJEAkgNrLoU{!J{7#Y-`~3ohSjx7>Cr&Fyhnbn z!n0cROEmG2*Zd?dHuguwSVrsP$?Er;?gq|@kxK`M0Qx=_r$TuG@FdI$%|hNdXya;k(im;PfJaTM28m9Qc%{c zSd@_#bK5aoqK8i0x@rwb9f~(@KG5g!T$i5SfOiInzY;=U3wj#1LLQ^Y>=t%xD zWm4?w^if54eCpqg9?$H>Z^tH&D`Y7#|8Z^-P^pfcir92If}qD6LC@<3t#EqniZJ2) z$zwAz2NbfzeJ6jM0sfOD#y?yMN?m<4Az@S@SsnjKHC}0cwR$z98^q9?L67SJPvUS` z={%<{S(diet&peQ#Ctk!N}E(fW~9b!#(X@^-5D`y!wPYFTx!^pCQSF!Z^a1I1BKoS zdLR%b!V)rw^)fOuGWr#=gsn54H{zyFbjafwK7Lz_ zmo?%--VS=48~X@Ou2RTij(TQ)6%Q_rPkg)sYf}9nHmO$;sYqV+txsutpTzbO#c(#x z20dcX%h6Q|dDqw#OKd=t-?}mVh1kdkug6H4c6qCZ(D>E_te9&V? zaHeru$`#8qVs?2ve~HaVk5%lT-<;dDDka0Im8ndTeH)V#R{yF23#xoLKGCL_pp*Z-LcG@gF*zQroSC*4+S=HD*nQ1&?9dj)oPUu{ZCINfk)4I!w#SajMp4CIfQFrzA)Tpy*!) zhVH^}NeSsT#iF>6JflZ+bU?ldg7$$0)6&Nw1i_lCHl3UBcwDeW38X?o`RwdoTI=*7hNtrd8` z>DLJfM7uRnV#qi;X`qF|H%RE3|Cu&-Dj{mZR%d2H zg$Tp@_kAxX5=V*FtnE_BpmXlX8yWLRl|P6{f)Nsuo|g5<-i!Kin7LE-;vXhmS45{} z+;;D#P50iGk(P1m#!Z{3<9?w~m7#FL!?{_a&)viySqCH%d}?t{1BoH3;uD<2gsHz&;@F}yEe&|IbsGiMb>F#W2pU6@9ThpWGgU)_%f zdm#GLlH+1i*G($I(r9Iyu`(Po8LfHqX6b!*U{{I0$*~VyhCtB&C0W>0C}Es^TFrz) zv?hg!4At%q825lz#>^_(jvSQbeu}UVvV8GBXkW?b8 z#)1uwOL?LTHI_q1Z(FryNFm;^`7Ywz&|B^S&)$jE4Ph2*Luga!$k3j~u6?!}cnxRn zU6txqgpzj0r_(V%$$Prfq3VLDO{nCVw0Eq97+G6jn%)xc@9Od!(i(AyKb^ zoHyOO`A*0e41CjFn>KH{`<8SlEG}J~E^PEVqB5!6jqgC^y7u98Lm9&YSOoiYf;JAi znE3l=3AAw;qJ%L2m7$DBKQ?=~qbCtjc<21YJU^9*LuE%oN3i`fq4$xGze@%V2K~DPTK+ z8Scy*ZS+Wrei)lHt5}+T$L4$2rYlGQ3dh5yh)R#o{7%Yh%*0FP%rrVP@&Ba;UF&|4 zuzHaAf6X>iKX&H)*H*Dzge;s6Smw(lIMzapz(yov#8U5BK6d(^RnS`ZY~GNb=97JC zRt1+B9rsYh*oR+Vm7JjfH+iK+k0K&2Z5u4ZnUB8#-A9&Z+|O%q*85+?UXtla_m0_s zF>%4Ai)264lO!Sj7xlHCa7T_J=B7=XZ(ZXRdC^KCYE#B*0TO0QV-QqGc zTy#N%nf`>n#1k_7*8N|(4P0m=Mt|Va3}8B!PMq1eDg^^U&~NriyCvzdnY$gB#W@(Q z$+6$Pj6>XwV}*U=GQ<#YzPorE2j>918JP~cxhBRvjOsP1C1-6y+APkRG<%erL59&i zQPg5+^+-y89G5rs5)Z299$;6EZHu9SF`(2-V!lo}iyz$<9?zlBG9a?F1 z!Y{6j12}rgr3Ye?@O+4?&6~;Cz>dVP%I~&eS8$byDX>L*?IJ3aaI;bNy&$vH(Pf<^DcB9jyo!=6bcO*=ZFF4xLjf_C9K2 z4eoii!CxWHHydzltcq5!TD%6-nj=2$Ot<@#bIDwpZr8hSS_MZe=iZFR zI`>i>tf=Fzu_aa2h-V`%5dPg}nkGDO@GU!c>rKOTXdtE}AX283r545@-8PqJwM+Nh zTyNgqL0zdcvm`ttNAj(I-OgQ%lFR|b^+7hBl#OMn^>^Jrkpj!IT7^oEyCu8q z&GxD9u){S2<8)4rua1@mzcCO0eA`z72z^+x7E9Z`Y2u%AcKXt+=FElfoY!|y^scx| z`Wd(3(MU1O-JfpldB@taIIA@TTf{f{p@ZA0={IoOuSfdL zW}YzS%zJnL!_L|AtKoi2cP`YTq88{g*%jMXnl_hOFFMNR!mJkADp7y+b(^+Qudryz z56VNaSfKo;E1$7Fi<&%T=9Y!g@4>9b4iU@R($*F)z8ib#OR#@rc=g9wt+KgGLzgVr zY_GBN+P>uXeepGXyRV$%FL#VYLvq?JqUhsR-TSVF|DudDaZdvYR*9O86GxXQzQ^>C z>m7s$%?!K%t}^z8jjEw}=>Gc-J%MfJ&_i5g4fPcR*8;6OW?Liib z+Wm*4q%29#OzytXp{v^Eouk^yhuJ#M~*2F4<;>+Qjb3WwSL_D)y`26TOhg**xqHemFOqBs_ca;iBoPlQCkEx!C2n7w4$ZfW0p7f zQ&oK$S~60qu~Zq7yTzGoCBG?NaDsu6?~Hok-j0ZA>`}|xKZ>E$;hE&9)=vtf8W@W$ zPqTEC`=!aIjmm=60$QylUPn!A#dDG-*4rAdo0F6$l)tTuH&f%NInE3ysc)P-vhm_K z9Ns6QR>^6|q_fKP;09N-J6w%+TH9Hfcni(No5;!i7-=I1hp|%k9qbmS5Roq0{(LkYat-lx5iD zn5PNTCly;xGdqJ()a^6v=d@8B6qX@>0Hcf(ER!fU-JXal6Uwag^<=biX!2T3O1Ks}91gt4^)EY`mr4gsEa!nrNPNEge*Us|IR z4qt^7I|wFj?nw>5Ju`gTl92334L|)b?8)$xoj{A}!Wq0sRD(@D$kkkrWOYiv$_(C^ z^~(n^W^H2nHUn%FlWt?6ol4NxsJ~9cH;CEd1QnveX^L(3re~YsD$Nwz(&7K~gN)y_ z%di`F8dirA(*~Q414Z`4)Pa&2Bwj*kU^+su3P0*GhAoq6DNsAr75z_hPaE zo9|k6N}OcSR-6PZEeslQBrZn^A2)n)J3=Zo{Nr8`Az9r^q-Q!mmZVLIh4R~*8ygzp zq!cB0j-``05C738TsG`zPK?7iL+GlQw>EksDQlX0<5p{GYlu(jDxRYDxHn1P+IJLu;Tl7?p;lAE zxSAEe*ucDc+lcj&io~wrb{Q=V;m7E~uoDhcxQSkg<7fjkE1h1u{uRxT)q-HtGLUXc zY{_4IV@Np}#X7r4o#UKgafe(cuQl?L(^A9nq`F@*Q;^j&WM=y9Nm1G6^kRnMX|PbZ zWo$W&C!#cT*%M#$mv7;cnjgAs_KkHB*W#{>S?BSl2}Rcui%dQfk!#2%H5t256eRej zPQPf{`<_6WdES;JV6wce4wd4J7fw#3>kX^bX*JWYGha@x4vontBrNIQ)2bUlAwIyv z#`tyCbJ!hp`M@Iroq=a;`}1WfI@e7ML+4CJxB!7IDo_Rtoyu%Ora?ocG7dH%1I(Fv z5-J-|^ONU|ILSGetk&mGPNnOO)Z8h5v3iBZbf1oNq*r|tVHEne_+{s&h;5b2_4vCm zd*p7rp~jEB+Kv^3$8NAcs;o*8xpi6vMDAnyZ~IhEl53kCGHDK;HAIS++xhmSL~b%m z=_0P-WW+g7rigO-fTVN}X_9ohw9=<0zUkGZwTk<0G+24%TJS#~{lC)EouVlConHH{ zlJqv*e`eXLn04JTJ9i@HArJcvmBQ-Crpb2hMxyjTpotrm(ndFMvoJ!n?;bo6Z7jBg zz3IuJ4QdTdY#LGB@|xofaO@6q57~Lf;f~(`+I$b%UFQeVwCyvrz1(HzzZ^5RDYlt( z0rJmhwio4D95!wEXVmSqj*%`?>Oz_!8~zo2sduthFUiiPw={*?{1GVB0oV4rW0?~} zMoLb9ymLR-s(W#F;Ak)6)F2z$$cz|;#?>+FGrWIY4=#pkf3Bl2v>r#Ju5U_fe9{#} z_iSvYu+M)&W9psbXiWE(rV$?C=;r@#I(9*`;rt_;J34Tz#BurWgS_BZj@o|;R7DfX zqtPMnHikaIkQabFF_U(8T0)v7YKMVk)5mq9JmcuM=R`;3j@KP3)@ud!p- zzoJb{mOkr~ul!5Wq#U+MZvX9Xu0Iwx+GYEHN*GMswBujVC4NY2Y|b11k}Sg~4q5LwYMI$?z9|nM z-h|r<2Sru&kyt?)SuY=}`rTeZMY*!TjgU2yjG0C;N}bUE4*x+psr|eiZOz?racLhu ztlLkHahIT!ra>Ae!_V=)@BT~bB*K%6HrM#CYmF-*cKz0McFxM5R0NO2ihS4F_6v(Z zEo86RK8T}~NuSLH>-@9LWfVtc`s21ECB;qL^GWH?WJ|J3#nI%$h^Wo3ca9?}*=N=! zOVA3-{jL-*!-=8NOFkqyv1IF6!pj~SXAnaF%}%#)^7gQg{K)@T3GyAnh1BRKA=dtz3F zXYvlLihF+*81O-6he6p~63rBb<9YE|!r_w7Ay!?O!-Fh z^J@+##bVDnA;{A~){YfOJ0gA@dD=cebq7xk@p&g`BT=Hv3i0GX-EDv*$1gP)ujP#<#ufLVtA9wICHE+Ya5Oc~C2IBCd}-K^NMKCz6u+$d-zQ~r2lHc$5NxVK?U4X|C`?{VE zz!9Y#tCC6S#;I=y|0TzY@iaC2{ENj^o6b|0HD0`b9heDI6Q6kwd$_AzC~r)S8568y zC?>E$=yCQ;sPxj0-;j6kZD4x1WrJluUa7D#aH_Br3P1J&9cA&IhUG0d-aTfFj!mQs z^|WZtG%J+N#j}zT^K`GT5|T_!S>vZ9Qws-UYW%JTvy~i9xnviPRF_YJf~xo_yYV0y zgOx5RzRx}124D0)`qyc`aI|{Vs88S9pTEnCi!1sM^@5TC@e$uQE4daXuT zr@pDWse#rOs_L-*WtcYR}MX-nr)=$ zf-$JJJ1$`{f90@of7t&T`?&wsTZWf|JeoTE%*VU#GZf`^+%;iX1l!cbjAWJvnsoNG zXVb(<)P(rVBd@k2eYhj2kQ&0I6{C2DFmm-aAvM!y-{;-j z1~INq9Rf-1+e94!Z+o2OUMpi&WsT9I{FVQ^?iFB1{XV&Ra^2K1F+w2Tx!=CgwvHA( z@OZavZv+xkwUj*$)}zfr9f&mc#yw39l31`?TsecA%r_tNTSHGAd;kv36i0D%J72z@ z^`;qAT-l48dO#CkTL2@j$QQUs0FIZq`}LcB0jMs5P9j&eKVTDD_{LXqe8I2JgP9h5 zCm32HFRL&A4SbX0r9Znmz27p2a(snFaEzjB5DZ}-$lVvwEBYUJuukB-D*xC!_djIc zEL37RG$0lYR{dS=7K?>_XFW$?sb}SZ`S!2vyuH62#kajcm3`y?0PJq>ofw!ju^0j0!sF(N*P-Pa z`)IN^T^Qm|q<%167O$|jNCgHFV^rXZpR9Zi;F6gTgXg$t{tA?epP#X1zWp0g2tF%7 zVJt=@T!ruK7rD@^xeDmrQsc}ldK+n%(`a|dI?UFv+8$vJk+o9jlKPt!M4sK$R zHs}06nWh!z;~X4a2ysNXuB44pWtx&*8|CrItY1y+JkD&kK}SOsD(X!7*G1j-d;%)&Sx2HrsaRW2XZ<`y}ZG}6|&YNEe zR2%`)i1Fwv0Q+*6{h&O^+6!S-_`Wj%9G^`JkwWcKmvN@v@eqDuf&LeYWlvUTLN)tG z-m-nCo!9e(Oi?|_?(Sq8LG~eFVc^;-ez=q+ZzIS^OCBAXGha(y+^U1`;beEp^<3PV z`gWonp}V;A0usZ z>f)^l0-tqC2%m=bTqi}dm7V4Ot()G7ekuSxye+GDP~h0U>+U~D?X1O@l?77^JID4e zZr%yxbmPz2QF{PZ7e#{=KiGg7>yqFi20-Y*B09W5s#CG5DcnvMM;!CRmaHzib!o5q zzjd4J!q>p8$DA!P$Iks==#0m^R@=Ep9-Qp2BoGj&DxE}rOeftJ2N&w_2@hIqIuY)s zGbsT#XSLqL$r1Y2`|It311*H2ge3^(*m(;grJQJMK!JbRPuxUqw06?O;kLo52EVC@ zmk+*K5&g&*gNqbIrT>;HluDv*W4ebTb{ZnRW4bz4P15go*0mHyGU?*f{=`!?W&yO zVhvU@S+B5ebG05710BSoCM(bKD%^Tax`&*3L(iN2P_kvPxMiWQ&n0N){ci-z!1+f# zqo;!073i2Fi#U(BY53#I%0jb=%kTz^JgEpd0_Lp2wFEY$_vVU6jy{-dmY8CY+CN*p z7tXwfYxTz1P=o&#+BgdK`B4PzR>DA{vl#A(NI|C2Jj)|ZBQ@L`k_`fx#!`02?t^yj z;Rh!9BI{$Pa)C84&?%L*zapUJ$X`zLMc&jZ`U+ON=GO_#UY8tZsy)u<3LmS_W$Sgq zvDR|*+tIv{lj|m3t%#i2=LO1WONg_~Ou`X@(55&d)f8u5Y4Dr#@E9)pAtHQ@&hv8r z*9bTPN)HfxmQFQfUS`qZU!2Hk{!KLmk{<8m&)Ru$cQc%{nn4Y$^iQIes=cS>GowaV zN8b`+c4%&fONmmF2_rPX%~*H;@~O`etUkeJ#e0k3F)wqd78EI z{uz0IJX4f#N}i=g*Z~WNtG31RO77@g_PO$-F;9hWXv4F;Y)8c(2{UXW-~eOK*RH87 z_Bet}JdK1VvYj9_hxbx#E>;-qe0%4_2z#Q+Kjw}C;$imPTjz^(D_Dk*ju~cGerWc3 z?#I?VDW?r@8*W)@5!yBgGfC>S$+VhR`q_i_lLYAIu|7Xtg~FBd!smPhHK!uk6z?Qy zTOBO=Fx}`YDU9#Ov~NyOq5o4SXsY!kfF*p_+4hh9oYpyI{_{M6bxGmdJ`zn1jNIbCs4 z7|7XkTt^l4yY1H%G~^rJj0ONwqQnASY)A8JC(zGSaw&KwJg^5%qaihGkP|mnhA#CX zeKX@F7RW(zlPd|M$QCXhzz@b~sA7!R1 zjya~Iu{+g%htvKZow_wOeS6?@g<`Qe@Se4gob3yoL*Q|~0;S+kg}tWYHPzET3b?nV zm`ar3I*RwGBbm}#7h0=XtYh{wFaxZn82-Mjwl`J~@qPOCv(be+Vy7sE_x+(0A11@V zuHTF-sZ_ix95+flL1-Ucer6wlw3dY~;_&Rmd&LU|N$l?OfH{|IiK@+>#Qm{;sA#wB zusdXc*+X3NCB63VuORI6*i4l2E)pZqsS|6!X|oL{3pdpzH+`cQ>s^a#&NnV{4M0nF zqzzP#?QOIeND6-Zv5R`5ITgUjDQ48V)K(x#0=n{Iklo9F5)Psb_#d`=wjhn=F;?($ zQM8sAzxru}8E=hQ*J0^f@{Rr&CWKu>U0s|#4BP_Vh+tvf_G0U0{%(NHGE0C~CJ?5P zb6gY5AQna>*D3;EdIf~YEG{eu7-H>mEImtqLev$ZiU+kz#-662znZGeG3#Xvxr-}2 zNt?FS)OQS+If_BPdE#u!Oy6W)P=1tZ5V=*A4HYNz0z^3GCO>opKwamf({Oej zj(J1p6B=2t`HE5DfWNF#nKcyOsW3dncW#P7`<|gm2SuW9|M&-Gp4Iu9>AuskZ4t*A z4K=>=EWOXQy=$gM6xkSvUAK8Zp*p{+4WPYv0=HtU>+VQAa7Dw2V4#B35Ju{yLr(~s z!@>eo)EJ_z;w637085CxnpT~=e=fGVysT4q;h(lY#{lNpdB=9z`%W(>h_ux6?F6^x zg_o9x2-U5uzwEAeHh0;1hn7EcPhoNIIuA-dMaB zP1kFn*ybZJ>4?E)H#Y&EWKa#-r1}>mjxl*5$&yHH3_)o~^&)p8dr)w5iW}pt2H)L) zsW-W$36)noHbK{lSn7BlqDYqYQR9`i{d2z}bg(%5gY0p+uY3`gQ5TW7VZXn8(uFtw zebpi4c8kB4z^HyEj-HsWnkr_g0gfZHIdaZVX45ulY+%lo(}cp6%T>uwRIgt9*`Ag_qf7kY7pA%pPu7ol#x zU3~Z#<)=>HYrl$+j}Zes?ymjYSf`eWggkV{23A#se4*iAxbn{*c7XHfH84-lNJV}t zcxx?jeqtRhT?9OY%1Fg!C{^hv1L!n=V=gPEG8vXpH*I_MDe3=9A+#B-1F)t+Ll&@J-sCGroCed$78Vas`gC;0bUag5Li|e zjgmYDQ3^Ar%OsdHx@eZmPzK9*|o<{m@_9vQhj#tqxDR%509SOUa8 zy(a&bEg!r4i3bnn*q~8mKG1`*i%IM`%^VV(tVwmk2op$+J=fEp!0*N8QakSVdtPJs zAKS&teo!{_?B~${Ke_9G-8!)TiDO*muwh}yP>|^8sdaeFt!SZ%-LIcmi>j^UA6}fr zg5b6m6Is-%(_TY&{=#;KK9LzX8(nS%<4E6Yb96ZN6dp?sJN25^s>6?A{9oxU;CRs% z!!W*!w`k0Z?4n)Dj}i-oE+L#Xx7%KK=gyV(fcJ{kiR0%Kc857T?mIx_c5bWVV#=b(IGDA|MNu}+8qjmf)~l(= z?gnR#qNef_@rH)RX5pt*z6+DD?3`VoXqUpo#)7&G4ZJ+?Wd#x~StwtKXVJl1?IrfW zPLtRLGjMo_|LV=m$LcF8gHF6UVS60c)9v~k#pIh!QpRB|*BP>4zj(ONuCmnRDG9r1U>?%EHTM z;TFoI8$Aysmlm~)RANd1hEwk%?B4y~y&y<Te0QNwYC-G3j^wv|9w&V6%J*Sq%MJ@-sAx6>+;BanJwbks656W1um4po%BrZ%D> zN(ZQdbg00Z{TZV1I~mZXCMUhbCRU8I+|yvl7MZNNmMo3Vrl}O!nm2bBf+n_WoAYlH zQlceB(N)Tu&6v0=d;qDqVP6Hhv^Q2za;M#U{;(@n&9MvTf2S0FE*IrFe;L#`XFVnQ z@_L>lH3qWR6Kd?Wy ztk1`Eas$lf|0%L{U!Z=lm$)r0wtk@%!4T2_ZWq;At3o6w{T+tTlIxA}(~> zO+uOR_h3SC5;yh6`c+naXs;hr;T!$iJ>Whz|H8`|%871>&zl(thOb()Q5BXKToep- zaU&c1{_J1gl<1jj7rpl7$_b9@->c*+vPyUPVD`u%TO9|+8Q>+Kl zFz*z_{F~K~JO!e;m>}QeM&|mgBt+QTO9L00EO4-IXDrWut8M=hf61_FNfc$fI|NacH*}z{K0Jx*!V$D2@7dqM zn2lfGS9jlmPso3B%WyxO=OPNu)CG0Z4x2o_OTSkJ$=sN97oJ*u<`Z47*!f0e#gs%x zF5(rs%OFlWB!*5z7dQs-u#Q-4TM1QPbrB{}lY|YQjIg#0VY`wB7H-X<|3Vww`CkLd z*@C&%F%rA!#!wdGdJhAB{>2r#-jjccpIy`$+Dj%rcvzVea(De2>bqF$>d~Xlyl>A7 zz+LYm^PGhNhn?ulUkYuCc^9aftSC}9iA5V1M?Yk{&(H(i(&NC|n)tGmfEk=OaRdi;PWhrzP{ zrrx+0y}}9*eJ)e`Lg%b&|Fhby1bI^4LOJJjkc!XU(5D}|9rUfn%5?zq{6xgEhwbnY8Z+16a|g_Xo@ zI0k>CTfMUcfnzXNy0B<)?#*o=6%R&&=D5N9AV@`R32Myhau0Uix3xYvu$F%(VUu*Vx{i^%D^Pm__`#!( zoyOo|RaMx1rhDthIXQd$qi@?ol+(ul#k8`|O&2G6Fnq=8!#1TH0I8M%rbtsIF(Nk* zw|sV!MJfSfSC{;g#?;QTn13NJsXL0C;}?rVSkDQHr$y6|XUO7&ceg{uc&nJ_l7SM^ zq{(uu_|~piG0ynY{)`WE`z^J;$`ML=$C8au&Zn^NjMgq9)DE|h2Z;zZ7b_}hSCwz< zo%@u7DQ6>gC7dQ{@|3v<2Q)!+OgbkP!<6FR2zkafDSMD`+L;e%VCHJTzlO_BNU9#s zz`I?vX4;`q;_T=$d0lZSmTQs-4E$;30l`%IE&bkzI@0Won>u3(2T@t@!g;u4U-|+# z+736ZyP!4fZ+Nyx`K*#AK{vHPMXE#iY0V9`6%GTz%e6O2JOj?bek9w4nT*tDmPjfi z1H^E{A17X2X^%;$w+Y=zt!`FR$w^Zzkz6HYhcJ^^{4DFd+R?jMkx=+@lK2(P{?3?D zHMP@c)K%@|Q~-*$4twjOOUsBLb*(R%Man|o{-6uwc<#%Z5qy2=_PY?fT($LW}rjI24SL|DNuL6R%-%zW7U>EUZLP0gVWm;>FwCklVQnqK&n1WN>G~b0qwJgm2=Cl#jGv2JdK)J>>ZBj4>e5(1WGA zNl6Y)u=31677QGnC%Lovw{MGd43M0Tjctk9NLqkcn!hs*E70YXCPIk`t7<1s8T+;8 zaFlNP`IPZf$Pfp*NcZT@KRcn{u36ZMH@A|+hFFcjgKyI;;pIxtgUKQ`G*?DeF1$jO z!Kg4RJ1|am$Tp>LkWQC4YAk?#zTzd=uA{9@xqVJB0i0fLthlqG4f7w@zIY6`R9=Vd ziKKmzh@fpD+-3G#W}Ra4_nUOI zwoHb_?U-q0cP7P@h94UXG1t2PF-g5KWZEttJ2-9QSDdUwVd+!|pQQyrB`iaW*F;A7hU^tkU6+ejt z0YRn5EcFcA@;XLEGOafJUm$>GnK-QECC;DpCof5p?lvbFGlrZbbespxpmk?8jU19g zAfg;DO%gVT&2)ca732;M1VYgfwQTap=x<;n&RwGnlJnAI&e=V0eB}lbF6KvkXI?Ww zaVD8Dqsb_N_j>FKEy4q~Hz^%b8@`_oj3j z&(}liiKzEh1S3F+(lf54bKIZNNpgytlxfA=-qL`du}+y-ylqWnEdg|x{zTp<9Bqhu zWmY;F9XqghASQ)+U??~w54*keFq2pH z^!gfK&GndeO?u7hL}p#~ym@Zf`q(NLJtk{wX}>irbVGOC+th&3#X!Wtl<&cknED&* zy}^|?MqXqZQ#f%VOw4c@lwjq&)4?6hQ*8dm;&17X#=7TuWtEkmcWN*c8d}(C4HMcj z7ONdIPEN!rGP&6td)4gjwy@pC{+?T_%LV7qLa4? zazH1lDhj;jsPoA-;eo=TOzfu$Xj4ZRZIU|j3Ba(MegVv9$;sO!m#S`eDltHt(y^PI zaW1zCJpD^Tp}^prLk78^R?+<~Fy$C7Dh(~oH2P>sHt`!Zqc}iRaNsRBdfRCl`H^!< zAQbWq@CqmfAj3chE3aD3yuNUDNyV~s(>bq}1)|yPiXmSY9aSNC3+@su+W}iGfxU*X z6NVKTtcjTg{L^>uL7?6}-dDLI-D+;{oUi)JH)L^v@zDheRFxpvY}{#fkv3Q;6g-to z(T+Eec?kO&PzG|>{H)R+UFEd9=P3m%t0=%`({Spt+0G1;MO4)a)UW|rJ1sA?3LHsv z3R5g>kZy()ZlFj=&U+UI$Z5f8TlQ&?^@Y2!Wp7mY)E3kB1YKkgO{<`7{J4dwwhfy4 zBRX1YePm>GC{)s4ysHWg;NtQ)6T!s*%!~zssd;(-Aem8(a5(K zVAxpfZK}f2p@V#g_sQh=(cBVsADTWEPz&f&O!!c-ojgiiLex`3f+K9_tz-{SIy&ON zPJiOq3-&4PS677y9HBZ$&yzFI7Iwr|N`0)pZX*_G<6mNV;IU%9GD zF!0JNS7TCr{%l_b6IoGWs#7ewtdzn6pD;Av7u(2E`i}1RB#Vb*!-G;~JeC5NF`ODI zK?ZmW%dw30r}WA#T%Ap3q0PX3WDy;A=iWCl+Fo1=BnG)tcDdxv^PlyTmVc@F;-dMl z*|{rG2rxAg(O8RL{84Cd0MqXx6tp^@$_M(LbE?d(2!-ha|84mt$=J6-MnPpD6jL7G z*-m^0u?jteO=vW~)3zZGb=BV368L@C8Fjv)K7hjnqR>Thaa54+lON- zm`eXw*`bBHV}Y^0a^*Zb7sR_Cw3bp^63(F*4reg4tiqz9{?ZY3Bb61O0EUKVAYtAA z;G^#V#L`b?3mDq|`zA1*?4fgB`N$r!?bjoGqo+*6!$+Fs=~E_-9f{GfzslvnF6*x5 z-6IGFzNmi`m&E2@5)A=717!T~I}{`)5SB8LEBn)B(w^ibZg3VajKFgbvg#69$F zNw#_443>gvjO7HvR|>%XBGL5X?_k;Y7B997Iv*z)HM#bCr{_(ZI36=|52$@G=@-7w zvm}`>I~t=hiMGoQwu_QOusxaFr+YrKb6%#c17I}ak@5klib_kZSyunTV3fih4iwnr z&5vFKD7xoKVn?vKl?T2iPF)D(ooE^IrQfuT^bGG%R|Q1JDC|7BQ$|!)5d=Xch3NmS z#}xi3!1H4Am=6UN42BS+j)wI8Lt`xMKeAjY+)SNb*rBbC3W#s4mKY|zC z_6rhrb;~=;qDm!S{^N?E$!hJdx^_LjmCZNO++Jm1rZQMwCIj<3NqcJ#fF~z6{>0%* z4^A^LGb=0qyCR5i1<`v;A(;C^kI0Fku$MsN+eDakC~6L;M*rxf`e{tDDYpSDln2h6 z&D#sU6)fvPI`yw4CQPW-+sL2~&Xerw_a7v`$6=G-V~>+(I#iU&Gd%~(HfIXRKc_x` zAj-1DkYZkF{aK_#$3V>VFBUd?7ARoVya|SXx{4wdz0Y#_lhce!5hH6|DfXkmiYrzV zDf2YdO{x)O2&LGy=*e9=6A9xWvHVN;Gu|SX$}T6Nc6d-Gp*A^J6dz*Hm^Gqxs;RG0 zY-&Ytu>KjYAc)5QC5n{gE+@wfm{qe&cH{Y-e^IFPNNkYmW=yC8*~9`8aUo_b8T$u7 zTphm|;Rl3`ZTKQeH|4y0VX#znAxfJTucNUa(b!Ifj>*S$XL^f~F(n6?;}pqB;f;32 zhEQj~*eY)v?)ObnQKy}^da12~W`?+bx_cWKw`+miAB+u}JY!mQw2BfX23%=G2Hq+} z)sm(%OCt#T&-y#$ti2il!4^fEVdMoPxAV4 zzlZMz;HwyaH)Xc={Q<_qBad13uSdZkcC}JT03!rS6nUijXVSs5YEm-E99C5`9vJU5 z;!(s&fr|fLNf7#bUkBDhl1;f)*MmVNA$0jZ06in>F4DFIq z>~Os#rDr!({CE{M_qA68WZtAxNJZ8%>HXRGCU6xA7>$ht&y(X6`6yH^iND;*n)Gn^ zz%gHZsh4~ariKe;JSf`%#!Xdx3Z1eGh6rzI@M24GrEEpK5&cQqW-cJOuNkcHQIkeW z8da8zzHJw14XOh1u#l-;>@w15sNaP$Q@Gja#rHz4cXp*>=WJa~jRzD-{yVfmyP* zBg3ZZ#N2QVn};iDu)-*DZCoCAqzW%h9qGiref@o`aUWh1R34dXRq68FoMxOi@IoLA z4dWQsgQ8D1p_%mymrVW35!)0o!m%HnIBAq}k)z@kf6wE$%nl>5GZ z^EgTrU@T;nQ$aE+ma&I5{uKJM+4wV08#?6?oG3e*DOs>no_vZjVYVBtnmwEmb@%PF zg;$A?%NoWA6*+2+t~4Y))ZwXZ>_lL2AV`VzMin|nhE;#~W6eH86PTJw?J-3kCqBU8 zy5)}qHynLTCFyphM<)S;^|svi<%hmTc`hnhR@YVxw34%~K3|baS*@gl#GQeqP<-EZ zBut)yK&I8q%`_%G)iNb^t-7|nzq>pZ zB}0T*HH_&1^I{NBsWF4T6~5^n+E=V3RdE#7xj`Q%nvbfY$H~NG>$0Y_6JW}XwO)B5 zod1?uq#MwkJ}q))NaQGiv8w*n=TZQxDtZ@#E=scp>Xb{KBu|@U+%b1ZSwZ%?Iv^vu zkePd9Lj>nhd6(g)E{A4+vX@Et9nCp))KGM{II@D@;8D$wP7PuLkse_*wn;P zp6ej4C)WsPs&%Ob4q`Y}eohlEKQ=%p#Z({%YLNr(LVBi-Pf`qw zU@&rJaL2j@sVolSZU_r$xed=q^*0kdj4FU83xi1`@5^)71f=$m%HU|{=Z&5!Vb>G8 zi9$Zri(S&(v`hPKb&*csI(`;NhtFc*l-}c@dV~4Q zM2aa;s4#s%nYk<;n|Qyij33xc4oNKj*kGQOK&-mfnw=Kb-F* z%W-y+*~IQrm=Dqyn|Nm|q5W4euvhmaf<@m(dKR#mgasbeEBVL-D!c_bM#bEsWzNlo z$*u9oo0Qp8Elyv%V+%yhsbo(!(Z%nennAbONE1g+FakoG)J)fs=nDN`d}9rwZF+ zWL;*9y>I2yLk)F8Q&G|y2sQDPZ2O?BPJ}(@uw%55KhU`Wrp`z%3Rl0!tehGi;$80Q zoa%krvxia67+4^mouQDkgle)Wg8Ch59)99_{`bkE21ijVjeu1m7oEi)sxY)9${$=$ z|JK=OoibZ$FMC1r5XN8o5!KLGsPX}KyB?-oqip+K7){J&8@AOkxezLt7tE=tJEcfg zSxMz;>*4S+-NKT(CM-s`GAw$BtL0|=2lR^XgzJX5ayf4+`^-{Sinl|B?qc1P=hO+s z=|Z<$9G5!hk_zGQa(GbcYNBCKLX=)DLey!dBoAIG2&f)`;EZC{RP8Q3ONmoYu@^I} z0h5;YgCnG$swg=x`}2R}8u1ORAWUbfhjQl3XXSL}td?dfTi&m;p0()~7B)5ZShM$> z<>z{4m_MbKYYa-MVHVshmcM`;wk$VV92M7jGgalyd9<5eRfmuZG=26*saGX03i81y zR>6%~Lm*UNH44mzgVo+JY@%9p%whR}^rKG01mim^&6XOL_o}nbswXcNvHCoG*ea5H zMv1tCg(zmoK3P&^j_K+1=pid#+{Nyoih#+c%oR_CfcqA>XQSo^PW3+PtgNB0Vqiv# zaz=?LlaM1>j9JP|QAp=!j_hQQ)7L(?dQBRyk R@3Fi^Lnwcq5`X&k{{tbG4sQSe literal 0 HcmV?d00001 From e0ec18566bf74e6dfaca67d7de79b745d712d269 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Wed, 2 Aug 2017 09:59:57 +0300 Subject: [PATCH 22/35] Update PayPal badge (#74) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f31756f..5e2e206 100755 --- a/README.md +++ b/README.md @@ -136,5 +136,5 @@ Just fork and do a pull request (; [codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Seed-Project?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Seed-Project&utm_campaign=Badge_Grade [maintenance-image]: https://img.shields.io/maintenance/yes/2017.svg [maintenance-url]: https://github.com/nirgn975 -[donate-image]: https://img.shields.io/badge/Donate-PayPal-lightgrey.svg +[donate-image]: https://img.shields.io/badge/PayPal-Donate-lightgrey.svg [donate-url]: https://www.paypal.me/nirgn/2 From f514bccefee94e1357728d189c140ab9eb4d36ff Mon Sep 17 00:00:00 2001 From: nirgn975 Date: Thu, 10 Aug 2017 00:44:03 +0300 Subject: [PATCH 23/35] Fix a typo in README.md file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5e2e206..1e54867 100755 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ All the parts are in a separate [Docker](https://www.docker.com/) containers and ## Installation -Automatic installation of the project with docker, for development. +Automatic installation of the project with docker. 1. In `client` directory run `docker build -t client .` to build the Docker image. 2. In `server` directory run `docker build -t server .` to build the Docker image. From 83782aae59d448baddcdebc44a0f9dd8f1018dc7 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 12 Aug 2017 08:39:33 +0300 Subject: [PATCH 24/35] Create a Code of Conduct document --- CODE_OF_CONDUCT.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..2de3dfe --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at nir@galon.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ From 2b4d25ff24f431ce1243c02e1b4e59a1d84625ab Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Sat, 19 Aug 2017 17:54:23 +0300 Subject: [PATCH 25/35] Update ngrx (#75) * Upgrade angular-cli and ngrx versions * Fix new ngrx/store and ngrx/effects * Fix tests --- .travis.yml | 2 +- client/.angular-cli.json | 4 +- client/.gitignore | 1 + client/e2e/app.e2e-spec.ts | 6 +- client/e2e/app.po.ts | 2 +- client/karma.conf.js | 10 +- client/package.json | 45 +++--- client/src/app/app-routing.module.ts | 10 +- client/src/app/app.module.ts | 18 ++- .../components/users/users.component.spec.ts | 4 +- .../app/components/users/users.component.ts | 2 +- client/src/app/effects/user.spec.ts | 81 ++++++---- client/src/app/effects/user.ts | 7 +- client/src/app/models/user.ts | 7 + client/src/app/reducers/index.ts | 86 +++------- client/src/app/reducers/user.spec.ts | 152 ++++++++++++------ client/src/app/reducers/user.ts | 24 ++- client/src/app/services/user.service.spec.ts | 21 ++- client/src/app/services/user.service.ts | 3 +- client/src/service-worker.js | 0 client/sw-precache-config.js | 11 -- client/tsconfig.json | 2 +- server/config/local_settings.template | 2 +- server/requirements.txt | 2 +- 24 files changed, 275 insertions(+), 227 deletions(-) delete mode 100644 client/src/service-worker.js delete mode 100644 client/sw-precache-config.js diff --git a/.travis.yml b/.travis.yml index 86c6bd6..a344e4d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,7 @@ script: # Client - cd ../client && npm run lint - npm run test - - npm run build -- --prod + - npm run build - cd dist && ws --port 4200& - npm run e2e diff --git a/client/.angular-cli.json b/client/.angular-cli.json index 1d240cc..e46f18c 100644 --- a/client/.angular-cli.json +++ b/client/.angular-cli.json @@ -18,6 +18,7 @@ "tsconfig": "tsconfig.app.json", "testTsconfig": "tsconfig.spec.json", "prefix": "app", + "serviceWorker": true, "styles": [ "styles.scss" ], @@ -55,6 +56,7 @@ }, "defaults": { "styleExt": "scss", - "component": {} + "component": { + } } } diff --git a/client/.gitignore b/client/.gitignore index 54bfd20..6b66814 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -32,6 +32,7 @@ npm-debug.log testem.log /typings +yarn-error.log # e2e /e2e/*.js diff --git a/client/e2e/app.e2e-spec.ts b/client/e2e/app.e2e-spec.ts index 7547b08..a259b1f 100644 --- a/client/e2e/app.e2e-spec.ts +++ b/client/e2e/app.e2e-spec.ts @@ -1,9 +1,9 @@ -import { ClientPage } from './app.po'; +import { AppPage } from './app.po'; describe('client App', () => { - let page: ClientPage; + let page: AppPage; beforeEach(() => { - page = new ClientPage(); + page = new AppPage(); }); }); diff --git a/client/e2e/app.po.ts b/client/e2e/app.po.ts index f8950ce..e5d69de 100644 --- a/client/e2e/app.po.ts +++ b/client/e2e/app.po.ts @@ -1,6 +1,6 @@ import { browser, by, element } from 'protractor'; -export class ClientPage { +export class AppPage { navigateTo() { return browser.get('/'); } diff --git a/client/karma.conf.js b/client/karma.conf.js index 1e161fd..af139fa 100644 --- a/client/karma.conf.js +++ b/client/karma.conf.js @@ -1,5 +1,5 @@ // Karma configuration file, see link for more information -// https://karma-runner.github.io/0.13/config/configuration-file.html +// https://karma-runner.github.io/1.0/config/configuration-file.html module.exports = function (config) { config.set({ @@ -12,14 +12,6 @@ module.exports = function (config) { require('karma-coverage-istanbul-reporter'), require('@angular/cli/plugins/karma') ], - files: [{ - pattern: './node_modules/@angular/material/prebuilt-themes/indigo-pink.css', - included: true, - watched: true - }, { - pattern: './src/test.ts', - watched: false - }], client:{ clearContext: false // leave Jasmine Spec Runner output visible in browser }, diff --git a/client/package.json b/client/package.json index 3430573..f2eb68a 100644 --- a/client/package.json +++ b/client/package.json @@ -4,45 +4,45 @@ "license": "ISC", "scripts": { "ng": "ng", - "start": "ng serve --host=0.0.0.0 --proxy-config proxy.conf.json", - "build": "ng build", + "start": "ng serve --proxy-config proxy.conf.json --open", + "build": "ng build --prod --aot --build-optimizer", "test": "ng test --single-run --code-coverage", "lint": "ng lint", - "e2e": "ng e2e", - "sw": "sw-precache --root=dist --config=sw-precache-config.js" + "e2e": "ng e2e" }, "private": false, "dependencies": { - "@angular/animations": "^4.0.0", - "@angular/common": "^4.0.0", - "@angular/compiler": "^4.0.0", - "@angular/core": "^4.0.0", - "@angular/forms": "^4.0.0", - "@angular/http": "^4.0.0", + "@angular/animations": "^4.2.4", + "@angular/common": "^4.2.4", + "@angular/compiler": "^4.2.4", + "@angular/core": "^4.2.4", + "@angular/forms": "^4.2.4", + "@angular/http": "^4.2.4", "@angular/material": "^2.0.0-beta.8", - "@angular/platform-browser": "^4.0.0", - "@angular/platform-browser-dynamic": "^4.0.0", - "@angular/router": "^4.0.0", + "@angular/platform-browser": "^4.2.4", + "@angular/platform-browser-dynamic": "^4.2.4", + "@angular/router": "^4.2.4", + "@angular/service-worker": "^1.0.0-beta.16", "@ngrx/core": "^1.2.0", - "@ngrx/effects": "^2.0.4", - "@ngrx/store": "^2.2.3", + "@ngrx/effects": "^4.0.5", + "@ngrx/store": "^4.0.3", "core-js": "^2.4.1", "hammerjs": "^2.0.8", "reselect": "^3.0.1", - "rxjs": "^5.4.1", + "rxjs": "^5.4.2", "zone.js": "^0.8.14" }, "devDependencies": { "@angular/cdk": "^2.0.0-beta.8", - "@angular/cli": "1.2.6", - "@angular/compiler-cli": "^4.0.0", - "@angular/language-service": "^4.0.0", - "@ngrx/store-devtools": "^3.2.4", + "@angular/cli": "1.3.1", + "@angular/compiler-cli": "^4.2.4", + "@angular/language-service": "^4.2.4", + "@ngrx/store-devtools": "^4.0.0", "@types/hammerjs": "^2.0.34", "@types/jasmine": "~2.5.53", "@types/jasminewd2": "~2.0.2", "@types/node": "~6.0.60", - "codelyzer": "~3.0.1", + "codelyzer": "~3.1.1", "jasmine-core": "~2.6.2", "jasmine-spec-reporter": "~4.1.0", "karma": "~1.7.0", @@ -53,8 +53,7 @@ "karma-jasmine-html-reporter": "^0.2.2", "ngrx-store-freeze": "^0.1.9", "protractor": "~5.1.2", - "sw-precache": "^5.2.0", - "ts-node": "~3.0.4", + "ts-node": "~3.2.0", "tslint": "~5.3.2", "typescript": "~2.3.3" } diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index ccc2962..cfa6c63 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -1,6 +1,5 @@ - import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; +import { Routes, RouterModule } from '@angular/router'; import { UsersComponent } from './components/users/users.component'; @@ -9,9 +8,8 @@ const routes: Routes = [ { path: 'users', component: UsersComponent }, ]; - @NgModule({ - imports: [ RouterModule.forRoot(routes) ], - exports: [ RouterModule ] + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] }) -export class AppRoutingModule {} +export class AppRoutingModule { } diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 6a26bd4..a2b7565 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -3,13 +3,15 @@ import 'hammerjs'; import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { HttpModule } from '@angular/http'; + +import { MaterialModule } from '@angular/material'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; -import { MaterialModule } from '@angular/material'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { reducer } from './reducers'; +import { reducers } from './reducers'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -19,6 +21,8 @@ import { UserEffects } from './effects/user'; import { UserService } from './services/user.service'; +import { environment } from '../environments/environment'; + @NgModule({ declarations: [ AppComponent, @@ -30,9 +34,11 @@ import { UserService } from './services/user.service'; AppRoutingModule, MaterialModule, BrowserAnimationsModule, - StoreModule.provideStore(reducer), - StoreDevtoolsModule.instrumentOnlyWithExtension(), - EffectsModule.run(UserEffects), + StoreModule.forRoot(reducers), + !environment.production ? StoreDevtoolsModule.instrument() : [], + EffectsModule.forRoot([ + UserEffects, + ]), ], providers: [ UserService, diff --git a/client/src/app/components/users/users.component.spec.ts b/client/src/app/components/users/users.component.spec.ts index 8271221..08a794e 100644 --- a/client/src/app/components/users/users.component.spec.ts +++ b/client/src/app/components/users/users.component.spec.ts @@ -5,7 +5,7 @@ import { By } from '@angular/platform-browser'; import { DebugElement } from '@angular/core'; import { Observable } from 'rxjs/Observable'; import { MaterialModule } from '@angular/material'; -import { reducer } from '../../reducers'; +import { reducers } from '../../reducers'; import { StoreModule } from '@ngrx/store'; import 'rxjs/add/observable/of'; @@ -32,7 +32,7 @@ describe('UsersComponent', () => { TestBed.configureTestingModule({ imports: [ MaterialModule, - StoreModule.provideStore(reducer) + StoreModule.forRoot(reducers), ], declarations: [ UsersComponent ], schemas: [ NO_ERRORS_SCHEMA ] diff --git a/client/src/app/components/users/users.component.ts b/client/src/app/components/users/users.component.ts index 637dec2..b1c10d5 100644 --- a/client/src/app/components/users/users.component.ts +++ b/client/src/app/components/users/users.component.ts @@ -17,7 +17,7 @@ export class UsersComponent implements OnInit { constructor( private store: Store, ) { - this.user$ = store.select(fromRoot.getUserState); + this.user$ = store.select(fromRoot.getUsersEntities); } ngOnInit() { diff --git a/client/src/app/effects/user.spec.ts b/client/src/app/effects/user.spec.ts index 0ec4356..9624283 100644 --- a/client/src/app/effects/user.spec.ts +++ b/client/src/app/effects/user.spec.ts @@ -1,45 +1,72 @@ -import { TestBed, async, inject } from '@angular/core/testing'; -import { EffectsTestingModule, EffectsRunner } from '@ngrx/effects/testing'; +import { TestBed, inject } from '@angular/core/testing'; +import { provideMockActions } from '@ngrx/effects/testing'; +import { ReplaySubject } from 'rxjs/ReplaySubject'; +import { Observable } from 'rxjs/Observable'; + +import { Http, BaseRequestOptions } from '@angular/http'; +import { MockBackend } from '@angular/http/testing'; import { UserEffects } from './user'; -import { UserService } from '../services/user.service'; +import { User } from '../models/user'; import * as userAction from '../actions/user'; +import { UserService } from '../services/user.service'; -describe('UsersEffects', () => { - const userServiceStub = {}; - let runner: EffectsRunner; - let userEffects: UserEffects; +describe('UserEffects', () => { + let effects: UserEffects; + const actions: Observable = Observable.of(''); beforeEach(() => { TestBed.configureTestingModule({ - imports: [ - EffectsTestingModule, - ], providers: [ - { provide: UserService, useValue: userServiceStub }, UserEffects, - ] + provideMockActions(() => actions), + // other providers + UserService, + { + provide: Http, + useFactory: (mockBackend, options) => { + return new Http(mockBackend, options); + }, + deps: [MockBackend, BaseRequestOptions] + }, + MockBackend, + BaseRequestOptions, + ], }); - }); - beforeEach(inject([ - EffectsRunner, UserEffects - ], - (_runner, _userEffects) => { - runner = _runner; - userEffects = _userEffects; - } - )); + effects = TestBed.get(UserEffects); + }); - it('should create the service', inject([UserEffects], (service: UserEffects) => { + it('should create the effects', inject([UserService], (service: UserService) => { expect(service).toBeTruthy(); })); - it('should return a LOAD_USER_SUCCESS action after LOAD_USER', () => { - runner.queue({ type: 'LOAD_USER' }); + it('loadQuarters$ should work', () => { + const user1 = { + url: 'www.nirgn.com', + username: 'nirgn', + email: 'nirgn@example.com', + groups: [ + 'admin' + ], + } as User; + const user2 = { + url: 'www.adisaar.com', + username: 'adisaar', + email: 'adisaar@example.com', + groups: [ + 'user' + ] + } as User; + const users = [user1, user2]; + + const action = new userAction.LoadUserAction(); + const completion = new userAction.LoadUserSuccessAction(users); + const someAction = new ReplaySubject(1); + someAction.next(action); - userEffects.loadUser$.subscribe(result => { - expect(result).toEqual({ type: 'LOAD_USER_SUCCESS' }); - }); + effects.loadUser$.subscribe(result => { + expect(result).toBe(completion); + }); }); }); diff --git a/client/src/app/effects/user.ts b/client/src/app/effects/user.ts index 8e71811..67bc190 100644 --- a/client/src/app/effects/user.ts +++ b/client/src/app/effects/user.ts @@ -17,7 +17,8 @@ export class UserEffects { @Effect() loadUser$: Observable= this.actions$ .ofType(user.LOAD_USER) - .switchMap(() => this.userService.getUsers()) - .map(users => new user.LoadUserSuccessAction(users)); - + .switchMap(_ => this.userService.getUsers() + .map(users => new user.LoadUserSuccessAction(users)) + // .catch(error => Observable.of(getPostsFail(error))) + ); } diff --git a/client/src/app/models/user.ts b/client/src/app/models/user.ts index bc9ac34..042ec22 100644 --- a/client/src/app/models/user.ts +++ b/client/src/app/models/user.ts @@ -4,3 +4,10 @@ export interface User { email: string; groups: Array; } + +export interface UserResponse { + count: number; + next: string | null; + previous: string | null; + results: User[]; +} diff --git a/client/src/app/reducers/index.ts b/client/src/app/reducers/index.ts index 22558fd..01e9635 100644 --- a/client/src/app/reducers/index.ts +++ b/client/src/app/reducers/index.ts @@ -1,89 +1,43 @@ -import { createSelector } from 'reselect'; -import { ActionReducer } from '@ngrx/store'; +import { + ActionReducerMap, + createSelector, + createFeatureSelector, + ActionReducer, +} from '@ngrx/store'; import { environment } from '../../environments/environment'; -/** - * The compose function is one of our most handy tools. In basic terms, you give - * it any number of functions and it returns a function. This new function - * takes a value and chains it through every composed function, returning - * the output. - * - * More: https://drboolean.gitbooks.io/mostly-adequate-guide/content/ch5.html - */ -import { compose } from '@ngrx/core/compose'; - -/** - * storeFreeze prevents state from being mutated. When mutation occurs, an - * exception will be thrown. This is useful during development mode to - * ensure that none of the reducers accidentally mutates the state. - */ -import { storeFreeze } from 'ngrx-store-freeze'; - -/** - * combineReducers is another useful metareducer that takes a map of reducer - * functions and creates a new reducer that stores the gathers the values - * of each reducer and stores them using the reducer's key. Think of it - * almost like a database, where every reducer is a table in the db. - * - * More: https://egghead.io/lessons/javascript-redux-implementing-combinereducers-from-scratch - */ -import { combineReducers } from '@ngrx/store'; - - /** * Every reducer module's default export is the reducer function itself. In * addition, each module should export a type or interface that describes * the state of the reducer plus any selector functions. The `* as` * notation packages up all of the exports into a single object. */ -import * as fromUser from './user'; +import * as fromUser from './user'; /** * As mentioned, we treat each reducer like a table in a database. This means * our top level state interface is just a map of keys to inner state types. */ export interface State { - user: fromUser.State; + users: fromUser.State; } - /** - * Because metareducers take a reducer function and return a new reducer, - * we can use our compose helper to chain them together. Here we are - * using combineReducers to make our top level reducer, and then - * wrapping that in storeLogger. Remember that compose applies - * the result from right to left. + * Our state is composed of a map of action reducer functions. + * These reducer functions are called with each dispatched action + * and the current or initial state and return a new immutable state. */ -const reducers = { - user: fromUser.reducer, +export const reducers: ActionReducerMap = { + users: fromUser.reducer, }; -const developmentReducer: ActionReducer = compose(storeFreeze, combineReducers)(reducers); -const productionReducer: ActionReducer = combineReducers(reducers); - -export function reducer(state: any, action: any) { - if (environment.production) { - return productionReducer(state, action); - } else { - return developmentReducer(state, action); - } -} - - /** - * A selector function is a map function factory. We pass it parameters and it - * returns a function that maps from the larger state tree into a smaller - * piece of state. This selector simply selects the `books` state. - * - * Selectors are used with the `select` operator. - * - * ```ts - * class MyComponent { - * constructor(state$: Observable) { - * this.booksState$ = state$.select(getBooksState); - * } - * } - * ``` + * Layout Reducers */ -export const getUserState = (state: State) => state.user; +export const getUsersState = createFeatureSelector('users'); + +export const getUsersEntities = createSelector( + getUsersState, + fromUser.getEntities +); diff --git a/client/src/app/reducers/user.spec.ts b/client/src/app/reducers/user.spec.ts index 4cb17be..207ae03 100644 --- a/client/src/app/reducers/user.spec.ts +++ b/client/src/app/reducers/user.spec.ts @@ -1,58 +1,114 @@ -import { reducer } from './index'; +import { reducer } from './user'; +import * as fromUsers from './user'; +import { + LoadUserAction, + LoadUserSuccessAction, +} from '../actions/user'; +import { User } from '../models/user'; -describe('reducers', () => { - it('should handle "Load User" actions', () => { - let state; - state = reducer({ - user: [{ - url: '', - username: '', - email: '', - groups: [] - }]}, {type: '[User] Load User'}); - expect(state).toEqual({ - user: [{ - url: '', - username: '', - email: '', - groups: [] - }] +describe('UsersReducer', () => { + describe('undefined action', () => { + it('should return the default state', () => { + const action = {} as any; + + const result = reducer(undefined, action); + expect(result).toEqual(fromUsers.initialState); }); }); - it('should handle "Load User Success" actions', () => { - let state; - state = reducer({ - user: [{ + describe('LOAD_USER & LOAD_USER_SUCCESS', () => { + function noExistingUsers(action: any) { + const noUser = { url: '', username: '', email: '', - groups: [] - }] - }, { - payload: [{ - url: 'http://localhost:4200/api/users/2/', - username: 'nir', - email: '', - groups: [] - }, { - url: 'http://localhost:4200/api/users/1/', - username: 'admin', - email: 'admin@example.com', - groups: [] - }], type: '[User] Load User Success'}); - expect(state).toEqual({ - user: [{ - url: 'http://localhost:4200/api/users/2/', - username: 'nir', - email: '', - groups: [] - }, { - url: 'http://localhost:4200/api/users/1/', - username: 'admin', - email: 'admin@example.com', - groups: [] - }] + groups: [], + } as User; + const createAction = new action([noUser]); + + const expectedResult = { + entities: [noUser], + }; + + const result = reducer(fromUsers.initialState, createAction); + expect(result).toEqual(expectedResult); + } + + function existingUsers(action: any) { + const user1 = { + url: 'www.nirgn.com', + username: 'nirgn', + email: 'nirgn@example.com', + groups: [ + 'admin' + ], + } as User; + const user2 = { + url: 'www.adisaar.com', + username: 'adisaar', + email: 'adisaar@example.com', + groups: [ + 'user' + ] + } as User; + const initialState = { + entities: [user1, user2], + } as any; + + // should replace existing users + const user3 = { + url: 'www.avigalon.com', + username: 'avigalon', + email: 'avigalon@example.com', + groups: [ + 'user' + ] + } as User; + const createAction = new action([user3]); + + const expectedResult = { + entities: [user3] + }; + + const result = reducer(initialState, createAction); + expect(result).toEqual(expectedResult); + } + + it('should add all users in the payload when none exist', () => { + noExistingUsers(LoadUserAction); + }); + + it('should add only new users when users already exist', () => { + existingUsers(LoadUserSuccessAction); + }); + }); + + describe('Selections', () => { + const user1 = { + url: 'www.nirgn.com', + username: 'nirgn', + email: 'nirgn@example.com', + groups: [ + 'admin' + ], + } as User; + const user2 = { + url: 'www.adisaar.com', + username: 'adisaar', + email: 'adisaar@example.com', + groups: [ + 'user' + ] + } as User; + const state: fromUsers.State = { + entities: [user1, user2], + }; + + describe('getEntities', () => { + it('should return entities', () => { + const result = fromUsers.getEntities(state); + expect(result).toBe(state.entities); + }); }); }); }); diff --git a/client/src/app/reducers/user.ts b/client/src/app/reducers/user.ts index 2458e4a..b87b6d2 100644 --- a/client/src/app/reducers/user.ts +++ b/client/src/app/reducers/user.ts @@ -1,14 +1,18 @@ import { User } from '../models/user'; import * as user from '../actions/user'; -export type State = User[]; +export interface State { + entities: User[]; +} -const initialState: State = [{ - url: '', - username: '', - email: '', - groups: [], -}]; +export const initialState: State = { + entities: [{ + url: '', + username: '', + email: '', + groups: [], + }], +}; export function reducer(state = initialState, action: user.Actions): State { switch (action.type) { @@ -17,7 +21,9 @@ export function reducer(state = initialState, action: user.Actions): State { } case user.LOAD_USER_SUCCESS: { - return action.payload; + const newEntities = { entities: action.payload }; + + return Object.assign({}, state, newEntities); } default: { @@ -25,3 +31,5 @@ export function reducer(state = initialState, action: user.Actions): State { } } } + +export const getEntities = (state: State) => state.entities; diff --git a/client/src/app/services/user.service.spec.ts b/client/src/app/services/user.service.spec.ts index b3d236e..933d0b0 100644 --- a/client/src/app/services/user.service.spec.ts +++ b/client/src/app/services/user.service.spec.ts @@ -1,11 +1,11 @@ -/* tslint:disable:no-unused-variable */ - import { TestBed, async, inject } from '@angular/core/testing'; -import { UserService } from './user.service'; import { HttpModule, Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http'; import { MockBackend } from '@angular/http/testing'; -describe('TransactionService', () => { +import { UserResponse, User } from '../models/user'; +import { UserService } from './user.service'; + +describe('UserService', () => { beforeEach(() => { TestBed.configureTestingModule({ imports: [HttpModule], @@ -30,17 +30,24 @@ describe('TransactionService', () => { it('should GET all the users', inject([UserService, MockBackend], (service: UserService, mockBackend: MockBackend) => { - const mockResponse = [{ + const user1 = { 'url': 'http://localhost:8000/api/users/2/', 'username': 'nir', 'email': '', 'groups': [] - }, { + } as User; + const user2 = { 'url': 'http://localhost:8000/api/users/1/', 'username': 'admin', 'email': 'admin@example.com', 'groups': [] - }]; + } as User; + const mockResponse: UserResponse = { + count: 2, + next: null, + previous: null, + results: [user1, user2], + }; mockBackend.connections.subscribe((connection) => { connection.mockRespond(new Response(new ResponseOptions({ diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts index a1f617a..260e5c2 100644 --- a/client/src/app/services/user.service.ts +++ b/client/src/app/services/user.service.ts @@ -3,7 +3,7 @@ import { Http, Response, Headers, RequestOptions } from '@angular/http'; import { Observable } from 'rxjs/Rx'; import { environment } from '../../environments/environment'; -import { User } from '../models/user'; +import { UserResponse, User } from '../models/user'; @Injectable() export class UserService { @@ -23,6 +23,7 @@ export class UserService { return this.http.get(`${environment.server}/api/users`, options) .map(res => res.json()) + .map(body => body.results) .catch(this.handleError); } diff --git a/client/src/service-worker.js b/client/src/service-worker.js deleted file mode 100644 index e69de29..0000000 diff --git a/client/sw-precache-config.js b/client/sw-precache-config.js deleted file mode 100644 index 67c106e..0000000 --- a/client/sw-precache-config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - navigateFallback: '/index.html', - stripPrefix: 'dist', - root: 'dist/', - staticFileGlobs: [ - 'dist/index.html', - 'dist/**.js', - 'dist/**.css', - 'dist/*/**.jpg' - ] -}; diff --git a/client/tsconfig.json b/client/tsconfig.json index 1f9b558..a6c016b 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -12,7 +12,7 @@ "node_modules/@types" ], "lib": [ - "es2016", + "es2017", "dom" ] } diff --git a/server/config/local_settings.template b/server/config/local_settings.template index 8e5d1f7..2d8ccd6 100644 --- a/server/config/local_settings.template +++ b/server/config/local_settings.template @@ -8,6 +8,6 @@ DATABASES = { 'USER': _user, 'PASSWORD': _user, 'HOST': 'localhost', - 'PORT': '', + 'PORT': 5432, } } diff --git a/server/requirements.txt b/server/requirements.txt index 146cde1..a439e0f 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -1,6 +1,6 @@ # Install with: `pip install -r requirements.txt` -Django==1.11.3 +Django==1.11.4 psycopg2==2.7.1 django-extensions==1.8.1 gunicorn==19.7.1 From 3970b489fba1e41ec4f07c0cb0681456be7404ec Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Tue, 22 Aug 2017 10:56:37 +0300 Subject: [PATCH 26/35] Remove sw npm script because there is none after upgrade to ng-cli 1.3.x (#78) --- client/Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/Dockerfile b/client/Dockerfile index 4ff59a3..c6bc278 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -18,8 +18,7 @@ RUN npm install # Bundle app source COPY . /usr/src/app -RUN npm run build -- --prod -RUN npm run sw +RUN npm run build EXPOSE 4200 CMD ["nginx", "-g", "daemon off;"] From 0e5a32cce991333dd98c3f6e49bee77923cabf2a Mon Sep 17 00:00:00 2001 From: nirgn975 Date: Wed, 13 Sep 2017 14:04:04 +0300 Subject: [PATCH 27/35] Fix nginx args location and edit README file --- README.md | 1 + client/nginx/nginx.conf | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e54867..eb1688e 100755 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ All the parts are in a separate [Docker](https://www.docker.com/) containers and Automatic installation of the project with docker. +0. If you work on `win` or `mac` please comment the lines of the `database -> volumes` in `docker-compose.yml`, this share volume with `linux` system only. 1. In `client` directory run `docker build -t client .` to build the Docker image. 2. In `server` directory run `docker build -t server .` to build the Docker image. 3. To create a swarm `docker swarm init`. diff --git a/client/nginx/nginx.conf b/client/nginx/nginx.conf index b8f153e..ea99b6d 100644 --- a/client/nginx/nginx.conf +++ b/client/nginx/nginx.conf @@ -29,12 +29,16 @@ http { access_log /var/log/nginx/angular_access.log; error_log /var/log/nginx/angular_error.log; - root /usr/src/app/dist; + root /usr/src/app/dist; location /favicon.ico { alias static/favicon.ico; } + location / { + try_files $uri$args $uri$args/ /index.html; + } + } } From 97671cf9803bbbe411bbd70e17a1a51b2daecd00 Mon Sep 17 00:00:00 2001 From: nirgn975 Date: Wed, 13 Sep 2017 14:10:02 +0300 Subject: [PATCH 28/35] Switch travis-ci environment --- .travis.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a344e4d..a7fade8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,9 @@ addons: packages: - google-chrome-stable -language: node_js -node_js: - - "8" +language: python +python: + - 3.6 services: - postgresql @@ -18,7 +18,7 @@ services: cache: npm: true directories: - - client/node_modules + - client/node_modules before_install: - npm install -g npm@latest local-web-server codecov From 6f6e1d9b68ce867b5e9fc0b8651af58f56c3c6ba Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Tue, 12 Jun 2018 11:28:47 +0300 Subject: [PATCH 29/35] Upgrade client (#83) * Create new client project * Basic users module is done --- client/.angular-cli.json | 62 - client/.gitignore | 6 +- client/Dockerfile | 24 - client/README.md | 23 +- client/angular.json | 134 + client/e2e/app.e2e-spec.ts | 9 - client/{ => e2e}/protractor.conf.js | 6 +- client/e2e/src/app.e2e-spec.ts | 14 + client/e2e/{ => src}/app.po.ts | 4 + client/e2e/tsconfig.e2e.json | 5 +- client/nginx/mime.types | 79 - client/nginx/nginx.conf | 44 - client/package-lock.json | 10757 ++++++++++++++++ client/package.json | 86 +- client/proxy.conf.json | 6 - client/src/app/actions/user.ts | 21 - client/src/app/app-routing.module.ts | 4 +- client/src/app/app.component.spec.ts | 4 +- client/src/app/app.component.ts | 2 +- client/src/app/app.module.ts | 28 +- .../app/components/users/users.component.html | 14 - .../app/components/users/users.component.scss | 5 - .../components/users/users.component.spec.ts | 76 - .../app/components/users/users.component.ts | 27 - client/src/app/effects/user.spec.ts | 72 - client/src/app/effects/user.ts | 24 - client/src/app/models/user.ts | 13 - client/src/app/reducers/index.ts | 37 +- client/src/app/reducers/user.spec.ts | 114 - client/src/app/reducers/user.ts | 35 - client/src/app/services/user.service.spec.ts | 67 - client/src/app/services/user.service.ts | 33 - .../app/users/actions/users.actions.spec.ts | 31 + client/src/app/users/actions/users.actions.ts | 32 + .../users/components/user/user.component.css | 0 .../users/components/user/user.component.html | 3 + .../components/user/user.component.spec.ts | 25 + .../users/components/user/user.component.ts | 15 + .../users-list/users-list.component.css | 0 .../users-list/users-list.component.html | 3 + .../users-list/users-list.component.spec.ts | 25 + .../users-list/users-list.component.ts | 15 + .../app/users/effects/users.effects.spec.ts | 25 + client/src/app/users/effects/users.effects.ts | 35 + client/src/app/users/models/user.model.ts | 3 + .../app/users/reducers/users.reducer.spec.ts | 13 + .../src/app/users/reducers/users.reducer.ts | 24 + .../app/users/services/users.service.spec.ts | 42 + .../src/app/users/services/users.service.ts | 21 + client/src/app/users/users-routing.module.ts | 10 + client/src/app/users/users.module.spec.ts | 13 + client/src/app/users/users.module.ts | 19 + client/src/assets/person-icon.png | Bin 29454 -> 0 bytes client/src/browserslist | 9 + client/src/environments/environment.prod.ts | 2 +- client/src/environments/environment.ts | 17 +- client/src/index.html | 3 +- client/{ => src}/karma.conf.js | 14 +- client/src/main.ts | 3 +- client/src/polyfills.ts | 36 +- client/src/styles.scss | 24 - client/src/test.ts | 14 +- client/src/tsconfig.app.json | 7 +- client/src/tsconfig.spec.json | 5 +- client/src/tslint.json | 17 + client/src/typings.d.ts | 5 - client/tsconfig.json | 1 + client/tslint.json | 26 +- 68 files changed, 11417 insertions(+), 955 deletions(-) delete mode 100644 client/.angular-cli.json delete mode 100644 client/Dockerfile create mode 100644 client/angular.json delete mode 100644 client/e2e/app.e2e-spec.ts rename client/{ => e2e}/protractor.conf.js (86%) create mode 100644 client/e2e/src/app.e2e-spec.ts rename client/e2e/{ => src}/app.po.ts (60%) delete mode 100644 client/nginx/mime.types delete mode 100644 client/nginx/nginx.conf create mode 100644 client/package-lock.json delete mode 100644 client/proxy.conf.json delete mode 100644 client/src/app/actions/user.ts delete mode 100644 client/src/app/components/users/users.component.html delete mode 100644 client/src/app/components/users/users.component.scss delete mode 100644 client/src/app/components/users/users.component.spec.ts delete mode 100644 client/src/app/components/users/users.component.ts delete mode 100644 client/src/app/effects/user.spec.ts delete mode 100644 client/src/app/effects/user.ts delete mode 100644 client/src/app/models/user.ts delete mode 100644 client/src/app/reducers/user.spec.ts delete mode 100644 client/src/app/reducers/user.ts delete mode 100644 client/src/app/services/user.service.spec.ts delete mode 100644 client/src/app/services/user.service.ts create mode 100644 client/src/app/users/actions/users.actions.spec.ts create mode 100644 client/src/app/users/actions/users.actions.ts create mode 100644 client/src/app/users/components/user/user.component.css create mode 100644 client/src/app/users/components/user/user.component.html create mode 100644 client/src/app/users/components/user/user.component.spec.ts create mode 100644 client/src/app/users/components/user/user.component.ts create mode 100644 client/src/app/users/components/users-list/users-list.component.css create mode 100644 client/src/app/users/components/users-list/users-list.component.html create mode 100644 client/src/app/users/components/users-list/users-list.component.spec.ts create mode 100644 client/src/app/users/components/users-list/users-list.component.ts create mode 100644 client/src/app/users/effects/users.effects.spec.ts create mode 100644 client/src/app/users/effects/users.effects.ts create mode 100644 client/src/app/users/models/user.model.ts create mode 100644 client/src/app/users/reducers/users.reducer.spec.ts create mode 100644 client/src/app/users/reducers/users.reducer.ts create mode 100644 client/src/app/users/services/users.service.spec.ts create mode 100644 client/src/app/users/services/users.service.ts create mode 100644 client/src/app/users/users-routing.module.ts create mode 100644 client/src/app/users/users.module.spec.ts create mode 100644 client/src/app/users/users.module.ts delete mode 100644 client/src/assets/person-icon.png create mode 100644 client/src/browserslist rename client/{ => src}/karma.conf.js (75%) create mode 100644 client/src/tslint.json delete mode 100644 client/src/typings.d.ts diff --git a/client/.angular-cli.json b/client/.angular-cli.json deleted file mode 100644 index e46f18c..0000000 --- a/client/.angular-cli.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "project": { - "name": "client" - }, - "apps": [ - { - "root": "src", - "outDir": "dist", - "assets": [ - "assets", - "favicon.ico" - ], - "index": "index.html", - "main": "main.ts", - "polyfills": "polyfills.ts", - "test": "test.ts", - "tsconfig": "tsconfig.app.json", - "testTsconfig": "tsconfig.spec.json", - "prefix": "app", - "serviceWorker": true, - "styles": [ - "styles.scss" - ], - "scripts": [], - "environmentSource": "environments/environment.ts", - "environments": { - "dev": "environments/environment.ts", - "prod": "environments/environment.prod.ts" - } - } - ], - "e2e": { - "protractor": { - "config": "./protractor.conf.js" - } - }, - "lint": [ - { - "project": "src/tsconfig.app.json", - "exclude": "**/node_modules/**" - }, - { - "project": "src/tsconfig.spec.json", - "exclude": "**/node_modules/**" - }, - { - "project": "e2e/tsconfig.e2e.json", - "exclude": "**/node_modules/**" - } - ], - "test": { - "karma": { - "config": "./karma.conf.js" - } - }, - "defaults": { - "styleExt": "scss", - "component": { - } - } -} diff --git a/client/.gitignore b/client/.gitignore index 6b66814..ee5c9d8 100644 --- a/client/.gitignore +++ b/client/.gitignore @@ -30,13 +30,9 @@ /coverage /libpeerconnection.log npm-debug.log +yarn-error.log testem.log /typings -yarn-error.log - -# e2e -/e2e/*.js -/e2e/*.map # System Files .DS_Store diff --git a/client/Dockerfile b/client/Dockerfile deleted file mode 100644 index c6bc278..0000000 --- a/client/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM node:8.2.1 -MAINTAINER Nir Galon - -# Install nginx -RUN apt-get update && apt-get install -y --no-install-recommends \ - nginx-light - -# nginx files -COPY ./nginx /etc/nginx - -# Create app directory -RUN mkdir -p /usr/src/app -WORKDIR /usr/src/app - -# Install app dependencies -COPY package.json /usr/src/app/ -RUN npm install - -# Bundle app source -COPY . /usr/src/app -RUN npm run build - -EXPOSE 4200 -CMD ["nginx", "-g", "daemon off;"] diff --git a/client/README.md b/client/README.md index b0d6f50..c8be806 100644 --- a/client/README.md +++ b/client/README.md @@ -1,25 +1,24 @@ # Client -The front end (client) side of the project written in Angular, with Angular-CLI, ngrx, and material2. +The front end (client) side of the project written in Angular, with Angular-CLI, ngrx, and Material. ## Prerequisites -* Install [Angular-cli](https://github.com/angular/angular-cli) -* Install [npm](https://nodejs.org/en/) +* Install [Angular-cli](https://github.com/angular/angular-cli). +* Install [npm](https://nodejs.org/en/). -## Manual Installation +## Installation -1. Run `npm install` to install dependencies -2. Run `npm start` to fire up the dev server -3. Open browser to [http://localhost:4200](http://localhost:4200) +1. Run `npm install` to install dependencies. +2. Run `npm start` to fire up the dev server. +3. Open browser to [http://localhost:4200](http://localhost:4200). ## Tests -* Run `npm run lint` to check for TSLint mistakes -* Run `npm test` to execute the unit tests via Karma -* Run `npm run e2e` to execute the end-to-end tests via Protractor +* Run `npm run lint` to check for TSLint mistakes. +* Run `npm run test` to execute the unit tests via Karma. +* Run `npm run e2e` to execute the end-to-end tests via Protractor. ## Deploy -1. Run `ng build -prod -aot` to build the project -2. Run `npm run sw` to generate the service worker file (in dist directory) +1. Run `ng build --prod` to build the project. diff --git a/client/angular.json b/client/angular.json new file mode 100644 index 0000000..8babf9f --- /dev/null +++ b/client/angular.json @@ -0,0 +1,134 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "client": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "client", + "schematics": { + "@schematics/angular:component": { + "styleext": "scss" + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/client", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "client:build" + }, + "configurations": { + "production": { + "browserTarget": "client:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "client:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "src/tsconfig.spec.json", + "karmaConfig": "src/karma.conf.js", + "styles": [ + "src/styles.scss" + ], + "scripts": [], + "assets": [ + "src/favicon.ico", + "src/assets" + ] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "src/tsconfig.app.json", + "src/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + }, + "client-e2e": { + "root": "e2e/", + "projectType": "application", + "architect": { + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "client:serve" + }, + "configurations": { + "production": { + "devServerTarget": "client:serve:production" + } + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": "e2e/tsconfig.e2e.json", + "exclude": [ + "**/node_modules/**" + ] + } + } + } + } + }, + "defaultProject": "client", + "cli": { + "defaultCollection": "@ngrx/schematics" + } +} \ No newline at end of file diff --git a/client/e2e/app.e2e-spec.ts b/client/e2e/app.e2e-spec.ts deleted file mode 100644 index a259b1f..0000000 --- a/client/e2e/app.e2e-spec.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { AppPage } from './app.po'; - -describe('client App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); -}); diff --git a/client/protractor.conf.js b/client/e2e/protractor.conf.js similarity index 86% rename from client/protractor.conf.js rename to client/e2e/protractor.conf.js index 7ee3b5e..86776a3 100644 --- a/client/protractor.conf.js +++ b/client/e2e/protractor.conf.js @@ -6,7 +6,7 @@ const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, specs: [ - './e2e/**/*.e2e-spec.ts' + './src/**/*.e2e-spec.ts' ], capabilities: { 'browserName': 'chrome' @@ -21,8 +21,8 @@ exports.config = { }, onPrepare() { require('ts-node').register({ - project: 'e2e/tsconfig.e2e.json' + project: require('path').join(__dirname, './tsconfig.e2e.json') }); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } -}; +}; \ No newline at end of file diff --git a/client/e2e/src/app.e2e-spec.ts b/client/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..c54a666 --- /dev/null +++ b/client/e2e/src/app.e2e-spec.ts @@ -0,0 +1,14 @@ +import { AppPage } from './app.po'; + +describe('workspace-project App', () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it('should display welcome message', () => { + page.navigateTo(); + expect(page.getParagraphText()).toEqual('Welcome to client!'); + }); +}); diff --git a/client/e2e/app.po.ts b/client/e2e/src/app.po.ts similarity index 60% rename from client/e2e/app.po.ts rename to client/e2e/src/app.po.ts index e5d69de..1778dfc 100644 --- a/client/e2e/app.po.ts +++ b/client/e2e/src/app.po.ts @@ -4,4 +4,8 @@ export class AppPage { navigateTo() { return browser.get('/'); } + + getParagraphText() { + return element(by.css('client-root h1')).getText(); + } } diff --git a/client/e2e/tsconfig.e2e.json b/client/e2e/tsconfig.e2e.json index 1d9e5ed..a6dd622 100644 --- a/client/e2e/tsconfig.e2e.json +++ b/client/e2e/tsconfig.e2e.json @@ -1,8 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "outDir": "../out-tsc/e2e", - "baseUrl": "./", + "outDir": "../out-tsc/app", "module": "commonjs", "target": "es5", "types": [ @@ -11,4 +10,4 @@ "node" ] } -} +} \ No newline at end of file diff --git a/client/nginx/mime.types b/client/nginx/mime.types deleted file mode 100644 index 5d132eb..0000000 --- a/client/nginx/mime.types +++ /dev/null @@ -1,79 +0,0 @@ -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/x-javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - image/webp webp; - - application/java-archive jar war ear; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.ms-excel xls; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream eot; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/client/nginx/nginx.conf b/client/nginx/nginx.conf deleted file mode 100644 index ea99b6d..0000000 --- a/client/nginx/nginx.conf +++ /dev/null @@ -1,44 +0,0 @@ -# -*- mode: nginx; mode: flyspell-prog; ispell-local-dictionary: "american" -*- - -### Very basic Nginx configuration. -user www-data; -worker_processes auto; -error_log /var/log/nginx/error.log; - -events { - worker_connections 4096; - multi_accept on; -} - -http { - include mime.types; - default_type application/octet-stream; - - access_log /var/log/nginx/access.log; - - sendfile on; - tcp_nopush on; - - keepalive_timeout 10; - tcp_nodelay on; - gzip on; - gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; - - server { - listen 4200; - - access_log /var/log/nginx/angular_access.log; - error_log /var/log/nginx/angular_error.log; - root /usr/src/app/dist; - - location /favicon.ico { - alias static/favicon.ico; - } - - location / { - try_files $uri$args $uri$args/ /index.html; - } - - } - -} diff --git a/client/package-lock.json b/client/package-lock.json new file mode 100644 index 0000000..cab1760 --- /dev/null +++ b/client/package-lock.json @@ -0,0 +1,10757 @@ +{ + "name": "client", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.6.8.tgz", + "integrity": "sha512-ZKTm/zC61iY9IBHOEAKoMSzZpvhkmv+1O/HHzpHEuR551jCzu6vSyCmMY9Z7GBcccscCV+hjeSMwgFrFRcqlkw==", + "dev": true, + "requires": { + "@angular-devkit/core": "0.6.8", + "rxjs": "6.2.0" + } + }, + "@angular-devkit/build-angular": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.6.8.tgz", + "integrity": "sha512-VGqYAk8jpISraz2UHfsDre270NOUmV0CTSZw2p9sm5g/XIr5m+IHetFZz3gpoAr9+If2aFTs8Rt3sGdCRzwBqA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.6.8", + "@angular-devkit/build-optimizer": "0.6.8", + "@angular-devkit/core": "0.6.8", + "@ngtools/webpack": "6.0.8", + "ajv": "6.4.0", + "autoprefixer": "8.6.2", + "cache-loader": "1.2.2", + "chalk": "2.2.2", + "circular-dependency-plugin": "5.0.2", + "clean-css": "4.1.11", + "copy-webpack-plugin": "4.5.1", + "file-loader": "1.1.11", + "glob": "7.1.2", + "html-webpack-plugin": "3.2.0", + "istanbul": "0.4.5", + "istanbul-instrumenter-loader": "3.0.1", + "karma-source-map-support": "1.3.0", + "less": "3.0.4", + "less-loader": "4.1.0", + "license-webpack-plugin": "1.3.1", + "lodash": "4.17.10", + "memory-fs": "0.4.1", + "mini-css-extract-plugin": "0.4.0", + "minimatch": "3.0.4", + "node-sass": "4.9.0", + "opn": "5.3.0", + "parse5": "4.0.0", + "portfinder": "1.0.13", + "postcss": "6.0.22", + "postcss-import": "11.1.0", + "postcss-loader": "2.1.5", + "postcss-url": "7.3.2", + "raw-loader": "0.5.1", + "resolve": "1.7.1", + "rxjs": "6.2.0", + "sass-loader": "7.0.3", + "silent-error": "1.1.0", + "source-map-support": "0.5.6", + "stats-webpack-plugin": "0.6.2", + "style-loader": "0.21.0", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "tree-kill": "1.2.0", + "uglifyjs-webpack-plugin": "1.2.5", + "url-loader": "1.0.1", + "webpack": "4.8.3", + "webpack-dev-middleware": "3.1.3", + "webpack-dev-server": "3.1.4", + "webpack-merge": "4.1.2", + "webpack-sources": "1.1.0", + "webpack-subresource-integrity": "1.1.0-rc.4" + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.6.8.tgz", + "integrity": "sha512-of5syQbv3uNPp4AQkfRecfnp8AE8kvffbfYi+FFPZ6OGr7e59T1fGwk6+Zgb2qQFQg8HO2tzWI/uygtLIqmbmw==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.7", + "typescript": "2.9.1", + "webpack-sources": "1.1.0" + }, + "dependencies": { + "typescript": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", + "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.6.8.tgz", + "integrity": "sha512-rkIa1OSVWTt4g9leLSK/PsqOj3HZbDKHbZjqlslyfVa3AyCeiumFoOgViOVXlYgPX3HHDbE5uH24nyUWSD8uww==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "chokidar": "2.0.3", + "rxjs": "6.2.0", + "source-map": "0.5.7" + } + }, + "@angular-devkit/schematics": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.6.8.tgz", + "integrity": "sha512-R4YqAUdo62wtrhX/5HSRGSKXNTWqfQb66ZE6m8jj6GEJNFKdNXMdxOchxr07LCiKTxfh1w6G3nGzxIsu/+D4KA==", + "dev": true, + "requires": { + "@angular-devkit/core": "0.6.8", + "rxjs": "6.2.0" + } + }, + "@angular/animations": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.4.tgz", + "integrity": "sha512-Ro1XEwShk8XRAogfu73fKLTBLnND1s+MGhN+ymwr7ib9hqxVr7jMNE+MXPqG2/1BX9c+7NHb30B8G4woQn62vw==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/cdk": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.2.1.tgz", + "integrity": "sha512-uwW4eIGJKqOkR+ew6YcEAh1J4SP98jdyDpsZ4IEMkV9+jXcKfcwcxGFpZvs9wJsAvAr8EgNmZ8h+iuZLwJsvmA==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/cli": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-6.0.8.tgz", + "integrity": "sha512-DhH1Zq5Yonthw6zh6W07fhf+9XrAZbD1fcQ0MrmbxlieCfLlTAdBqyK2LavFCKwSZkUMLF6UHM3+jiNRVZSSIg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.6.8", + "@angular-devkit/core": "0.6.8", + "@angular-devkit/schematics": "0.6.8", + "@schematics/angular": "0.6.8", + "@schematics/update": "0.6.8", + "opn": "5.3.0", + "resolve": "1.7.1", + "rxjs": "6.2.0", + "semver": "5.5.0", + "silent-error": "1.1.0", + "symbol-observable": "1.2.0", + "yargs-parser": "10.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "yargs-parser": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz", + "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "@angular/common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.4.tgz", + "integrity": "sha512-z2UE6a43u49omsqjzwdHhwD+wpCPauuD13FMkVQMLwzugKhNri0LjMk5I0I9xLz9OyXICm2B+wPAQN4d07savg==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/compiler": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.4.tgz", + "integrity": "sha512-qwjuPacuRKUroD+xev653mljV9Jwhi2tvwGo/cVadq0isJ2rVH1hO6sa1FWFnNf1KPnyolMobZlMgg8DFW/yRw==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/compiler-cli": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.4.tgz", + "integrity": "sha512-bkN21JJrsbIdXNfOc9I9iB7AETUe4/QvApC25R3/pERSyhkK7UNNHTqg4FY5xMdSxlZd1ccWj8rvSbS+hFbTBw==", + "dev": true, + "requires": { + "chokidar": "1.7.0", + "minimist": "1.2.0", + "reflect-metadata": "0.1.12", + "tsickle": "0.29.0" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@angular/core": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.4.tgz", + "integrity": "sha512-WCW8wyRoIKkjGjOjVLFpUyhQw/K0//s3W0qo1/vH6m9njC63jP/VP+2Xnt8bdtgeET2NYUeyl+w/0vUXqYlnEA==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/forms": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.4.tgz", + "integrity": "sha512-JcKyCCkAwF3NlWuwPxtpRhFX/8QbFUkA4W0N62L+Odm8G0/P4QhMw/99o5kRs5xrsQRVyFlGvdYOrkgDyyZkGg==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/http": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.4.tgz", + "integrity": "sha512-bq7cS0/5hM3Af3FolEe7HpKP19/7MJWIPGi5k9rYCGM4dXKFiKa+LA/SbXE0DMiKxhAQbZDwQ9HN04r70DRyBQ==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/language-service": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.4.tgz", + "integrity": "sha512-LyFh/sFtnyjJJYO5UKM31nGSSkmGYFMwqzwbG+l0QNQXNoa9jj+OApvu0oOY5F0WP9DBrOAzj74j2M5olprtMQ==", + "dev": true + }, + "@angular/material": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-6.2.1.tgz", + "integrity": "sha512-SBoUXxHknkgwzp5pNDHW0jyrTM0d0Tk4lVyDbtEX8VEPtXqG5nL3BSgyjpJbTvqlmy2kOooUu3qgAmt87VH9lw==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/platform-browser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.4.tgz", + "integrity": "sha512-4y6rSqOLuBs+RL0CIM+RZ5T8a5Tm1NisZcTUGvM8lVYPNkqTzNfHQXhBq8mTgRw9JopEwOj+UEqBbgrNX715yQ==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/platform-browser-dynamic": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.4.tgz", + "integrity": "sha512-uh7MoQi9kyKPFHrD7HPOU5gWyhF4pPJuGltyMTOtM/f5TNL9QQI2EugijKnnSFLQ8+7UQjmFAVeRqH9jylhIyQ==", + "requires": { + "tslib": "1.9.2" + } + }, + "@angular/router": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.4.tgz", + "integrity": "sha512-IKUtbbRtHN8I+Hp8/pLqBPyXJmQHrPFGzKU3H43TovD++mmT5AaYVCeJgkGUB//wjtLN3y0X/yrmyWFWcN35Gw==", + "requires": { + "tslib": "1.9.2" + } + }, + "@ngrx/effects": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-6.0.1.tgz", + "integrity": "sha512-YS68D7E1qKbbOIzV6Iyfv6BY3CrTNi8nBgGJ6whTi6f7Y0apXySvNj9aOQyzuJsePWziu6h0uJhy2ZFT/iELyg==" + }, + "@ngrx/entity": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/entity/-/entity-6.0.1.tgz", + "integrity": "sha512-UjYHg6Okm9AMa+5qEVQJ71h5fkc6/S1LveW7G5UFn7hTKK0a+8OJYi/wGmfPGPo4M4/Qi1q722YgylAZf/9KbA==" + }, + "@ngrx/schematics": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-6.0.1.tgz", + "integrity": "sha512-EBTGJNVX+UUntt6wDq3a8UPft9SNcnKCVM9qMb/7Ldav7PbbbWiYqNRWpWKf6qTOaE57uBa6I5J4oE6Qd37F8Q==", + "dev": true + }, + "@ngrx/store": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-6.0.1.tgz", + "integrity": "sha512-cSgfT8CgpOr6BOQac9M3DH6QQC5gxCVjdEcZH//Zn/kwdse86X73iK7KWv6B6AiIEdyVbFfggXNZwd/HiyLGOA==" + }, + "@ngrx/store-devtools": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-6.0.1.tgz", + "integrity": "sha512-eZyguQvIltJuhCVgPPR1IyMAztykRuvGalwCH1G2ODWKGZPNrWlJbxVMqzUeSJTBS268RIFIkMTwEDKi/xCQoQ==", + "dev": true + }, + "@ngtools/webpack": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-6.0.8.tgz", + "integrity": "sha512-jorGpTd82ILbyUwg4JQekovHFaYwSMlZan4f7x+sd3+2WgyL3Z1+ZbVSGKvXZWKS/mAVx7eLkRikzJkuC4FgHw==", + "dev": true, + "requires": { + "@angular-devkit/core": "0.6.8", + "tree-kill": "1.2.0", + "webpack-sources": "1.1.0" + } + }, + "@schematics/angular": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.6.8.tgz", + "integrity": "sha512-9kRphqTYG5Df/I8fvnT1zMsw0YNDPO9tl18tQZXj4am4raT7l9UCr+WkwJdlBoA5pwG6baWE9sL0iGWV/bzF/g==", + "dev": true, + "requires": { + "@angular-devkit/core": "0.6.8", + "@angular-devkit/schematics": "0.6.8", + "typescript": "2.7.2" + } + }, + "@schematics/update": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.6.8.tgz", + "integrity": "sha512-1Uq7LYnwL2wBwGVCgNz76QAR13ghAk+2vDDHOi+VX5+usHManxydrpoMGeX66OBPd+y5D3D2MFb+8mYHE7mygg==", + "dev": true, + "requires": { + "@angular-devkit/core": "0.6.8", + "@angular-devkit/schematics": "0.6.8", + "npm-registry-client": "8.5.1", + "rxjs": "6.2.0", + "semver": "5.5.0", + "semver-intersect": "1.3.1" + } + }, + "@types/jasmine": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.8.tgz", + "integrity": "sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg==", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", + "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", + "dev": true, + "requires": { + "@types/jasmine": "2.8.8" + } + }, + "@types/node": { + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", + "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "2.53.43", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz", + "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.4.3.tgz", + "integrity": "sha512-S6npYhPcTHDYe9nlsKa9CyWByFi8Vj8HovcAgtmMAQZUOczOZbQ8CnwMYKYC5HEZzxEE+oY0jfQk4cVlI3J59Q==", + "dev": true, + "requires": { + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "debug": "3.1.0", + "webassemblyjs": "1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz", + "integrity": "sha512-3zTkSFswwZOPNHnzkP9ONq4bjJSeKVMcuahGXubrlLmZP8fmTIJ58dW7h/zOVWiFSuG2em3/HH3BlCN7wyu9Rw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz", + "integrity": "sha512-e8+KZHh+RV8MUvoSRtuT1sFXskFnWG9vbDy47Oa166xX+l0dD5sERJ21g5/tcH8Yo95e9IN3u7Jc3NbhnUcSkw==", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz", + "integrity": "sha512-9FgHEtNsZQYaKrGCtsjswBil48Qp1agrzRcPzCbQloCoaTbOXLJ9IRmqT+uEZbenpULLRNFugz3I4uw18hJM8w==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.4.3" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz", + "integrity": "sha512-JINY76U+702IRf7ePukOt037RwmtH59JHvcdWbTTyHi18ixmQ+uOuNhcdCcQHTquDAH35/QgFlp3Y9KqtyJsCQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz", + "integrity": "sha512-I7bS+HaO0K07Io89qhJv+z1QipTpuramGwUSDkwEaficbSvCcL92CUZEtgykfNtk5wb0CoLQwWlmXTwGbNZUeQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz", + "integrity": "sha512-p0yeeO/h2r30PyjnJX9xXSR6EDcvJd/jC6xa/Pxg4lpfcNi7JUswOpqDToZQ55HMMVhXDih/yqkaywHWGLxqyQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/leb128": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.4.3.tgz", + "integrity": "sha512-4u0LJLSPzuRDWHwdqsrThYn+WqMFVqbI2ltNrHvZZkzFPO8XOZ0HFQ5eVc4jY/TNHgXcnwrHjONhPGYuuf//KQ==", + "dev": true, + "requires": { + "leb": "0.3.0" + } + }, + "@webassemblyjs/validation": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.4.3.tgz", + "integrity": "sha512-R+rRMKfhd9mq0rj2mhU9A9NKI2l/Rw65vIYzz4lui7eTKPcCu1l7iZNi4b9Gen8D42Sqh/KGiaQNk/x5Tn/iBQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3" + } + }, + "@webassemblyjs/wasm-edit": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz", + "integrity": "sha512-qzuwUn771PV6/LilqkXcS0ozJYAeY/OKbXIWU3a8gexuqb6De2p4ya/baBeH5JQ2WJdfhWhSvSbu86Vienttpw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/helper-wasm-section": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "@webassemblyjs/wasm-opt": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "@webassemblyjs/wast-printer": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz", + "integrity": "sha512-eR394T8dHZfpLJ7U/Z5pFSvxl1L63JdREebpv9gYc55zLhzzdJPAuxjBYT4XqevUdW67qU2s0nNA3kBuNJHbaQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/leb128": "1.4.3" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz", + "integrity": "sha512-7Gp+nschuKiDuAL1xmp4Xz0rgEbxioFXw4nCFYEmy+ytynhBnTeGc9W9cB1XRu1w8pqRU2lbj2VBBA4cL5Z2Kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-buffer": "1.4.3", + "@webassemblyjs/wasm-gen": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz", + "integrity": "sha512-KXBjtlwA3BVukR/yWHC9GF+SCzBcgj0a7lm92kTOaa4cbjaTaa47bCjXw6cX4SGQpkncB9PU2hHGYVyyI7wFRg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/helper-wasm-bytecode": "1.4.3", + "@webassemblyjs/leb128": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "webassemblyjs": "1.4.3" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz", + "integrity": "sha512-QhCsQzqV0CpsEkRYyTzQDilCNUZ+5j92f+g35bHHNqS22FppNTywNFfHPq8ZWZfYCgbectc+PoghD+xfzVFh1Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/floating-point-hex-parser": "1.4.3", + "@webassemblyjs/helper-code-frame": "1.4.3", + "@webassemblyjs/helper-fsm": "1.4.3", + "long": "3.2.0", + "webassemblyjs": "1.4.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz", + "integrity": "sha512-EgXk4anf8jKmuZJsqD8qy5bz2frEQhBvZruv+bqwNoLWUItjNSFygk8ywL3JTEz9KtxTlAmqTXNrdD1d9gNDtg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "long": "3.2.0" + } + }, + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "dev": true + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz", + "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "5.6.2" + } + }, + "adm-zip": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", + "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", + "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "dev": true, + "requires": { + "es6-promisify": "5.0.0" + } + }, + "ajv": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", + "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1", + "uri-js": "3.0.2" + } + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "app-root-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", + "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.12.0" + } + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", + "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true, + "optional": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", + "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", + "dev": true + }, + "autoprefixer": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.2.tgz", + "integrity": "sha512-cv9v1mYYBcAnZq4MHseJ9AIdjQmNahnpCpPO46oTkQJS2GggsBp2azHjNpAuQ95Epvsg+AIsyjYhfI9YwFxGSA==", + "dev": true, + "requires": { + "browserslist": "3.2.8", + "caniuse-lite": "1.0.30000851", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.22", + "postcss-value-parser": "3.3.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.7", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "dev": true, + "requires": { + "callsite": "1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "blob": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", + "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "optional": true, + "requires": { + "inherits": "2.0.3" + } + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "requires": { + "minimist": "1.2.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "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.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + }, + "dependencies": { + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "2.1.1", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.2", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000851", + "electron-to-chromium": "1.3.48" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", + "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.3", + "mississippi": "2.0.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.3.0", + "unique-filename": "1.1.0", + "y18n": "4.0.0" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" + } + }, + "cache-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.2.tgz", + "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mkdirp": "0.5.1", + "neo-async": "2.5.1", + "schema-utils": "0.4.5" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30000851", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000851.tgz", + "integrity": "sha512-Y1ecA1cL9wg0vni8t33nBw/poX8ypm+2c3fbwAESj8cm4ufK9CBFQ1+nUK8Dp5dtFo5Fc3JzkI5DKmQbuIo6hQ==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", + "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + }, + "dependencies": { + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "chokidar": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", + "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.2", + "fsevents": "1.2.4", + "glob-parent": "3.1.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "4.0.0", + "normalize-path": "2.1.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0", + "upath": "1.1.0" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", + "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "clean-css": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", + "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "optional": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": true + } + } + }, + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "dev": true, + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.2.1.tgz", + "integrity": "sha512-CKwfgpfkqi9dyzy4s6ELaxJ54QgJ6A8iTSsM4bzHbLuTpbKncvNc3DUlCvpnkHBhK47gEf4qFsWoYqLrJPhy6g==", + "dev": true, + "requires": { + "app-root-path": "2.0.1", + "css-selector-tokenizer": "0.7.0", + "cssauron": "1.4.0", + "semver-dsl": "1.0.1", + "source-map": "0.5.7", + "sprintf-js": "1.0.3" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combine-lists": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", + "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.0.tgz", + "integrity": "sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ==", + "dev": true + }, + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", + "dev": true + }, + "compressible": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "dev": true, + "requires": { + "mime-db": "1.34.0" + }, + "dependencies": { + "mime-db": { + "version": "1.34.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", + "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", + "dev": true + } + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.14", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "1.1.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz", + "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "1.1.0", + "minimatch": "3.0.4", + "p-limit": "1.3.0", + "serialize-javascript": "1.5.0" + } + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.12.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "4.1.3", + "which": "1.3.1" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", + "dev": true + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "0.10.45" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "3.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "dev": true, + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.2" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "detect-node": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", + "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "dev": true + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "dev": true, + "requires": { + "custom-event": "1.0.1", + "ent": "2.2.0", + "extend": "3.0.1", + "void-elements": "2.0.1" + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.48", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", + "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "engine.io": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "dev": true, + "requires": { + "accepts": "1.3.3", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "ws": "1.1.2" + }, + "dependencies": { + "accepts": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", + "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", + "dev": true, + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-client": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "2.3.3", + "engine.io-parser": "1.3.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parsejson": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "1.1.2", + "xmlhttprequest-ssl": "1.5.3", + "yeast": "0.1.2" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", + "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.6", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary": "0.1.7", + "wtf-8": "1.0.0" + } + }, + "enhanced-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", + "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "tapable": "1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.45", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", + "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45", + "es6-symbol": "3.1.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "4.2.4" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.45" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, + "requires": { + "esprima": "2.7.3", + "estraverse": "1.9.3", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.2.0" + }, + "dependencies": { + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "4.2.0" + }, + "dependencies": { + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + } + } + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": "1.0.1" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.2" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-braces": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", + "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "dev": true, + "requires": { + "array-slice": "0.2.3", + "array-unique": "0.2.1", + "braces": "0.1.5" + }, + "dependencies": { + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", + "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "dev": true, + "requires": { + "expand-range": "0.1.1" + } + }, + "expand-range": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", + "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "dev": true, + "requires": { + "is-number": "0.1.1", + "repeat-string": "0.2.2" + } + }, + "is-number": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", + "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", + "dev": true + }, + "repeat-string": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", + "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", + "dev": true + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.4" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "3.0.0", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "7.1.2", + "minimatch": "3.0.4" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.3.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "follow-redirects": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", + "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", + "dev": true, + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "1.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.7", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.5.1", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.3" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "optional": true, + "requires": { + "globule": "1.2.1" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true, + "optional": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "optional": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.10", + "minimatch": "3.0.4" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "handlebars": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", + "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "dev": true, + "requires": { + "async": "1.5.2", + "optimist": "0.6.1", + "source-map": "0.4.4", + "uglify-js": "2.8.29" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "optional": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "optional": true + } + } + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-binary": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", + "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "has-cors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", + "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-minifier": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", + "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.11", + "commander": "2.15.1", + "he": "1.1.1", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.28" + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "3.5.16", + "loader-utils": "0.2.17", + "lodash": "4.17.10", + "pretty-error": "2.1.1", + "tapable": "1.0.0", + "toposort": "1.0.7", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.1.0", + "domutils": "1.1.6", + "readable-stream": "1.0.34" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.4.0" + } + }, + "http-parser-js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", + "dev": true + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "3.1.0", + "follow-redirects": "1.5.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "dev": true, + "requires": { + "http-proxy": "1.17.0", + "is-glob": "4.0.0", + "lodash": "4.17.10", + "micromatch": "3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", + "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "dev": true, + "requires": { + "agent-base": "4.2.0", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", + "dev": true + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", + "dev": true, + "optional": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "2.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true, + "optional": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "dev": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", + "dev": true, + "optional": true + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "dev": true, + "optional": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-odd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", + "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", + "dev": true, + "requires": { + "is-number": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true, + "optional": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "1.0.3" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isbinaryfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", + "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", + "dev": true, + "requires": { + "abbrev": "1.0.9", + "async": "1.5.2", + "escodegen": "1.8.1", + "esprima": "2.7.3", + "glob": "5.0.15", + "handlebars": "4.0.11", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "once": "1.4.0", + "resolve": "1.1.7", + "supports-color": "3.2.3", + "which": "1.3.1", + "wordwrap": "1.0.0" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-api": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", + "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", + "dev": true, + "requires": { + "async": "2.6.1", + "compare-versions": "3.3.0", + "fileset": "2.0.3", + "istanbul-lib-coverage": "1.2.0", + "istanbul-lib-hook": "1.2.1", + "istanbul-lib-instrument": "1.10.1", + "istanbul-lib-report": "1.1.4", + "istanbul-lib-source-maps": "1.2.5", + "istanbul-reports": "1.3.0", + "js-yaml": "3.12.0", + "mkdirp": "0.5.1", + "once": "1.4.0" + }, + "dependencies": { + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, + "requires": { + "convert-source-map": "1.5.1", + "istanbul-lib-instrument": "1.10.1", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.5.2" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", + "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", + "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", + "dev": true, + "requires": { + "append-transform": "1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", + "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "dev": true, + "requires": { + "babel-generator": "6.26.1", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "istanbul-lib-coverage": "1.2.0", + "semver": "5.5.0" + } + }, + "istanbul-lib-report": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", + "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "path-parse": "1.0.5", + "supports-color": "3.2.3" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", + "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "dev": true, + "requires": { + "debug": "3.1.0", + "istanbul-lib-coverage": "1.2.0", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "source-map": "0.5.7" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "istanbul-reports": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", + "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "dev": true, + "requires": { + "handlebars": "4.0.11" + } + }, + "jasmine": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.8.0.tgz", + "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", + "dev": true, + "requires": { + "exit": "0.1.2", + "glob": "7.1.2", + "jasmine-core": "2.8.0" + }, + "dependencies": { + "jasmine-core": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.8.0.tgz", + "integrity": "sha1-vMl5rh+f0FcB5F5S5l06XWPxok4=", + "dev": true + } + } + }, + "jasmine-core": { + "version": "2.99.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", + "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "js-base64": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", + "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", + "dev": true, + "optional": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "dev": true + } + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", + "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "dev": true, + "requires": { + "core-js": "2.3.0", + "es6-promise": "3.0.2", + "lie": "3.1.1", + "pako": "1.0.6", + "readable-stream": "2.0.6" + }, + "dependencies": { + "core-js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", + "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", + "dev": true + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "0.10.31", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "karma": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.5.7", + "di": "0.0.1", + "dom-serialize": "2.2.1", + "expand-braces": "0.1.2", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "http-proxy": "1.17.0", + "isbinaryfile": "3.0.2", + "lodash": "3.10.1", + "log4js": "0.6.38", + "mime": "1.6.0", + "minimatch": "3.0.4", + "optimist": "0.6.1", + "qjobs": "1.2.0", + "range-parser": "1.2.0", + "rimraf": "2.6.2", + "safe-buffer": "5.1.2", + "socket.io": "1.7.3", + "source-map": "0.5.7", + "tmp": "0.0.31", + "useragent": "2.3.0" + }, + "dependencies": { + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.4", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + } + } + }, + "karma-chrome-launcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", + "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "dev": true, + "requires": { + "fs-access": "1.0.1", + "which": "1.3.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.1.tgz", + "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==", + "dev": true, + "requires": { + "istanbul-api": "1.3.1", + "minimatch": "3.0.4" + } + }, + "karma-jasmine": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", + "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", + "dev": true + }, + "karma-jasmine-html-reporter": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", + "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "dev": true, + "requires": { + "karma-jasmine": "1.1.2" + } + }, + "karma-source-map-support": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz", + "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", + "dev": true, + "requires": { + "source-map-support": "0.5.6" + } + }, + "killable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", + "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true, + "optional": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "leb": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz", + "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=", + "dev": true + }, + "less": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/less/-/less-3.0.4.tgz", + "integrity": "sha512-q3SyEnPKbk9zh4l36PGeW2fgynKu+FpbhiUNx/yaiBUQ3V0CbACCgb9FzYWcRgI2DJlP6eI4jc8XPrCTi55YcQ==", + "dev": true, + "requires": { + "errno": "0.1.7", + "graceful-fs": "4.1.11", + "image-size": "0.5.5", + "mime": "1.6.0", + "mkdirp": "0.5.1", + "promise": "7.3.1", + "request": "2.87.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", + "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "dev": true, + "requires": { + "clone": "2.1.1", + "loader-utils": "1.1.0", + "pify": "3.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "license-webpack-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-NqAFodJdpBUuf1iD+Ij8hQvF0rCFKlO2KaieoQzAPhFgzLCtJnC7Z7x5gQbGNjoe++wOKAtAmwVEIBLqq2Yp1A==", + "dev": true, + "requires": { + "ejs": "2.6.1" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "dev": true, + "requires": { + "immediate": "3.0.6" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true, + "optional": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "dev": true, + "optional": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "2.2.2" + } + }, + "log4js": { + "version": "0.6.38", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", + "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "semver": "4.3.6" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "loglevelnext": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", + "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "dev": true, + "requires": { + "es6-symbol": "3.1.1", + "object.assign": "4.1.0" + } + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "make-error": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", + "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "1.0.1" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.6" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz", + "integrity": "sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "webpack-sources": "1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.6.0", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.3", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.5.1", + "stream-each": "1.2.2", + "through2": "2.0.3" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", + "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-odd": "2.0.0", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", + "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-gyp": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz", + "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.5", + "request": "2.81.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.1" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "har-schema": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", + "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.1.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true, + "optional": true + } + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.1", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.4", + "vm-browserify": "0.0.4" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-sass": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", + "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", + "dev": true, + "optional": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.3", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.1", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.10.0", + "node-gyp": "3.7.0", + "npmlog": "4.1.2", + "request": "2.79.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0", + "true-case-path": "1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true, + "optional": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true, + "optional": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "optional": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.15.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.14.2" + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.7.0", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.6", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3", + "uuid": "3.2.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true, + "optional": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.0.9" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.3" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "2.6.0", + "osenv": "0.1.5", + "semver": "5.5.0", + "validate-npm-package-name": "3.0.0" + } + }, + "npm-registry-client": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.5.1.tgz", + "integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", + "dev": true, + "requires": { + "concat-stream": "1.6.2", + "graceful-fs": "4.1.11", + "normalize-package-data": "2.4.0", + "npm-package-arg": "6.1.0", + "npmlog": "4.1.2", + "once": "1.4.0", + "request": "2.87.0", + "retry": "0.10.1", + "safe-buffer": "5.1.2", + "semver": "5.5.0", + "slide": "1.1.6", + "ssri": "5.3.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.5", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "1.0.0" + } + }, + "null-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", + "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=", + "dev": true + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.12.0" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "3.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "0.0.8", + "wordwrap": "0.0.3" + }, + "dependencies": { + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + } + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "options": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", + "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", + "dev": true + }, + "original": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz", + "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", + "dev": true, + "requires": { + "url-parse": "1.4.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "optional": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.3.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.16" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "parsejson": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", + "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "dev": true, + "requires": { + "better-assert": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "dev": true, + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "dev": true, + "requires": { + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", + "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "dev": true, + "requires": { + "chalk": "2.4.1", + "source-map": "0.6.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-import": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", + "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "dev": true, + "requires": { + "postcss": "6.0.22", + "postcss-value-parser": "3.3.0", + "read-cache": "1.0.0", + "resolve": "1.7.1" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.5.tgz", + "integrity": "sha512-pV7kB5neJ0/1tZ8L1uGOBNTVBCSCXQoIsZMsrwvO8V2rKGa2tBl/f80GGVxow2jJnRJ2w1ocx693EKhZAb9Isg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.22", + "postcss-load-config": "1.2.0", + "schema-utils": "0.4.5" + } + }, + "postcss-url": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.2.tgz", + "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==", + "dev": true, + "requires": { + "mime": "1.6.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "postcss": "6.0.22", + "xxhashjs": "0.2.2" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "2.0.1", + "utila": "0.4.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dev": true, + "optional": true, + "requires": { + "asap": "2.0.6" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "protractor": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.2.tgz", + "integrity": "sha512-pw4uwwiy5lHZjIguxNpkEwJJa7hVz+bJsvaTI+IbXlfn2qXwzbF8eghW/RmrZwE2sGx82I8etb8lVjQ+JrjejA==", + "dev": true, + "requires": { + "@types/node": "6.0.112", + "@types/q": "0.0.32", + "@types/selenium-webdriver": "2.53.43", + "blocking-proxy": "1.0.1", + "chalk": "1.1.3", + "glob": "7.1.2", + "jasmine": "2.8.0", + "jasminewd2": "2.2.0", + "optimist": "0.6.1", + "q": "1.4.1", + "saucelabs": "1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "0.4.18", + "webdriver-js-extender": "1.0.0", + "webdriver-manager": "12.0.6" + }, + "dependencies": { + "@types/node": { + "version": "6.0.112", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.112.tgz", + "integrity": "sha512-HnekQWq9t3Gl5aBYYi8sGyOWm85M5ub2llMrpQkRY94eJEUhsUr8qYNaeefv22cxxm+D67a+5zIzpl+dpFxdjQ==", + "dev": true + }, + "adm-zip": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", + "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "webdriver-manager": { + "version": "12.0.6", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", + "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", + "dev": true, + "requires": { + "adm-zip": "0.4.11", + "chalk": "1.1.3", + "del": "2.2.2", + "glob": "7.1.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "q": "1.4.1", + "request": "2.87.0", + "rimraf": "2.6.2", + "semver": "5.5.0", + "xml2js": "0.4.19" + } + } + } + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "dev": true, + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "3.6.0", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "4.0.0", + "kind-of": "6.0.2", + "math-random": "1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "raw-loader": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", + "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + }, + "dependencies": { + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reflect-metadata": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.1.4", + "htmlparser2": "3.3.0", + "strip-ansi": "3.0.1", + "utila": "0.3.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "optional": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "rxjs": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", + "integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", + "requires": { + "tslib": "1.9.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "optional": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.10", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true, + "optional": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + } + } + } + }, + "sass-loader": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.3.tgz", + "integrity": "sha512-iaSFtQcGo4SSgDw5Aes5p4VTrA5jCGSA7sGmhPIcOloBlgI1VktM2MUrk2IHHjbNagckXlPz+HWq1vAAPrcYxA==", + "dev": true, + "requires": { + "clone-deep": "2.0.2", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "neo-async": "2.5.1", + "pify": "3.0.0" + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "2.2.1" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "schema-utils": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", + "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "dev": true, + "requires": { + "ajv": "6.4.0", + "ajv-keywords": "3.2.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "optional": true, + "requires": { + "js-base64": "2.4.5", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "optional": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selenium-webdriver": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz", + "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", + "dev": true, + "requires": { + "jszip": "3.1.5", + "rimraf": "2.6.2", + "tmp": "0.0.30", + "xml2js": "0.4.19" + }, + "dependencies": { + "tmp": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, + "selfsigned": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", + "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "semver-intersect": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.3.1.tgz", + "integrity": "sha1-j6hKnhAovSOeRTDRo+GB5pjYhLo=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "1.3.5", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.18", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "silent-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", + "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", + "dev": true, + "requires": { + "debug": "2.6.9" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "1.0.2" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "socket.io": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "dev": true, + "requires": { + "debug": "2.3.3", + "engine.io": "1.8.3", + "has-binary": "0.1.7", + "object-assign": "4.1.0", + "socket.io-adapter": "0.5.0", + "socket.io-client": "1.7.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + }, + "object-assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "dev": true + } + } + }, + "socket.io-adapter": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", + "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", + "dev": true, + "requires": { + "debug": "2.3.3", + "socket.io-parser": "2.3.1" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-client": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.3.3", + "engine.io-client": "1.8.3", + "has-binary": "0.1.7", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseuri": "0.0.5", + "socket.io-parser": "2.3.1", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", + "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "dev": true, + "requires": { + "ms": "0.7.2" + } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", + "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "dev": true, + "requires": { + "component-emitter": "1.1.2", + "debug": "2.2.0", + "isarray": "0.0.1", + "json3": "3.3.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", + "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "dev": true + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "requires": { + "ms": "0.7.1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.2.1" + } + }, + "sockjs-client": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", + "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "dev": true, + "requires": { + "debug": "2.6.9", + "eventsource": "0.1.6", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.1" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": "0.7.0" + } + } + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "2.1.1", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "dev": true, + "requires": { + "buffer-from": "1.1.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "dev": true, + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "dev": true, + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "dev": true + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "2.6.9", + "handle-thing": "1.2.5", + "http-deceiver": "1.2.7", + "safe-buffer": "5.1.2", + "select-hose": "2.0.0", + "spdy-transport": "2.1.0" + } + }, + "spdy-transport": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2", + "wbuf": "1.7.3" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "3.0.2" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "stats-webpack-plugin": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.6.2.tgz", + "integrity": "sha1-LFlJtTHgf4eojm6k3PrFOqjHWis=", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.3.6" + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "stringstream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", + "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "style-loader": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", + "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" + } + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "dev": true, + "requires": { + "css-parse": "1.7.0", + "debug": "2.6.9", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "stylus-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-3.0.2.tgz", + "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "lodash.clonedeep": "4.5.0", + "when": "3.6.4" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "optional": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.6", + "xtend": "4.0.1" + } + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", + "dev": true + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "dev": true, + "requires": { + "punycode": "1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", + "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", + "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "dev": true, + "optional": true, + "requires": { + "glob": "6.0.4" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "optional": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "ts-node": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", + "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.4.1", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.6", + "yn": "2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "tsickle": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.29.0.tgz", + "integrity": "sha512-JpID0Lv8/irRtPmqJJxb5fCwfZhjZeKmav9Zna7UjqVuJoSbI49Wue/c2PPybX1SbRrjl7bbI/JsCl0dSUJygA==", + "dev": true, + "requires": { + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.6.1", + "source-map-support": "0.5.6" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "tslib": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", + "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" + }, + "tslint": { + "version": "5.9.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", + "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "builtin-modules": "1.1.1", + "chalk": "2.4.1", + "commander": "2.15.1", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.12.0", + "minimatch": "3.0.4", + "resolve": "1.7.1", + "semver": "5.5.0", + "tslib": "1.9.2", + "tsutils": "2.27.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + } + } + }, + "tsutils": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", + "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", + "dev": true, + "requires": { + "tslib": "1.9.2" + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "dev": true + }, + "uglify-js": { + "version": "3.3.28", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", + "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", + "dev": true, + "requires": { + "commander": "2.15.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", + "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "dev": true, + "requires": { + "cacache": "10.0.4", + "find-cache-dir": "1.0.0", + "schema-utils": "0.4.5", + "serialize-javascript": "1.5.0", + "source-map": "0.6.1", + "uglify-es": "3.3.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.6.0" + }, + "dependencies": { + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "2.13.0", + "source-map": "0.6.1" + } + } + } + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" + } + } + } + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", + "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", + "dev": true, + "requires": { + "punycode": "2.1.1" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", + "dev": true + }, + "url-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz", + "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "2.3.1", + "schema-utils": "0.4.5" + }, + "dependencies": { + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", + "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", + "dev": true, + "requires": { + "querystringify": "2.0.0", + "requires-port": "1.0.0" + } + }, + "use": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", + "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", + "dev": true, + "requires": { + "kind-of": "6.0.2" + } + }, + "useragent": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "tmp": "0.0.31" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "object.getownpropertydescriptors": "2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "dev": true, + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "2.0.3", + "graceful-fs": "4.1.11", + "neo-async": "2.5.1" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "webassemblyjs": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.4.3.tgz", + "integrity": "sha512-4lOV1Lv6olz0PJkDGQEp82HempAn147e6BXijWDzz9g7/2nSebVP9GVg62Fz5ZAs55mxq13GA0XLyvY8XkyDjg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/validation": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "@webassemblyjs/wast-parser": "1.4.3", + "long": "3.2.0" + } + }, + "webdriver-js-extender": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", + "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "dev": true, + "requires": { + "@types/selenium-webdriver": "2.53.43", + "selenium-webdriver": "2.53.3" + }, + "dependencies": { + "sax": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", + "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", + "dev": true + }, + "selenium-webdriver": { + "version": "2.53.3", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", + "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", + "dev": true, + "requires": { + "adm-zip": "0.4.4", + "rimraf": "2.6.2", + "tmp": "0.0.24", + "ws": "1.1.2", + "xml2js": "0.4.4" + } + }, + "tmp": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", + "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", + "dev": true + }, + "xml2js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", + "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", + "dev": true, + "requires": { + "sax": "0.6.1", + "xmlbuilder": "9.0.7" + } + } + } + }, + "webpack": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.3.tgz", + "integrity": "sha512-/hfAjBISycdK597lxONjKEFX7dSIU1PsYwC3XlXUXoykWBlv9QV5HnO+ql3HvrrgfBJ7WXdnjO9iGPR2aAc5sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.4.3", + "@webassemblyjs/wasm-edit": "1.4.3", + "@webassemblyjs/wasm-parser": "1.4.3", + "acorn": "5.6.2", + "acorn-dynamic-import": "3.0.0", + "ajv": "6.4.0", + "ajv-keywords": "3.2.0", + "chrome-trace-event": "0.1.3", + "enhanced-resolve": "4.0.0", + "eslint-scope": "3.7.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.1", + "neo-async": "2.5.1", + "node-libs-browser": "2.1.0", + "schema-utils": "0.4.5", + "tapable": "1.0.0", + "uglifyjs-webpack-plugin": "1.2.5", + "watchpack": "1.6.0", + "webpack-sources": "1.1.0" + } + }, + "webpack-core": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/webpack-core/-/webpack-core-0.6.9.tgz", + "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.4.4" + }, + "dependencies": { + "source-list-map": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz", + "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=", + "dev": true + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz", + "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", + "dev": true, + "requires": { + "loud-rejection": "1.6.0", + "memory-fs": "0.4.1", + "mime": "2.3.1", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "url-join": "4.0.0", + "webpack-log": "1.2.0" + }, + "dependencies": { + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz", + "integrity": "sha512-itcIUDFkHuj1/QQxzUFOEXXmxOj5bku2ScLEsOFPapnq2JRTm58gPdtnBphBJOKL2+M3p6+xygL64bI+3eyzzw==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.3", + "compression": "1.7.2", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.3", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.18.0", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.3.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.3", + "serve-index": "1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.1.4", + "spdy": "3.4.7", + "strip-ansi": "3.0.1", + "supports-color": "5.4.0", + "webpack-dev-middleware": "3.1.3", + "webpack-log": "1.2.0", + "yargs": "11.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yargs": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "dev": true, + "requires": { + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "2.1.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "9.0.2" + } + }, + "yargs-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "dev": true, + "requires": { + "camelcase": "4.1.0" + } + } + } + }, + "webpack-log": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", + "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", + "dev": true, + "requires": { + "chalk": "2.2.2", + "log-symbols": "2.2.0", + "loglevelnext": "1.0.5", + "uuid": "3.2.1" + } + }, + "webpack-merge": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", + "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "dev": true, + "requires": { + "lodash": "4.17.10" + } + }, + "webpack-sources": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.1.0-rc.4", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.4.tgz", + "integrity": "sha1-xcTj1pD50vZKlVDgeodn+Xlqpdg=", + "dev": true, + "requires": { + "webpack-core": "0.6.9" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "dev": true, + "requires": { + "http-parser-js": "0.4.13", + "websocket-extensions": "0.1.3" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true, + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "wtf-8": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", + "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "dev": true, + "requires": { + "sax": "1.2.4", + "xmlbuilder": "9.0.7" + }, + "dependencies": { + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", + "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dev": true, + "requires": { + "cuint": "0.2.2" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "optional": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "optional": true + } + } + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", + "dev": true + }, + "yn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yn/-/yn-2.0.0.tgz", + "integrity": "sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=", + "dev": true + }, + "zone.js": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", + "integrity": "sha512-W9Nj+UmBJG251wkCacIkETgra4QgBo/vgoEkb4a2uoLzpQG7qF9nzwoLXWU5xj3Fg2mxGvEDh47mg24vXccYjA==" + } + } +} diff --git a/client/package.json b/client/package.json index f2eb68a..7fbe561 100644 --- a/client/package.json +++ b/client/package.json @@ -1,60 +1,56 @@ { "name": "client", "version": "1.0.0", - "license": "ISC", "scripts": { "ng": "ng", - "start": "ng serve --proxy-config proxy.conf.json --open", - "build": "ng build --prod --aot --build-optimizer", - "test": "ng test --single-run --code-coverage", + "start": "ng serve --open", + "build": "ng build --aot --prod --service-worker", + "test": "ng test --watch=false --code-coverage", "lint": "ng lint", "e2e": "ng e2e" }, - "private": false, + "private": true, "dependencies": { - "@angular/animations": "^4.2.4", - "@angular/common": "^4.2.4", - "@angular/compiler": "^4.2.4", - "@angular/core": "^4.2.4", - "@angular/forms": "^4.2.4", - "@angular/http": "^4.2.4", - "@angular/material": "^2.0.0-beta.8", - "@angular/platform-browser": "^4.2.4", - "@angular/platform-browser-dynamic": "^4.2.4", - "@angular/router": "^4.2.4", - "@angular/service-worker": "^1.0.0-beta.16", - "@ngrx/core": "^1.2.0", - "@ngrx/effects": "^4.0.5", - "@ngrx/store": "^4.0.3", - "core-js": "^2.4.1", + "@angular/animations": "^6.0.3", + "@angular/cdk": "^6.2.1", + "@angular/common": "^6.0.3", + "@angular/compiler": "^6.0.3", + "@angular/core": "^6.0.3", + "@angular/forms": "^6.0.3", + "@angular/http": "^6.0.3", + "@angular/material": "^6.2.1", + "@angular/platform-browser": "^6.0.3", + "@angular/platform-browser-dynamic": "^6.0.3", + "@angular/router": "^6.0.3", + "@ngrx/effects": "^6.0.1", + "@ngrx/entity": "^6.0.1", + "@ngrx/store": "^6.0.1", + "core-js": "^2.5.4", "hammerjs": "^2.0.8", - "reselect": "^3.0.1", - "rxjs": "^5.4.2", - "zone.js": "^0.8.14" + "rxjs": "^6.0.0", + "zone.js": "^0.8.26" }, "devDependencies": { - "@angular/cdk": "^2.0.0-beta.8", - "@angular/cli": "1.3.1", - "@angular/compiler-cli": "^4.2.4", - "@angular/language-service": "^4.2.4", - "@ngrx/store-devtools": "^4.0.0", - "@types/hammerjs": "^2.0.34", - "@types/jasmine": "~2.5.53", - "@types/jasminewd2": "~2.0.2", - "@types/node": "~6.0.60", - "codelyzer": "~3.1.1", - "jasmine-core": "~2.6.2", - "jasmine-spec-reporter": "~4.1.0", - "karma": "~1.7.0", - "karma-chrome-launcher": "~2.1.1", - "karma-cli": "~1.0.1", - "karma-coverage-istanbul-reporter": "^1.2.1", - "karma-jasmine": "~1.1.0", + "@angular-devkit/build-angular": "~0.6.8", + "@angular/cli": "~6.0.8", + "@angular/compiler-cli": "^6.0.3", + "@angular/language-service": "^6.0.3", + "@ngrx/schematics": "^6.0.1", + "@ngrx/store-devtools": "^6.0.1", + "@types/jasmine": "~2.8.6", + "@types/jasminewd2": "~2.0.3", + "@types/node": "~8.9.4", + "codelyzer": "~4.2.1", + "jasmine-core": "~2.99.1", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~1.7.1", + "karma-chrome-launcher": "~2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.0", + "karma-jasmine": "~1.1.1", "karma-jasmine-html-reporter": "^0.2.2", - "ngrx-store-freeze": "^0.1.9", - "protractor": "~5.1.2", - "ts-node": "~3.2.0", - "tslint": "~5.3.2", - "typescript": "~2.3.3" + "protractor": "~5.3.0", + "ts-node": "~5.0.1", + "tslint": "~5.9.1", + "typescript": "~2.7.2" } } diff --git a/client/proxy.conf.json b/client/proxy.conf.json deleted file mode 100644 index c7d3a2b..0000000 --- a/client/proxy.conf.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "/api": { - "target": "http://localhost:8000", - "secure": false - } -} diff --git a/client/src/app/actions/user.ts b/client/src/app/actions/user.ts deleted file mode 100644 index 9e04ba9..0000000 --- a/client/src/app/actions/user.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Action } from '@ngrx/store'; -import { User } from '../models/user'; - -export const LOAD_USER = '[User] Load User'; -export const LOAD_USER_SUCCESS = '[User] Load User Success'; - -export class LoadUserAction implements Action { - readonly type = LOAD_USER; - - constructor() { } -} - -export class LoadUserSuccessAction implements Action { - readonly type = LOAD_USER_SUCCESS; - - constructor(public payload: User[]) { } -} - -export type Actions - = LoadUserAction - | LoadUserSuccessAction; diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index cfa6c63..2eadf87 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -1,11 +1,9 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -import { UsersComponent } from './components/users/users.component'; - const routes: Routes = [ { path: '', redirectTo: 'users', pathMatch: 'full' }, - { path: 'users', component: UsersComponent }, + { path: 'users', loadChildren: './modules/users/users.module#UsersModule' }, ]; @NgModule({ diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index 77c0551..31eb30a 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -1,5 +1,4 @@ import { TestBed, async } from '@angular/core/testing'; -import { MaterialModule } from '@angular/material'; import { RouterTestingModule } from '@angular/router/testing'; import { AppComponent } from './app.component'; @@ -8,11 +7,10 @@ describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - MaterialModule, RouterTestingModule, ], declarations: [ - AppComponent + AppComponent, ], }).compileComponents(); })); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index bdb6c83..6f5a0a5 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; @Component({ - selector: 'app-root', + selector: 'client-root', template: ` `, diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index a2b7565..94d5317 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,48 +1,26 @@ -import 'hammerjs'; - import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; -import { HttpModule } from '@angular/http'; - -import { MaterialModule } from '@angular/material'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule } from '@ngrx/store'; -import { EffectsModule } from '@ngrx/effects'; +import { reducers, metaReducers } from './reducers'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; -import { reducers } from './reducers'; import { AppRoutingModule } from './app-routing.module'; - import { AppComponent } from './app.component'; -import { UsersComponent } from './components/users/users.component'; - -import { UserEffects } from './effects/user'; - -import { UserService } from './services/user.service'; import { environment } from '../environments/environment'; @NgModule({ declarations: [ AppComponent, - UsersComponent, ], imports: [ BrowserModule, - HttpModule, AppRoutingModule, - MaterialModule, - BrowserAnimationsModule, - StoreModule.forRoot(reducers), + StoreModule.forRoot(reducers, { metaReducers }), !environment.production ? StoreDevtoolsModule.instrument() : [], - EffectsModule.forRoot([ - UserEffects, - ]), - ], - providers: [ - UserService, ], + providers: [], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/client/src/app/components/users/users.component.html b/client/src/app/components/users/users.component.html deleted file mode 100644 index 359bdb7..0000000 --- a/client/src/app/components/users/users.component.html +++ /dev/null @@ -1,14 +0,0 @@ - - -

- {{ user.username }} - {{ user.email }} - - - -

{{ user.url }}

-
- - - -
diff --git a/client/src/app/components/users/users.component.scss b/client/src/app/components/users/users.component.scss deleted file mode 100644 index 024218a..0000000 --- a/client/src/app/components/users/users.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.example-card { - width: 300px; - display: inline-block; - margin: 15px; -} diff --git a/client/src/app/components/users/users.component.spec.ts b/client/src/app/components/users/users.component.spec.ts deleted file mode 100644 index 08a794e..0000000 --- a/client/src/app/components/users/users.component.spec.ts +++ /dev/null @@ -1,76 +0,0 @@ -import 'hammerjs'; -import { NO_ERRORS_SCHEMA } from '@angular/core'; -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; -import { By } from '@angular/platform-browser'; -import { DebugElement } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; -import { MaterialModule } from '@angular/material'; -import { reducers } from '../../reducers'; -import { StoreModule } from '@ngrx/store'; -import 'rxjs/add/observable/of'; - -import { UsersComponent } from './users.component'; - -describe('UsersComponent', () => { - let component: UsersComponent; - let fixture: ComponentFixture; - let debugs: DebugElement[]; - let element: HTMLElement; - const users: any = Observable.of([{ - url: 'http://localhost/nirgalon', - username: 'Nir Galon', - email: 'nir@example.com', - groups: ['admin'] - }, { - url: 'http://localhost/adisaar', - username: 'Adi Saar', - email: '', - groups: ['users'] - }]); - - beforeEach(async(() => { - TestBed.configureTestingModule({ - imports: [ - MaterialModule, - StoreModule.forRoot(reducers), - ], - declarations: [ UsersComponent ], - schemas: [ NO_ERRORS_SCHEMA ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UsersComponent); - component = fixture.componentInstance; - - // Create a dummy transaction. - component.user$ = users; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); - - it('should display first user email', () => { - element = fixture.debugElement.query(By.css('md-card-subtitle')).nativeElement; - expect(element.textContent).toContain('nir@example.com'); - }); - - it('should display users name', () => { - debugs = fixture.debugElement.queryAll(By.css('md-card-title')); - debugs.forEach((elem, index) => { - element = elem.nativeElement; - expect(element.textContent).toContain(users.value[index].username); - }); - }); - - it('should display the users url links', () => { - debugs = fixture.debugElement.queryAll(By.css('md-card-content > p')); - debugs.forEach((elem, index) => { - element = elem.nativeElement; - expect(element.textContent).toContain(users.value[index].url); - }); - }); -}); diff --git a/client/src/app/components/users/users.component.ts b/client/src/app/components/users/users.component.ts deleted file mode 100644 index b1c10d5..0000000 --- a/client/src/app/components/users/users.component.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Component, OnInit } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; -import { Store } from '@ngrx/store'; - -import * as fromRoot from '../../reducers'; -import * as userAction from '../../actions/user'; -import { User } from '../../models/user'; - -@Component({ - selector: 'app-users', - templateUrl: './users.component.html', - styleUrls: ['./users.component.scss'] -}) -export class UsersComponent implements OnInit { - public user$: Observable; - - constructor( - private store: Store, - ) { - this.user$ = store.select(fromRoot.getUsersEntities); - } - - ngOnInit() { - this.store.dispatch(new userAction.LoadUserAction()); - } - -} diff --git a/client/src/app/effects/user.spec.ts b/client/src/app/effects/user.spec.ts deleted file mode 100644 index 9624283..0000000 --- a/client/src/app/effects/user.spec.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { TestBed, inject } from '@angular/core/testing'; -import { provideMockActions } from '@ngrx/effects/testing'; -import { ReplaySubject } from 'rxjs/ReplaySubject'; -import { Observable } from 'rxjs/Observable'; - -import { Http, BaseRequestOptions } from '@angular/http'; -import { MockBackend } from '@angular/http/testing'; - -import { UserEffects } from './user'; -import { User } from '../models/user'; -import * as userAction from '../actions/user'; -import { UserService } from '../services/user.service'; - -describe('UserEffects', () => { - let effects: UserEffects; - const actions: Observable = Observable.of(''); - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - UserEffects, - provideMockActions(() => actions), - // other providers - UserService, - { - provide: Http, - useFactory: (mockBackend, options) => { - return new Http(mockBackend, options); - }, - deps: [MockBackend, BaseRequestOptions] - }, - MockBackend, - BaseRequestOptions, - ], - }); - - effects = TestBed.get(UserEffects); - }); - - it('should create the effects', inject([UserService], (service: UserService) => { - expect(service).toBeTruthy(); - })); - - it('loadQuarters$ should work', () => { - const user1 = { - url: 'www.nirgn.com', - username: 'nirgn', - email: 'nirgn@example.com', - groups: [ - 'admin' - ], - } as User; - const user2 = { - url: 'www.adisaar.com', - username: 'adisaar', - email: 'adisaar@example.com', - groups: [ - 'user' - ] - } as User; - const users = [user1, user2]; - - const action = new userAction.LoadUserAction(); - const completion = new userAction.LoadUserSuccessAction(users); - const someAction = new ReplaySubject(1); - someAction.next(action); - - effects.loadUser$.subscribe(result => { - expect(result).toBe(completion); - }); - }); -}); diff --git a/client/src/app/effects/user.ts b/client/src/app/effects/user.ts deleted file mode 100644 index 67bc190..0000000 --- a/client/src/app/effects/user.ts +++ /dev/null @@ -1,24 +0,0 @@ -import 'rxjs/add/operator/switchMap'; -import { Injectable } from '@angular/core'; -import { Effect, Actions } from '@ngrx/effects'; -import { Action } from '@ngrx/store'; -import { Observable } from 'rxjs/Observable'; - -import { UserService } from '../services/user.service'; -import * as user from '../actions/user'; - -@Injectable() -export class UserEffects { - constructor( - private actions$: Actions, - private userService: UserService - ) { } - - @Effect() - loadUser$: Observable= this.actions$ - .ofType(user.LOAD_USER) - .switchMap(_ => this.userService.getUsers() - .map(users => new user.LoadUserSuccessAction(users)) - // .catch(error => Observable.of(getPostsFail(error))) - ); -} diff --git a/client/src/app/models/user.ts b/client/src/app/models/user.ts deleted file mode 100644 index 042ec22..0000000 --- a/client/src/app/models/user.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface User { - url: string; - username: string; - email: string; - groups: Array; -} - -export interface UserResponse { - count: number; - next: string | null; - previous: string | null; - results: User[]; -} diff --git a/client/src/app/reducers/index.ts b/client/src/app/reducers/index.ts index 01e9635..869004e 100644 --- a/client/src/app/reducers/index.ts +++ b/client/src/app/reducers/index.ts @@ -1,43 +1,20 @@ import { + ActionReducer, ActionReducerMap, - createSelector, createFeatureSelector, - ActionReducer, + createSelector, + MetaReducer } from '@ngrx/store'; import { environment } from '../../environments/environment'; +import * as fromUsers from '../users/users.reducer'; -/** - * Every reducer module's default export is the reducer function itself. In - * addition, each module should export a type or interface that describes - * the state of the reducer plus any selector functions. The `* as` - * notation packages up all of the exports into a single object. - */ - -import * as fromUser from './user'; - -/** - * As mentioned, we treat each reducer like a table in a database. This means - * our top level state interface is just a map of keys to inner state types. - */ export interface State { - users: fromUser.State; + users: fromUsers.State; } -/** - * Our state is composed of a map of action reducer functions. - * These reducer functions are called with each dispatched action - * and the current or initial state and return a new immutable state. - */ export const reducers: ActionReducerMap = { - users: fromUser.reducer, + users: fromUsers.reducer, }; -/** - * Layout Reducers - */ -export const getUsersState = createFeatureSelector('users'); -export const getUsersEntities = createSelector( - getUsersState, - fromUser.getEntities -); +export const metaReducers: MetaReducer[] = !environment.production ? [] : []; diff --git a/client/src/app/reducers/user.spec.ts b/client/src/app/reducers/user.spec.ts deleted file mode 100644 index 207ae03..0000000 --- a/client/src/app/reducers/user.spec.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { reducer } from './user'; -import * as fromUsers from './user'; -import { - LoadUserAction, - LoadUserSuccessAction, -} from '../actions/user'; -import { User } from '../models/user'; - -describe('UsersReducer', () => { - describe('undefined action', () => { - it('should return the default state', () => { - const action = {} as any; - - const result = reducer(undefined, action); - expect(result).toEqual(fromUsers.initialState); - }); - }); - - describe('LOAD_USER & LOAD_USER_SUCCESS', () => { - function noExistingUsers(action: any) { - const noUser = { - url: '', - username: '', - email: '', - groups: [], - } as User; - const createAction = new action([noUser]); - - const expectedResult = { - entities: [noUser], - }; - - const result = reducer(fromUsers.initialState, createAction); - expect(result).toEqual(expectedResult); - } - - function existingUsers(action: any) { - const user1 = { - url: 'www.nirgn.com', - username: 'nirgn', - email: 'nirgn@example.com', - groups: [ - 'admin' - ], - } as User; - const user2 = { - url: 'www.adisaar.com', - username: 'adisaar', - email: 'adisaar@example.com', - groups: [ - 'user' - ] - } as User; - const initialState = { - entities: [user1, user2], - } as any; - - // should replace existing users - const user3 = { - url: 'www.avigalon.com', - username: 'avigalon', - email: 'avigalon@example.com', - groups: [ - 'user' - ] - } as User; - const createAction = new action([user3]); - - const expectedResult = { - entities: [user3] - }; - - const result = reducer(initialState, createAction); - expect(result).toEqual(expectedResult); - } - - it('should add all users in the payload when none exist', () => { - noExistingUsers(LoadUserAction); - }); - - it('should add only new users when users already exist', () => { - existingUsers(LoadUserSuccessAction); - }); - }); - - describe('Selections', () => { - const user1 = { - url: 'www.nirgn.com', - username: 'nirgn', - email: 'nirgn@example.com', - groups: [ - 'admin' - ], - } as User; - const user2 = { - url: 'www.adisaar.com', - username: 'adisaar', - email: 'adisaar@example.com', - groups: [ - 'user' - ] - } as User; - const state: fromUsers.State = { - entities: [user1, user2], - }; - - describe('getEntities', () => { - it('should return entities', () => { - const result = fromUsers.getEntities(state); - expect(result).toBe(state.entities); - }); - }); - }); -}); diff --git a/client/src/app/reducers/user.ts b/client/src/app/reducers/user.ts deleted file mode 100644 index b87b6d2..0000000 --- a/client/src/app/reducers/user.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { User } from '../models/user'; -import * as user from '../actions/user'; - -export interface State { - entities: User[]; -} - -export const initialState: State = { - entities: [{ - url: '', - username: '', - email: '', - groups: [], - }], -}; - -export function reducer(state = initialState, action: user.Actions): State { - switch (action.type) { - case user.LOAD_USER: { - return initialState; - } - - case user.LOAD_USER_SUCCESS: { - const newEntities = { entities: action.payload }; - - return Object.assign({}, state, newEntities); - } - - default: { - return state; - } - } -} - -export const getEntities = (state: State) => state.entities; diff --git a/client/src/app/services/user.service.spec.ts b/client/src/app/services/user.service.spec.ts deleted file mode 100644 index 933d0b0..0000000 --- a/client/src/app/services/user.service.spec.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { TestBed, async, inject } from '@angular/core/testing'; -import { HttpModule, Http, BaseRequestOptions, Response, ResponseOptions } from '@angular/http'; -import { MockBackend } from '@angular/http/testing'; - -import { UserResponse, User } from '../models/user'; -import { UserService } from './user.service'; - -describe('UserService', () => { - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [HttpModule], - providers: [ - UserService, - { - provide: Http, - useFactory: (mockBackend, options) => { - return new Http(mockBackend, options); - }, - deps: [MockBackend, BaseRequestOptions] - }, - MockBackend, - BaseRequestOptions, - ] - }); - }); - - it('should create the service', inject([UserService], (service: UserService) => { - expect(service).toBeTruthy(); - })); - - it('should GET all the users', - inject([UserService, MockBackend], (service: UserService, mockBackend: MockBackend) => { - const user1 = { - 'url': 'http://localhost:8000/api/users/2/', - 'username': 'nir', - 'email': '', - 'groups': [] - } as User; - const user2 = { - 'url': 'http://localhost:8000/api/users/1/', - 'username': 'admin', - 'email': 'admin@example.com', - 'groups': [] - } as User; - const mockResponse: UserResponse = { - count: 2, - next: null, - previous: null, - results: [user1, user2], - }; - - mockBackend.connections.subscribe((connection) => { - connection.mockRespond(new Response(new ResponseOptions({ - body: JSON.stringify(mockResponse) - }))); - }); - - service.getUsers().subscribe(users => { - expect(users.length).toEqual(2); - expect(users[0].username).toEqual('nir'); - expect(users[0].url).toEqual('http://localhost:8000/api/users/2/'); - expect(users[1].username).toEqual('admin'); - expect(users[1].email).toEqual('admin@example.com'); - }); - })); - -}); diff --git a/client/src/app/services/user.service.ts b/client/src/app/services/user.service.ts deleted file mode 100644 index 260e5c2..0000000 --- a/client/src/app/services/user.service.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Injectable } from '@angular/core'; -import { Http, Response, Headers, RequestOptions } from '@angular/http'; -import { Observable } from 'rxjs/Rx'; - -import { environment } from '../../environments/environment'; -import { UserResponse, User } from '../models/user'; - -@Injectable() -export class UserService { - - constructor( - private http: Http, - ) { } - - private appendToken(): RequestOptions { - const headers = new Headers(); - headers.append('Authorization', `Basic ${btoa('admin:pass')}`); - return new RequestOptions({ headers: headers }); - } - - getUsers(): Observable { - const options = this.appendToken(); - - return this.http.get(`${environment.server}/api/users`, options) - .map(res => res.json()) - .map(body => body.results) - .catch(this.handleError); - } - - private handleError(error: Response) { - return Observable.throw(error.json().error || 'Server error'); - } -} diff --git a/client/src/app/users/actions/users.actions.spec.ts b/client/src/app/users/actions/users.actions.spec.ts new file mode 100644 index 0000000..e351a45 --- /dev/null +++ b/client/src/app/users/actions/users.actions.spec.ts @@ -0,0 +1,31 @@ +import { + UsersActionTypes, + LoadUsersAction, + LoadUsersSuccessAction, + LoadUsersFailedAction, +} from './users.actions'; + +import { User } from '../models/user.model'; + +describe('Load Users Actions', () => { + it('should create an action through LoadUsersAction', () => { + const action = new LoadUsersAction(); + + expect(action.type).toEqual(UsersActionTypes.LoadUsers); + }); + + it('should create an action through LoadAllMonitorsSuccessAction', () => { + const payload: User[] = [{ + + }]; + + const action = new LoadUsersSuccessAction(payload); + expect(action.type).toEqual(UsersActionTypes.LoadUsersSuccess, payload); + }); + + it('should create an action through LoadUsersFailedAction', () => { + const payload: any = 'Error'; + const action = new LoadUsersFailedAction(payload); + expect(action.type).toEqual(UsersActionTypes.LoadUsersFailed, payload); + }); +}); diff --git a/client/src/app/users/actions/users.actions.ts b/client/src/app/users/actions/users.actions.ts new file mode 100644 index 0000000..9376984 --- /dev/null +++ b/client/src/app/users/actions/users.actions.ts @@ -0,0 +1,32 @@ +import { Action } from '@ngrx/store'; + +import { User } from '../models/user.model'; + +export enum UsersActionTypes { + LoadUsers = '[Users] Load All Users', + LoadUsersSuccess = '[Users] Load All Users Success', + LoadUsersFailed = '[Users] Load All Users Failed', +} + +export class LoadUsersAction implements Action { + readonly type = UsersActionTypes.LoadUsers; + + constructor() {} +} + +export class LoadUsersSuccessAction implements Action { + readonly type = UsersActionTypes.LoadUsersSuccess; + + constructor(public payload: User[]) {} +} + +export class LoadUsersFailedAction implements Action { + readonly type = UsersActionTypes.LoadUsersFailed; + + constructor(public payload: any) {} +} + +export type UsersActions + = LoadUsersAction + | LoadUsersSuccessAction + | LoadUsersFailedAction; diff --git a/client/src/app/users/components/user/user.component.css b/client/src/app/users/components/user/user.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/users/components/user/user.component.html b/client/src/app/users/components/user/user.component.html new file mode 100644 index 0000000..5e7fd58 --- /dev/null +++ b/client/src/app/users/components/user/user.component.html @@ -0,0 +1,3 @@ +

+ user works! +

diff --git a/client/src/app/users/components/user/user.component.spec.ts b/client/src/app/users/components/user/user.component.spec.ts new file mode 100644 index 0000000..dd3b1d7 --- /dev/null +++ b/client/src/app/users/components/user/user.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserComponent } from './user.component'; + +describe('UserComponent', () => { + let component: UserComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UserComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UserComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/users/components/user/user.component.ts b/client/src/app/users/components/user/user.component.ts new file mode 100644 index 0000000..8a33d00 --- /dev/null +++ b/client/src/app/users/components/user/user.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'client-user', + templateUrl: './user.component.html', + styleUrls: ['./user.component.css'] +}) +export class UserComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/client/src/app/users/components/users-list/users-list.component.css b/client/src/app/users/components/users-list/users-list.component.css new file mode 100644 index 0000000..e69de29 diff --git a/client/src/app/users/components/users-list/users-list.component.html b/client/src/app/users/components/users-list/users-list.component.html new file mode 100644 index 0000000..da587c0 --- /dev/null +++ b/client/src/app/users/components/users-list/users-list.component.html @@ -0,0 +1,3 @@ +

+ users-list works! +

diff --git a/client/src/app/users/components/users-list/users-list.component.spec.ts b/client/src/app/users/components/users-list/users-list.component.spec.ts new file mode 100644 index 0000000..23d8c11 --- /dev/null +++ b/client/src/app/users/components/users-list/users-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UsersListComponent } from './users-list.component'; + +describe('UsersListComponent', () => { + let component: UsersListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ UsersListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(UsersListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/client/src/app/users/components/users-list/users-list.component.ts b/client/src/app/users/components/users-list/users-list.component.ts new file mode 100644 index 0000000..bf16327 --- /dev/null +++ b/client/src/app/users/components/users-list/users-list.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'client-users-list', + templateUrl: './users-list.component.html', + styleUrls: ['./users-list.component.css'] +}) +export class UsersListComponent implements OnInit { + + constructor() { } + + ngOnInit() { + } + +} diff --git a/client/src/app/users/effects/users.effects.spec.ts b/client/src/app/users/effects/users.effects.spec.ts new file mode 100644 index 0000000..50333ad --- /dev/null +++ b/client/src/app/users/effects/users.effects.spec.ts @@ -0,0 +1,25 @@ +import { TestBed, inject } from '@angular/core/testing'; +import { provideMockActions } from '@ngrx/effects/testing'; +import { Observable } from 'rxjs'; + +import { UsersEffects } from './users.effects'; + +describe('UsersService', () => { + let actions$: Observable; + let effects: UsersEffects; + + beforeEach(() => { + TestBed.configureTestingModule({ + providers: [ + UsersEffects, + provideMockActions(() => actions$) + ] + }); + + effects = TestBed.get(UsersEffects); + }); + + it('should be created', () => { + expect(effects).toBeTruthy(); + }); +}); diff --git a/client/src/app/users/effects/users.effects.ts b/client/src/app/users/effects/users.effects.ts new file mode 100644 index 0000000..672f4a1 --- /dev/null +++ b/client/src/app/users/effects/users.effects.ts @@ -0,0 +1,35 @@ +import { Action } from '@ngrx/store'; +import { of, Observable } from 'rxjs'; +import { Injectable } from '@angular/core'; +import { Actions, Effect, ofType } from '@ngrx/effects'; +import { switchMap, map, catchError } from 'rxjs/operators'; + +import { + UsersActions, + UsersActionTypes, + LoadUsersAction, + LoadUsersSuccessAction, + LoadUsersFailedAction, +} from '../actions/users.actions'; +import { UsersService } from '../services/users.service'; + +@Injectable() +export class UsersEffects { + + @Effect() + loadAllMonitors$: Observable = this.actions$.pipe( + ofType(UsersActionTypes.LoadUsers), + switchMap(_ => { + return this.usersService.getAllUsers() + .pipe( + map(data => new LoadUsersSuccessAction(data)), + catchError(err => of(new LoadUsersFailedAction(err))) + ); + }) + ); + + constructor( + private actions$: Actions, + private usersService: UsersService, + ) {} +} diff --git a/client/src/app/users/models/user.model.ts b/client/src/app/users/models/user.model.ts new file mode 100644 index 0000000..7cd7859 --- /dev/null +++ b/client/src/app/users/models/user.model.ts @@ -0,0 +1,3 @@ +export interface User { + _id?: string; +} diff --git a/client/src/app/users/reducers/users.reducer.spec.ts b/client/src/app/users/reducers/users.reducer.spec.ts new file mode 100644 index 0000000..c574802 --- /dev/null +++ b/client/src/app/users/reducers/users.reducer.spec.ts @@ -0,0 +1,13 @@ +import { reducer, initialState } from './users.reducer'; + +describe('Users Reducer', () => { + describe('unknown action', () => { + it('should return the initial state', () => { + const action = {} as any; + + const result = reducer(initialState, action); + + expect(result).toBe(initialState); + }); + }); +}); diff --git a/client/src/app/users/reducers/users.reducer.ts b/client/src/app/users/reducers/users.reducer.ts new file mode 100644 index 0000000..dea3e61 --- /dev/null +++ b/client/src/app/users/reducers/users.reducer.ts @@ -0,0 +1,24 @@ +import { Action } from '@ngrx/store'; +import { UsersActions, UsersActionTypes } from '../actions/users.actions'; + +export interface State { + +} + +export const initialState: State = { + +}; + +export function reducer(state = initialState, action: UsersActions): State { + switch (action.type) { + + case UsersActionTypes.LoadUsers: + return state; + + case UsersActionTypes.LoadUsersSuccess: + return state; + + default: + return state; + } +} diff --git a/client/src/app/users/services/users.service.spec.ts b/client/src/app/users/services/users.service.spec.ts new file mode 100644 index 0000000..1145f9a --- /dev/null +++ b/client/src/app/users/services/users.service.spec.ts @@ -0,0 +1,42 @@ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +import { UsersService } from './users.service'; +import { User } from '../models/user.model'; +import { environment } from '../../../environments/environment'; + + + +describe('UsersService', () => { + let injector: TestBed; + let service: UsersService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ HttpClientTestingModule ], + providers: [ UsersService ], + }); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return an array of users list from getAllUsers', () => { + const usersResp: User[] = [{ + }]; + + service.getAllUsers().subscribe(resMonitors => { + expect(resMonitors).toEqual(usersResp); + }); + + const req = httpMock.expectOne(`${environment.backend}/users`); + expect(req.request.method).toBe('GET'); + req.flush(usersResp); + }); +}); diff --git a/client/src/app/users/services/users.service.ts b/client/src/app/users/services/users.service.ts new file mode 100644 index 0000000..dab8576 --- /dev/null +++ b/client/src/app/users/services/users.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { HttpClient } from '@angular/common/http'; + +import { User } from '../models/user.model'; + +import { environment } from '../../../environments/environment'; + +@Injectable({ + providedIn: 'root' +}) +export class UsersService { + + constructor( + private http: HttpClient, + ) { } + + getAllUsers(): Observable { + return this.http.get(`${environment.backend}/users`); + } +} diff --git a/client/src/app/users/users-routing.module.ts b/client/src/app/users/users-routing.module.ts new file mode 100644 index 0000000..b059875 --- /dev/null +++ b/client/src/app/users/users-routing.module.ts @@ -0,0 +1,10 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +const routes: Routes = []; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class UsersRoutingModule { } diff --git a/client/src/app/users/users.module.spec.ts b/client/src/app/users/users.module.spec.ts new file mode 100644 index 0000000..ed82f11 --- /dev/null +++ b/client/src/app/users/users.module.spec.ts @@ -0,0 +1,13 @@ +import { UsersModule } from './users.module'; + +describe('UsersModule', () => { + let usersModule: UsersModule; + + beforeEach(() => { + usersModule = new UsersModule(); + }); + + it('should create an instance', () => { + expect(usersModule).toBeTruthy(); + }); +}); diff --git a/client/src/app/users/users.module.ts b/client/src/app/users/users.module.ts new file mode 100644 index 0000000..d945195 --- /dev/null +++ b/client/src/app/users/users.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { UsersRoutingModule } from './users-routing.module'; + +import { UserComponent } from './components/user/user.component'; +import { UsersListComponent } from './components/users-list/users-list.component'; + +@NgModule({ + imports: [ + CommonModule, + UsersRoutingModule, + ], + declarations: [ + UserComponent, + UsersListComponent, + ] +}) +export class UsersModule { } diff --git a/client/src/assets/person-icon.png b/client/src/assets/person-icon.png deleted file mode 100644 index 297ac7dd78d37ae8a6390dac0601059d0da214b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29454 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 b{;%nY=;O65-&ZDI#If&`W@U7~srv9=gAtp| diff --git a/client/src/browserslist b/client/src/browserslist new file mode 100644 index 0000000..8e09ab4 --- /dev/null +++ b/client/src/browserslist @@ -0,0 +1,9 @@ +# This file is currently used by autoprefixer to adjust CSS to support the below specified browsers +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries +# For IE 9-11 support, please uncomment the last line of the file and adjust as needed +> 0.5% +last 2 versions +Firefox ESR +not dead +# IE 9-11 \ No newline at end of file diff --git a/client/src/environments/environment.prod.ts b/client/src/environments/environment.prod.ts index 176c834..895c1cc 100644 --- a/client/src/environments/environment.prod.ts +++ b/client/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ export const environment = { production: true, - server: 'http://localhost:8000' + backend: '', }; diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index e7e0f32..a4f6edd 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts @@ -1,9 +1,16 @@ -// The file contents for the current environment will overwrite these during build. -// The build system defaults to the dev environment which uses `environment.ts`, but if you do -// `ng build --env=prod` then `environment.prod.ts` will be used instead. -// The list of which env maps to which file can be found in `.angular-cli.json`. +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. export const environment = { production: false, - server: 'http://localhost:8000' + backend: '', }; + +/* + * In development mode, to ignore zone related error stack frames such as + * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can + * import the following file, but please comment it out in production mode + * because it will have performance impact when throw error + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/client/src/index.html b/client/src/index.html index 0b914e0..b885a51 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -7,9 +7,8 @@ - - Loading... + diff --git a/client/karma.conf.js b/client/src/karma.conf.js similarity index 75% rename from client/karma.conf.js rename to client/src/karma.conf.js index af139fa..b6e0042 100644 --- a/client/karma.conf.js +++ b/client/src/karma.conf.js @@ -4,24 +4,22 @@ module.exports = function (config) { config.set({ basePath: '', - frameworks: ['jasmine', '@angular/cli'], + frameworks: ['jasmine', '@angular-devkit/build-angular'], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), require('karma-coverage-istanbul-reporter'), - require('@angular/cli/plugins/karma') + require('@angular-devkit/build-angular/plugins/karma') ], - client:{ + client: { clearContext: false // leave Jasmine Spec Runner output visible in browser }, coverageIstanbulReporter: { - reports: [ 'html', 'lcovonly' ], + dir: require('path').join(__dirname, '../coverage'), + reports: ['html', 'lcovonly'], fixWebpackSourcePaths: true }, - angularCli: { - environment: 'dev' - }, reporters: ['progress', 'kjhtml'], port: 9876, colors: true, @@ -30,4 +28,4 @@ module.exports = function (config) { browsers: ['Chrome'], singleRun: false }); -}; +}; \ No newline at end of file diff --git a/client/src/main.ts b/client/src/main.ts index a9ca1ca..91ec6da 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -8,4 +8,5 @@ if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule); +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.log(err)); diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index 7831e97..d310405 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts @@ -37,21 +37,39 @@ /** IE10 and IE11 requires the following for NgClass support on SVG elements */ // import 'classlist.js'; // Run `npm install --save classlist.js`. +/** IE10 and IE11 requires the following for the Reflect API. */ +// import 'core-js/es6/reflect'; + + /** Evergreen browsers require these. **/ -import 'core-js/es6/reflect'; +// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. import 'core-js/es7/reflect'; /** - * Required to support Web Animations `@angular/animation`. - * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). **/ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + */ + + // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + /* + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + */ +// (window as any).__Zone_enable_cross_context_check = true; /*************************************************************************************************** - * Zone JS is required by Angular itself. + * Zone JS is required by default for Angular itself. */ import 'zone.js/dist/zone'; // Included with Angular CLI. @@ -60,13 +78,3 @@ import 'zone.js/dist/zone'; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS */ - -/** - * Date, currency, decimal and percent pipes. - * Needed for: All but Chrome, Firefox, Edge, IE11 and Safari 10 - */ -// import 'intl'; // Run `npm install --save intl`. -/** - * Need to import at least one locale-data with intl. - */ -// import 'intl/locale-data/jsonp/en'; diff --git a/client/src/styles.scss b/client/src/styles.scss index 5367e13..90d4ee0 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -1,25 +1 @@ /* You can add global styles to this file, and also import other style files */ -@import '~@angular/material/theming'; -// Plus imports for other components in your app. - -// Include the common styles for Angular Material. We include this here so that you only -// have to load a single css file for Angular Material in your app. -// Be sure that you only ever include this mixin once! -@include mat-core(); - -// Define the palettes for your theme using the Material Design palettes available in palette.scss -// (imported above). For each palette, you can optionally specify a default, lighter, and darker -// hue. -$candy-app-primary: mat-palette($mat-indigo); -$candy-app-accent: mat-palette($mat-pink, A200, A100, A400); - -// The warn palette is optional (defaults to red). -$candy-app-warn: mat-palette($mat-red); - -// Create the theme object (a Sass map containing all of the palettes). -$candy-app-theme: mat-light-theme($candy-app-primary, $candy-app-accent, $candy-app-warn); - -// Include theme styles for core and each component used in your app. -// Alternatively, you can import and @include the theme mixins for each component -// that you are using. -@include angular-material-theme($candy-app-theme); diff --git a/client/src/test.ts b/client/src/test.ts index cd612ee..1631789 100644 --- a/client/src/test.ts +++ b/client/src/test.ts @@ -1,24 +1,14 @@ // This file is required by karma.conf.js and loads recursively all the .spec and framework files -import 'zone.js/dist/long-stack-trace-zone'; -import 'zone.js/dist/proxy.js'; -import 'zone.js/dist/sync-test'; -import 'zone.js/dist/jasmine-patch'; -import 'zone.js/dist/async-test'; -import 'zone.js/dist/fake-async-test'; +import 'zone.js/dist/zone-testing'; import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing'; -// Unfortunately there's no typing for the `__karma__` variable. Just declare it as any. -declare const __karma__: any; declare const require: any; -// Prevent Karma from running prematurely. -__karma__.loaded = function () {}; - // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( BrowserDynamicTestingModule, @@ -28,5 +18,3 @@ getTestBed().initTestEnvironment( const context = require.context('./', true, /\.spec\.ts$/); // And load the modules. context.keys().map(context); -// Finally, start Karma to run the tests. -__karma__.start(); diff --git a/client/src/tsconfig.app.json b/client/src/tsconfig.app.json index 94e4d39..722c370 100644 --- a/client/src/tsconfig.app.json +++ b/client/src/tsconfig.app.json @@ -2,14 +2,11 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/app", - "baseUrl": "./", "module": "es2015", - "types": [ - "hammerjs" - ] + "types": [] }, "exclude": [ - "test.ts", + "src/test.ts", "**/*.spec.ts" ] } diff --git a/client/src/tsconfig.spec.json b/client/src/tsconfig.spec.json index 63d89ff..8f7cede 100644 --- a/client/src/tsconfig.spec.json +++ b/client/src/tsconfig.spec.json @@ -2,16 +2,15 @@ "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/spec", - "baseUrl": "./", "module": "commonjs", - "target": "es5", "types": [ "jasmine", "node" ] }, "files": [ - "test.ts" + "test.ts", + "polyfills.ts" ], "include": [ "**/*.spec.ts", diff --git a/client/src/tslint.json b/client/src/tslint.json new file mode 100644 index 0000000..546e376 --- /dev/null +++ b/client/src/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "client", + "camelCase" + ], + "component-selector": [ + true, + "element", + "client", + "kebab-case" + ] + } +} diff --git a/client/src/typings.d.ts b/client/src/typings.d.ts deleted file mode 100644 index ef5c7bd..0000000 --- a/client/src/typings.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -/* SystemJS module definition */ -declare var module: NodeModule; -interface NodeModule { - id: string; -} diff --git a/client/tsconfig.json b/client/tsconfig.json index a6c016b..ef44e28 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -1,6 +1,7 @@ { "compileOnSave": false, "compilerOptions": { + "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, diff --git a/client/tslint.json b/client/tslint.json index fc55c97..3ea984c 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -11,11 +11,14 @@ "check-space" ], "curly": true, + "deprecation": { + "severity": "warn" + }, "eofline": true, "forin": true, "import-blacklist": [ true, - "rxjs" + "rxjs/Rx" ], "import-spacing": true, "indent": [ @@ -69,7 +72,7 @@ "no-trailing-whitespace": true, "no-unnecessary-initializer": true, "no-unused-expression": true, - "no-use-before-declare": false, + "no-use-before-declare": true, "no-var-keyword": true, "object-literal-sort-keys": false, "one-line": [ @@ -103,7 +106,6 @@ "variable-declaration": "nospace" } ], - "typeof-compare": true, "unified-signatures": true, "variable-name": false, "whitespace": [ @@ -114,18 +116,7 @@ "check-separator", "check-type" ], - "directive-selector": [ - true, - "attribute", - "app", - "camelCase" - ], - "component-selector": [ - true, - "element", - "app", - "kebab-case" - ], + "no-output-on-prefix": true, "use-input-property-decorator": true, "use-output-property-decorator": true, "use-host-property-decorator": true, @@ -134,9 +125,6 @@ "use-life-cycle-interface": true, "use-pipe-transform-interface": true, "component-class-suffix": true, - "directive-class-suffix": true, - "no-access-missing-member": true, - "templates-use-public": true, - "invoke-injectable": true + "directive-class-suffix": true } } From 36dfac41cf268ddec55ce844a7d2cff7fd98ee8a Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Wed, 13 Jun 2018 11:15:56 +0300 Subject: [PATCH 30/35] Change backend to Sanic project(#85) --- server/Dockerfile | 21 --- server/Pipfile | 22 +++ server/Pipfile.lock | 154 +++++++++++++++++++++ server/README.md | 23 ++-- server/api/apps.py | 5 - server/api/serializers.py | 8 -- server/api/tests.py | 22 --- server/api/urls.py | 10 -- server/{config => api/users}/__init__.py | 0 server/api/users/model.py | 9 ++ server/api/users/routes.py | 8 ++ server/api/users/view.py | 50 +++++++ server/api/views.py | 19 --- server/config/local_settings.template | 13 -- server/config/settings.py | 168 ----------------------- server/config/urls.py | 26 ---- server/config/wsgi.py | 16 --- server/entrypoint.sh | 16 --- server/locustfile.py | 14 -- server/main.py | 25 ++++ server/manage.py | 22 --- server/requirements.txt | 26 ---- server/util/__init__.py | 0 server/util/middlewares.py | 25 ++++ 24 files changed, 308 insertions(+), 394 deletions(-) delete mode 100644 server/Dockerfile create mode 100644 server/Pipfile create mode 100644 server/Pipfile.lock delete mode 100644 server/api/apps.py delete mode 100644 server/api/serializers.py delete mode 100644 server/api/tests.py delete mode 100644 server/api/urls.py rename server/{config => api/users}/__init__.py (100%) create mode 100644 server/api/users/model.py create mode 100644 server/api/users/routes.py create mode 100644 server/api/users/view.py delete mode 100644 server/api/views.py delete mode 100644 server/config/local_settings.template delete mode 100644 server/config/settings.py delete mode 100644 server/config/urls.py delete mode 100644 server/config/wsgi.py delete mode 100644 server/entrypoint.sh delete mode 100644 server/locustfile.py create mode 100644 server/main.py delete mode 100755 server/manage.py delete mode 100644 server/requirements.txt create mode 100644 server/util/__init__.py create mode 100644 server/util/middlewares.py diff --git a/server/Dockerfile b/server/Dockerfile deleted file mode 100644 index 36ef76e..0000000 --- a/server/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM python:3-onbuild -MAINTAINER Nir Galon - -RUN useradd --user-group --create-home --shell /bin/false app - -ENV APP_NAME "server" -ENV APP_USER "app" -ENV HOME /home/$APP_USER -ENV APP_DIR $HOME/$APP_NAME - -WORKDIR $APP_DIR -COPY requirements.txt $APP_DIR/requirements.txt - -COPY . $APP_DIR -RUN chown -R $APP_USER:$APP_USER $HOME/* - -USER $APP_USER -WORKDIR $APP_DIR - -RUN chmod +x /home/app/server/entrypoint.sh -EXPOSE 8000 diff --git a/server/Pipfile b/server/Pipfile new file mode 100644 index 0000000..0b28f24 --- /dev/null +++ b/server/Pipfile @@ -0,0 +1,22 @@ +[[source]] + +url = "https://pypi.python.org/simple" +verify_ssl = true +name = "pypi" + + +[packages] + +sanic = "*" +aiopg = "*" +peewee-async = "*" +peewee = "*" + + +[dev-packages] + + + +[requires] + +python_version = "3.6" diff --git a/server/Pipfile.lock b/server/Pipfile.lock new file mode 100644 index 0000000..2dc0503 --- /dev/null +++ b/server/Pipfile.lock @@ -0,0 +1,154 @@ +{ + "_meta": { + "hash": { + "sha256": "829a6c65f70f1db3ab3b01009a2056846e4dfa90c450cc53eac229df20e90536" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiofiles": { + "hashes": [ + "sha256:25c66ea3872d05d53292a6b3f7fa0f86691512076446d83a505d227b5e76f668", + "sha256:852a493a877b73e11823bfd4e8e5ef2610d70d12c9eaed961bcd9124d8de8c10" + ], + "version": "==0.3.2" + }, + "aiopg": { + "hashes": [ + "sha256:7dee52e0fa4697bace62d39180df96e94a328ee96aa211c8e93c346b8ffd1bcc", + "sha256:a6a4c41938bb177e583c43cf47e2179e5822d3c175d5a99b165945eb4fba12ea" + ], + "version": "==0.14.0" + }, + "asyncio": { + "hashes": [ + "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41", + "sha256:b62c9157d36187eca799c378e572c969f0da87cd5fc42ca372d92cdb06e7e1de", + "sha256:c46a87b48213d7464f22d9a497b9eef8c1928b68320a2fa94240f969f6fec08c", + "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d" + ], + "markers": "python_version == '3.3'", + "version": "==3.4.3" + }, + "httptools": { + "hashes": [ + "sha256:04c7703bbef0e8ca28b09811547352b8c7c20549eab70dc24e536bb24fd2b7c5" + ], + "version": "==0.0.11" + }, + "peewee": { + "hashes": [ + "sha256:2342067f48a779e35956a44cd547df883dda35153daa9fe994d970585aaec281" + ], + "version": "==2.10.2" + }, + "peewee-async": { + "hashes": [ + "sha256:1376774637b6f5cfb9192a06380a8e987fed206e0e229bbadd50da6a4578557b", + "sha256:ab64a2a376033ce5621406b33735cb064659af05f5c2570af0fba08f6eab6282" + ], + "version": "==0.5.12" + }, + "psycopg2": { + "hashes": [ + "sha256:027ae518d0e3b8fff41990e598bc7774c3d08a3a20e9ecc0b59fb2aaaf152f7f", + "sha256:092a80da1b052a181b6e6c765849c9b32d46c5dac3b81bf8c9b83e697f3cdbe8", + "sha256:0b9851e798bae024ed1a2a6377a8dab4b8a128a56ed406f572f9f06194e4b275", + "sha256:179c52eb870110a8c1b460c86d4f696d58510ea025602cd3f81453746fccb94f", + "sha256:19983b77ec1fc2a210092aa0333ee48811fd9fb5f194c6cd5b927ed409aea5f8", + "sha256:1d90379d01d0dc50ae9b40c863933d87ff82d51dd7d52cea5d1cb7019afd72cd", + "sha256:27467fd5af1dcc0a82d72927113b8f92da8f44b2efbdb8906bd76face95b596d", + "sha256:32702e3bd8bfe12b36226ba9846ed9e22336fc4bd710039d594b36bd432ae255", + "sha256:33f9e1032095e1436fa9ec424abcbd4c170da934fb70e391c5d78275d0307c75", + "sha256:36030ca7f4b4519ee4f52a74edc4ec73c75abfb6ea1d80ac7480953d1c0aa3c3", + "sha256:363fbbf4189722fc46779be1fad2597e2c40b3f577dc618f353a46391cf5d235", + "sha256:6f302c486132f8dd11f143e919e236ea4467d53bf18c451cac577e6988ecbd05", + "sha256:733166464598c239323142c071fa4c9b91c14359176e5ae7e202db6bcc1d2eb5", + "sha256:7cbc3b21ce2f681ca9ad2d8c0901090b23a30c955e980ebf1006d41f37068a95", + "sha256:888bba7841116e529f407f15c6d28fe3ef0760df8c45257442ec2f14f161c871", + "sha256:8966829cb0d21a08a3c5ac971a2eb67c3927ae27c247300a8476554cc0ce2ae8", + "sha256:8bf51191d60f6987482ef0cfe8511bbf4877a5aa7f313d7b488b53189cf26209", + "sha256:8eb94c0625c529215b53c08fb4e461546e2f3fc96a49c13d5474b5ad7aeab6cf", + "sha256:8ebba5314c609a05c6955e5773c7e0e57b8dd817e4f751f30de729be58fa5e78", + "sha256:932a4c101af007cb3132b1f8a9ffef23386acc53dad46536dc5ba43a3235ae02", + "sha256:ad75fe10bea19ad2188c5cb5fc4cdf53ee808d9b44578c94a3cd1e9fc2beb656", + "sha256:aeaba399254ca79c299d9fe6aa811d3c3eac61458dee10270de7f4e71c624998", + "sha256:b178e0923c93393e16646155794521e063ec17b7cc9f943f15b7d4b39776ea2c", + "sha256:b68e89bb086a9476fa85298caab43f92d0a6af135a5f433d1f6b6d82cafa7b55", + "sha256:d74cf9234ba76426add5e123449be08993a9b13ff434c6efa3a07caa305a619f", + "sha256:f3d3a88128f0c219bdc5b2d9ccd496517199660cea021c560a3252116df91cbd", + "sha256:fe6a7f87356116f5ea840c65b032af17deef0e1a5c34013a2962dd6f99b860dd" + ], + "version": "==2.7.4" + }, + "sanic": { + "hashes": [ + "sha256:18a3bd729093ac93a245849c44045c505a11e6d36da5bf231cb986bfb1e3c14c", + "sha256:22b1a6f1dc55db8a136335cb0961afa95040ca78aa8c78425a40d91e8618e60e" + ], + "version": "==0.7.0" + }, + "singledispatch": { + "hashes": [ + "sha256:5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c", + "sha256:833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8" + ], + "markers": "python_version == '3.3'", + "version": "==3.4.0.3" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + }, + "ujson": { + "hashes": [ + "sha256:f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86" + ], + "version": "==1.35" + }, + "uvloop": { + "hashes": [ + "sha256:2d4aaae6e3b35416a82b52f7d41d7d366c8870627a923262e0654ab95e0a37da", + "sha256:3286e803eeb55413b4f1ef38f43a40340c490d3b7b1427ff2e50bacff7ee95a3", + "sha256:5aade4aa1f5508ca1aa26cd01ebaf1d638d06c9a326f78755643c4bcafff17a7", + "sha256:6fbcd4f5515d4a07da471261e75d30b7a6af3025413edd1bf68e56835534d32e", + "sha256:8b4c009b5cd8b2270bdccff288f6d162526bc80dc7fd142592f1761441ffc229", + "sha256:90f9d3ba56ddd554954feff381306ec7e8c31305fc8bf686277b7d8c46e09d68", + "sha256:f95fc54b281c87021ed931cdc18c6e5983bbd16b0369038354bef5210173d5f1" + ], + "version": "==0.10.1" + }, + "websockets": { + "hashes": [ + "sha256:0b7b561bcbf992edd54e961b89551b5b6073415a0446fe445bd6554d41dabb95", + "sha256:2469c98f2254878a49a6eda248d3ed8a89bbdca85cc316ff72ea15924cec9e1f", + "sha256:29b676568e4fcb1a05064473b96243ef4e9391f251b4c485cf7f93507787b459", + "sha256:2a05e42400de009c1c330167cd6d90b300d2364d2dd1e6539d01a6a22901967b", + "sha256:39241fb291c1648e33dc41208be876a5771466291f0f6f7bff8f6732373084bd", + "sha256:43c332fc331541c57d40c124089b270d668c25a6b04908bd688969375db7327f", + "sha256:480259ec6e80f28859f23b5c231beb856fb96ab30e64ee621fdaf27da1515604", + "sha256:9049ec652713f5132b512d3498c2d37264580714ccc95dbc0f7f9622c3f6da7e", + "sha256:a17c45716178a42cc8f66f587507f01e169a75556749d88f714e4c1d295885d1", + "sha256:a49d315db5a7a19d55422e1678e8a1c3b9661d7296bef3179fa620cf80b12674", + "sha256:a911beb8149d7dae9d4c942927c448c05c41dfaa9c002a6bc26e269df932769b", + "sha256:cf34479130704797ce28a478f0b5985abe71ea90999a1c956e15fe0b0b11d0dc", + "sha256:d3724acff61ee1029fefc614cf005982338b033998a0b71fbb13a0a2fd99ab6f" + ], + "version": "==5.0.1" + } + }, + "develop": {} +} diff --git a/server/README.md b/server/README.md index 13d441a..ec4d118 100644 --- a/server/README.md +++ b/server/README.md @@ -1,21 +1,28 @@ ## Server -The server (backend) side of the project written [Python](https://www.python.org/) using [Django 1.11](https://www.djangoproject.com/), [Django REST framework](http://www.django-rest-framework.org/). +The server (backend) side of the project written [Python](https://www.python.org/) using [Sanic](https://github.com/channelcat/sanic). ## Prerequisites * Install [Python 3.x](https://www.python.org/) +* Install [Pipenv](https://github.com/pypa/pipenv) * Install [Pip](https://pypi.python.org/pypi/pip) ## Manual Installation -1. `cd server/config` then `cp local_settings.template local_settings.py` and modify it by your local settings -2. Install requirements with `pip install -r requirements.txt` -3. Migrate the data with `python manage.py migrate` -4. Run the server with `python manage.py runserver` -5. Open the browser at [http://localhost:8000](http://localhost:8000) +1. Create a file called `.env` at the root of the project and write the configurations of the server there. Here is an example of the `.env` file: +``` +DB_URI = 'mongodb://localhost:27017/assp' +JWT = 'ASSP' +PORT = '8000' +LOG_LEVEL = 'info' +ENV = 'development' +``` +2. Create a virtual environment with `pipenv install` at the root of the project. +3. Get in to the virtual environment with `pipenv shell`. +4. Run the server with the `.env` file `ENV_VARS=.env python main.py` +5. Hit [http://localhost:8000](http://localhost:8000) with Postman. ## Tests -* Run `pycodestyle --show-source --max-line-length=120 --show-pep8 server;` to check for lint mistakes (by PEP8) -* Run `python manage.py test` to execute the unit tests +Not Yet.. diff --git a/server/api/apps.py b/server/api/apps.py deleted file mode 100644 index d87006d..0000000 --- a/server/api/apps.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.apps import AppConfig - - -class ApiConfig(AppConfig): - name = 'api' diff --git a/server/api/serializers.py b/server/api/serializers.py deleted file mode 100644 index b2f7876..0000000 --- a/server/api/serializers.py +++ /dev/null @@ -1,8 +0,0 @@ -from rest_framework import serializers -from django.contrib.auth.models import User - - -class UserSerializer(serializers.HyperlinkedModelSerializer): - class Meta: - model = User - fields = ('url', 'username', 'email', 'groups') diff --git a/server/api/tests.py b/server/api/tests.py deleted file mode 100644 index 738f180..0000000 --- a/server/api/tests.py +++ /dev/null @@ -1,22 +0,0 @@ -from rest_framework import status -from rest_framework.test import APITestCase -from django.contrib.auth.models import User - - -class UsersApiTestCase(APITestCase): - @classmethod - def setUp(self): - User.objects.create_superuser('admin', 'admin@example.com', 'admin12345') - - def test_get_users_objects(self): - self.client.login(username='admin', password='admin12345') - response = self.client.get('/api/users/', format='json') - self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(len(response.data['results']), 1) - self.assertEqual(response.data['results'][0]['email'], 'admin@example.com') - self.assertEqual(response.data['results'][0]['username'], 'admin') - self.assertEqual(response.data['results'][0]['url'], 'http://testserver/api/users/2/') - - def test_forbidden_get_users_objects(self): - response = self.client.get('/api/users/', format='json') - self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) diff --git a/server/api/urls.py b/server/api/urls.py deleted file mode 100644 index ef5f8a0..0000000 --- a/server/api/urls.py +++ /dev/null @@ -1,10 +0,0 @@ -from api import views -from django.conf.urls import url, include -from rest_framework.routers import DefaultRouter - -router = DefaultRouter() -router.register(r'users', views.UserViewSet, base_name='user') - -urlpatterns = [ - url(r'^', include(router.urls)), -] diff --git a/server/config/__init__.py b/server/api/users/__init__.py similarity index 100% rename from server/config/__init__.py rename to server/api/users/__init__.py diff --git a/server/api/users/model.py b/server/api/users/model.py new file mode 100644 index 0000000..448a1f6 --- /dev/null +++ b/server/api/users/model.py @@ -0,0 +1,9 @@ +from datetime import date +from peewee import Model, CharField, TextField, DateField + + +class User(Model): + name = CharField(max_length=40) + age = TextField(default=0) + email = CharField(unique=True, null=False) + date_joined = DateField(default=date.today()) diff --git a/server/api/users/routes.py b/server/api/users/routes.py new file mode 100644 index 0000000..7eb44b5 --- /dev/null +++ b/server/api/users/routes.py @@ -0,0 +1,8 @@ +from sanic import Blueprint + +from api.users.view import UsersView, GetUsersView + +users_routes = Blueprint('users_routes', url_prefix='/users', strict_slashes=True) + +users_routes.add_route(UsersView.as_view(), '') +users_routes.add_route(GetUsersView.as_view(), '/') diff --git a/server/api/users/view.py b/server/api/users/view.py new file mode 100644 index 0000000..316a7cd --- /dev/null +++ b/server/api/users/view.py @@ -0,0 +1,50 @@ +from json import loads +from sanic.views import HTTPMethodView +from sanic.response import json, text +from peewee import IntegrityError + +from api.users.model import User + + +class UsersView(HTTPMethodView): + async def get(self, request): + users = User.select() + return json({ + '_message': 'Users fetched successfully!', + 'users': users, + }) + + async def post(self, request): + try: + new_user = User.create(**loads(request.body)) + return json({ + '_message': 'User created successfully!', + 'user': new_user, + }) + except IntegrityError as e: + if "email" in str(e): + return json({ + '_message': 'Should fill out email field', + 'user': None, + }) + + async def put(self, request): + return text('I am put method') + + async def delete(self, request): + return text('I am delete method') + + +class GetUsersView(HTTPMethodView): + async def get(self, request, id): + try: + user = User.get(User.id == id) + return json({ + '_message': 'User fetched successfully!', + 'user': user + }) + except User.DoesNotExist: + return json({ + '_message': 'User does not exist', + 'user': None + }) diff --git a/server/api/views.py b/server/api/views.py deleted file mode 100644 index 2b5eb5a..0000000 --- a/server/api/views.py +++ /dev/null @@ -1,19 +0,0 @@ -import logging -import logstash - -from rest_framework import viewsets -from django.contrib.auth.models import User -from api.serializers import UserSerializer - -logstash_logger = logging.getLogger('python-logstash-logger') -logstash_logger.setLevel(logging.INFO) -logstash_logger.addHandler(logstash.TCPLogstashHandler('logstash', 5959, version=1)) - - -class UserViewSet(viewsets.ReadOnlyModelViewSet): - """ - API endpoint that allows users to be viewed or edited. - """ - logstash_logger.info('logstash-server: test logstash info message.') - queryset = User.objects.all().order_by('-date_joined') - serializer_class = UserSerializer diff --git a/server/config/local_settings.template b/server/config/local_settings.template deleted file mode 100644 index 2d8ccd6..0000000 --- a/server/config/local_settings.template +++ /dev/null @@ -1,13 +0,0 @@ -# Enable debug trace. -DEBUG = True - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': _user, - 'USER': _user, - 'PASSWORD': _user, - 'HOST': 'localhost', - 'PORT': 5432, - } -} diff --git a/server/config/settings.py b/server/config/settings.py deleted file mode 100644 index 3202000..0000000 --- a/server/config/settings.py +++ /dev/null @@ -1,168 +0,0 @@ -""" -Django settings for config project. - -Generated by 'django-admin startproject' using Django 1.11. - -For more information on this file, see -https://docs.djangoproject.com/en/1.11/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/1.11/ref/settings/ -""" - -import os - -# Build paths inside the project like this: os.path.join(BASE_DIR, ...) -BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - - -# Quick-start development settings - unsuitable for production -# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ - -# SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = os.environ.get('SECRET_KEY', True) - -# SECURITY WARNING: don't run with debug turned on in production! -DEBUG = os.environ.get('DEBUG', False) - -ALLOWED_HOSTS = ['localhost'] - -CORS_ORIGIN_WHITELIST = ( - 'localhost:4200', - 'localhost:8000' -) - -# Application definition -INSTALLED_APPS = [ - 'api', - 'flat_responsive', - 'django.contrib.admin', - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'admin_honeypot', - 'django_extensions', - 'rest_framework', - 'corsheaders', -] - -MIDDLEWARE = [ - 'corsheaders.middleware.CorsMiddleware', - 'django.middleware.security.SecurityMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] - -ROOT_URLCONF = 'config.urls' - -TEMPLATES = [ - { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ - 'django.template.context_processors.debug', - 'django.template.context_processors.request', - 'django.contrib.auth.context_processors.auth', - 'django.contrib.messages.context_processors.messages', - ], - }, - }, -] - -WSGI_APPLICATION = 'config.wsgi.application' - - -# Database -# https://docs.djangoproject.com/en/1.11/ref/settings/#databases -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': os.environ.get('DB_NAME', ''), - 'USER': os.environ.get('DB_USER', ''), - 'PASSWORD': os.environ.get('DB_PASS', ''), - 'HOST': os.environ.get('DB_HOST', ''), - 'PORT': 5432, - } -} - - -# Password validation -# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators -AUTH_PASSWORD_VALIDATORS = [ - { - 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', - }, - { - 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', - }, -] - -# Logging -# https://github.com/vklochan/python-logstash -LOGGING = { - 'version': 1, - 'disable_existing_loggers': True, - 'handlers': { - 'logstash': { - 'level': 'DEBUG', - 'class': 'logstash.LogstashHandler', - 'host': 'localhost', - 'port': 5959, - 'version': 1, - 'message_type': 'logstash', - 'fqdn': False, - 'tags': ['tag1', 'tag2'], - }, - }, - 'loggers': { - 'django.request': { - 'handlers': ['logstash'], - 'level': 'DEBUG', - 'propagate': True, - }, - }, -} - -# REST API -REST_FRAMEWORK = { - 'DEFAULT_PERMISSION_CLASSES': ( - 'rest_framework.permissions.IsAuthenticated', - ), - 'PAGE_SIZE': 10, -} - - -# Internationalization -# https://docs.djangoproject.com/en/1.11/topics/i18n/ -LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' -USE_I18N = True -USE_L10N = True -USE_TZ = True - - -# Static files (CSS, JavaScript, Images) -# https://docs.djangoproject.com/en/1.11/howto/static-files/ -STATIC_URL = '/home/app/server/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') - - -# Importing local settings if exists. -try: - from .local_settings import * -except ImportError: - pass diff --git a/server/config/urls.py b/server/config/urls.py deleted file mode 100644 index 3ef7e75..0000000 --- a/server/config/urls.py +++ /dev/null @@ -1,26 +0,0 @@ -"""config URL Configuration - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/1.11/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.conf.urls import url, include - 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) -""" -from django.contrib import admin -from django.conf import settings -from django.conf.urls import url, include -from django.conf.urls.static import static - -urlpatterns = [ - url(r'^api/', include('api.urls')), - url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')), - url(r'^admin/', include('admin_honeypot.urls', namespace='admin_honeypot')), - url(r'^secret-admin/', admin.site.urls), -] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) diff --git a/server/config/wsgi.py b/server/config/wsgi.py deleted file mode 100644 index 96cbb97..0000000 --- a/server/config/wsgi.py +++ /dev/null @@ -1,16 +0,0 @@ -""" -WSGI config for config project. - -It exposes the WSGI callable as a module-level variable named ``application``. - -For more information on this file, see -https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ -""" - -import os - -from django.core.wsgi import get_wsgi_application - -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") - -application = get_wsgi_application() diff --git a/server/entrypoint.sh b/server/entrypoint.sh deleted file mode 100644 index 3323260..0000000 --- a/server/entrypoint.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash - -echo "[run] go to project folder" -cd /home/app/server - -echo "[run] Migrate DB" -python manage.py migrate - -echo "[run] Collect static files" -python manage.py collectstatic --noinput - -echo "[run] create superuser" -echo "from django.contrib.auth.models import User -if not User.objects.filter(username='admin').count(): - User.objects.create_superuser('admin', 'admin@example.com', 'pass') -" | python manage.py shell diff --git a/server/locustfile.py b/server/locustfile.py deleted file mode 100644 index 84986d5..0000000 --- a/server/locustfile.py +++ /dev/null @@ -1,14 +0,0 @@ -from locust import HttpLocust, TaskSet, task - - -class UserBehavior(TaskSet): - @task(1) - def users(self): - self.client.login(username='admin', password='pass') - self.client.get('/api/users', serlf.headers) - - -class WebsiteUser(HttpLocust): - task_set = UserBehavior - min_wait = 5000 - max_wait = 9000 diff --git a/server/main.py b/server/main.py new file mode 100644 index 0000000..fb2a0fb --- /dev/null +++ b/server/main.py @@ -0,0 +1,25 @@ +from sanic import Sanic +from sanic.response import json + +from api.users.routes import users_routes +from util.middlewares import handle_request, handle_response + +# Start the app and load environment variables. +app = Sanic(load_env=True) +app.config.from_envvar('ENV_VARS') + + +# root route +@app.route('/') +async def root(request): + return json({}, status=200) + +# Register all blueprints. +app.blueprint(users_routes) + +# Register all middlewares. +app.register_middleware(handle_request, 'request') +app.register_middleware(handle_response, 'response') + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=8000) diff --git a/server/manage.py b/server/manage.py deleted file mode 100755 index 68141ee..0000000 --- a/server/manage.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") - try: - from django.core.management import execute_from_command_line - except ImportError: - # The above import may fail for some other reason. Ensure that the - # issue is really that Django is missing to avoid masking other - # exceptions on Python 2. - try: - import django - except ImportError: - raise ImportError( - "Couldn't import Django. Are you sure it's installed and " - "available on your PYTHONPATH environment variable? Did you " - "forget to activate a virtual environment?" - ) - raise - execute_from_command_line(sys.argv) diff --git a/server/requirements.txt b/server/requirements.txt deleted file mode 100644 index a439e0f..0000000 --- a/server/requirements.txt +++ /dev/null @@ -1,26 +0,0 @@ -# Install with: `pip install -r requirements.txt` - -Django==1.11.4 -psycopg2==2.7.1 -django-extensions==1.8.1 -gunicorn==19.7.1 - -# Admin -django-flat-responsive==1.4.1 - -# Security -django-admin-honeypot==1.0.0 - -# Rest Framework -djangorestframework==3.6.3 -Markdown==2.6.8 -django-filter==1.0.2 - -# CORS -django-cors-headers==2.1.0 - -# Logging -python-logstash==0.4.6 - -# Testing -locustio==0.8a2 diff --git a/server/util/__init__.py b/server/util/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/server/util/middlewares.py b/server/util/middlewares.py new file mode 100644 index 0000000..0ab18ca --- /dev/null +++ b/server/util/middlewares.py @@ -0,0 +1,25 @@ +from peewee import PostgresqlDatabase, OperationalError + +from api.users.model import User + + +async def handle_request(request): + global psql_db + psql_db = PostgresqlDatabase( + database='assp', + host='localhost', + user='nirgalon', + password='' + ) + psql_db.connect() + + # Create tables. + try: + psql_db.create_tables([User]) + except OperationalError as e: + print(e) + + +async def handle_response(request, response): + if not psql_db.is_closed(): + psql_db.close() From 9e8c85abf366387b32c376b3fce85e4f8fe1c013 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Wed, 13 Jun 2018 11:27:36 +0300 Subject: [PATCH 31/35] Update github templates, and project logo (#87) --- .../CODE_OF_CONDUCT.md | 0 .github/CONTRIBUTING.md | 23 ++++++++++++++++++ .github/ISSUE_TEMPLATE.md | 11 +++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 ++++++++++++ LICENSE | 2 +- angular-django-seed-project.png | Bin 70315 -> 70297 bytes angular-django-seed-project.psd | Bin 277560 -> 273434 bytes 7 files changed, 51 insertions(+), 1 deletion(-) rename CODE_OF_CONDUCT.md => .github/CODE_OF_CONDUCT.md (100%) create mode 100644 .github/CONTRIBUTING.md create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..f2860da --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,23 @@ +# Contribution + +So, you want to start contribute, Great! + +1. First step is to clone the repo (`git clone https://github.com/nirgn975/Angular-Sanic-Seed-Project.git`) + +2. Take yourself an issue (or talk with a team member to get one). Create a new branch (`git branch -b -`), and start working on it. + + Example of a branch name `18-fix_server_docker`. + +3. After you do your first commit create a PR (Pull Request) (you can do it from github GUI, Pycharm/Webstorm under _VCS -> Git -> Create Pull Request_, atom/ vscode, or even the command line) and if you don't finish the PR yet (what I assume is true because it's only the first commit) write `WIP` (stand for "Work In Progress") in the title. + + Example: `WIP: Create Docker image..` + Please add a link to the issue in the body of the PR (write hashtag with the issue number). + Example: `#11` + +4. Before you finish you PR (Pull Request) make sure all the tests are pass in `Travis`. If some of them are failed, fix your code or tests (depends on the issue). + +5. When you finish, remove the `WIP` from the title and assign it to `@nirgn975`, and write some text like "@nirgn975 Ready for review" (when you mention him like that, GitHub will send a notification to that person). + +6. Please go through [PEP 8 -- Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/) and [Angular Style Guide](https://angular.io/styleguide) before submitting a PR. + +7. Wait for code review and HAVE FUN! diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..cb68c45 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,11 @@ +**This is a ...** (check one with "x") +``` +[ ] Bug report +[ ] Feature request +[ ] Clarification on the documentation +``` + +**Current behavior** + + +**What is the expected behavior?** (if you know how it should behave) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..0b2a0a5 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +**What kind of change does this PR introduce?** (check _one_ with "x") +``` +[ ] Bugfix +[ ] Feature +[ ] Code style update (formatting, local variables) +[ ] Refactoring (no functional changes, no api changes) +[ ] Build related changes +[ ] CI related changes +[ ] Docs related changes +[ ] Other... Please describe: +``` + +**Link to the open issue**: + + +**Other information**: diff --git a/LICENSE b/LICENSE index d2e3327..b2cd635 100755 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2016, Nir Galon and contributors. +Copyright (c) 2018, Nir Galon and contributors. All rights reserved. Redistribution and use in source and binary forms, with or without modification, diff --git a/angular-django-seed-project.png b/angular-django-seed-project.png index 6cb80820104dc01da9602502b24a15a88f0d7269..9dcaa9946c021673b1c8935b981b8ca598fd4096 100644 GIT binary patch delta 53919 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 z zpv@9Ggub8fRSm7$Fd6^SyNwnb##wXMyRQMd+x~du3ZcN_LFe615*QzT>(*^tz|iJ{ zMnSFm#}({MJ`3Vw4H9-lPNE3&X|fB(h?VmrK%jZx96{FJ78sY1)jD($2 zzyzAWkH+zigfXMLf!J`YP@_8dl}?PfC0RRo_U9Yu zwc7^=P>~FRJ8yCbvfR641yMGhrH9+|sV6j{!->rw5l+yMqlG%**vSwRpP_rH|5!Hy zubh^+Z^^;3>#z6Poj=%U2{eMNZvm3cjlD+Pc$mdX4|tAcg2kKOPXv}mc;Fy+rBxej z9yWQLtqR4n@yi~W=+FCQ7pZ>FN(Bxj+BUhgh}^=9xyAXb+i)K4lms%B+9v6M028;K z4t;6g=TFS8oH^*aj{HGp0&3w!R4Ywr5Nk1s&Vr{P-aY!=I&B_DGDLBoYrunAe2S
lIQXpn6>ZT<#lQZ0PbmL5^C?piG&;y! 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 delta 53935 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
bu#9hQ}YZm5+B9nxeK!D{0JzqSKOf6zY5R+_+yB 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 Date: Thu, 14 Jun 2018 15:57:21 +0300 Subject: [PATCH 32/35] Show data on client (#93) * Get users from backend and store them in the store. * Show data on screen * Cleanup --- client/angular.json | 5 +- client/package-lock.json | 3646 ++++++++--------- client/package.json | 2 +- client/src/app-theme.scss | 24 + client/src/app/app-routing.module.ts | 2 +- client/src/app/reducers/index.ts | 7 +- client/src/app/users/actions/users.actions.ts | 4 +- .../users/components/user/user.component.html | 9 +- ...user.component.css => user.component.scss} | 0 .../users/components/user/user.component.ts | 12 +- .../users-list/users-list.component.css | 0 .../users-list/users-list.component.html | 6 +- .../users-list/users-list.component.scss | 5 + .../users-list/users-list.component.ts | 15 +- client/src/app/users/models/user.model.ts | 12 +- .../src/app/users/reducers/users.reducer.ts | 19 +- .../src/app/users/services/users.service.ts | 6 +- client/src/app/users/users-routing.module.ts | 6 +- client/src/app/users/users.module.ts | 19 + client/src/environments/environment.ts | 2 +- client/src/index.html | 1 + client/src/main.ts | 2 + client/src/styles.scss | 6 + server/Pipfile | 1 + server/Pipfile.lock | 154 - server/main.py | 2 + 26 files changed, 1956 insertions(+), 2011 deletions(-) create mode 100644 client/src/app-theme.scss rename client/src/app/users/components/user/{user.component.css => user.component.scss} (100%) delete mode 100644 client/src/app/users/components/users-list/users-list.component.css create mode 100644 client/src/app/users/components/users-list/users-list.component.scss delete mode 100644 server/Pipfile.lock diff --git a/client/angular.json b/client/angular.json index 8babf9f..7c5ece5 100644 --- a/client/angular.json +++ b/client/angular.json @@ -27,7 +27,8 @@ "src/assets" ], "styles": [ - "src/styles.scss" + "src/styles.scss", + "src/app-theme.scss" ], "scripts": [] }, @@ -131,4 +132,4 @@ "cli": { "defaultCollection": "@ngrx/schematics" } -} \ No newline at end of file +} diff --git a/client/package-lock.json b/client/package-lock.json index cab1760..deec93b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -11,7 +11,7 @@ "dev": true, "requires": { "@angular-devkit/core": "0.6.8", - "rxjs": "6.2.0" + "rxjs": "^6.0.0" } }, "@angular-devkit/build-angular": { @@ -24,53 +24,53 @@ "@angular-devkit/build-optimizer": "0.6.8", "@angular-devkit/core": "0.6.8", "@ngtools/webpack": "6.0.8", - "ajv": "6.4.0", - "autoprefixer": "8.6.2", - "cache-loader": "1.2.2", - "chalk": "2.2.2", - "circular-dependency-plugin": "5.0.2", - "clean-css": "4.1.11", - "copy-webpack-plugin": "4.5.1", - "file-loader": "1.1.11", - "glob": "7.1.2", - "html-webpack-plugin": "3.2.0", - "istanbul": "0.4.5", - "istanbul-instrumenter-loader": "3.0.1", - "karma-source-map-support": "1.3.0", - "less": "3.0.4", - "less-loader": "4.1.0", - "license-webpack-plugin": "1.3.1", - "lodash": "4.17.10", - "memory-fs": "0.4.1", - "mini-css-extract-plugin": "0.4.0", - "minimatch": "3.0.4", - "node-sass": "4.9.0", - "opn": "5.3.0", - "parse5": "4.0.0", - "portfinder": "1.0.13", - "postcss": "6.0.22", - "postcss-import": "11.1.0", - "postcss-loader": "2.1.5", - "postcss-url": "7.3.2", - "raw-loader": "0.5.1", - "resolve": "1.7.1", - "rxjs": "6.2.0", - "sass-loader": "7.0.3", - "silent-error": "1.1.0", - "source-map-support": "0.5.6", - "stats-webpack-plugin": "0.6.2", - "style-loader": "0.21.0", - "stylus": "0.54.5", - "stylus-loader": "3.0.2", - "tree-kill": "1.2.0", - "uglifyjs-webpack-plugin": "1.2.5", - "url-loader": "1.0.1", - "webpack": "4.8.3", - "webpack-dev-middleware": "3.1.3", - "webpack-dev-server": "3.1.4", - "webpack-merge": "4.1.2", - "webpack-sources": "1.1.0", - "webpack-subresource-integrity": "1.1.0-rc.4" + "ajv": "~6.4.0", + "autoprefixer": "^8.4.1", + "cache-loader": "^1.2.2", + "chalk": "~2.2.2", + "circular-dependency-plugin": "^5.0.2", + "clean-css": "^4.1.11", + "copy-webpack-plugin": "^4.5.1", + "file-loader": "^1.1.11", + "glob": "^7.0.3", + "html-webpack-plugin": "^3.0.6", + "istanbul": "^0.4.5", + "istanbul-instrumenter-loader": "^3.0.1", + "karma-source-map-support": "^1.2.0", + "less": "^3.0.4", + "less-loader": "^4.1.0", + "license-webpack-plugin": "^1.3.1", + "lodash": "^4.17.4", + "memory-fs": "^0.4.1", + "mini-css-extract-plugin": "~0.4.0", + "minimatch": "^3.0.4", + "node-sass": "^4.9.0", + "opn": "^5.1.0", + "parse5": "^4.0.0", + "portfinder": "^1.0.13", + "postcss": "^6.0.22", + "postcss-import": "^11.1.0", + "postcss-loader": "^2.1.5", + "postcss-url": "^7.3.2", + "raw-loader": "^0.5.1", + "resolve": "^1.5.0", + "rxjs": "^6.0.0", + "sass-loader": "^7.0.1", + "silent-error": "^1.1.0", + "source-map-support": "^0.5.0", + "stats-webpack-plugin": "^0.6.2", + "style-loader": "^0.21.0", + "stylus": "^0.54.5", + "stylus-loader": "^3.0.2", + "tree-kill": "^1.2.0", + "uglifyjs-webpack-plugin": "^1.2.5", + "url-loader": "^1.0.1", + "webpack": "~4.8.1", + "webpack-dev-middleware": "^3.1.3", + "webpack-dev-server": "^3.1.4", + "webpack-merge": "^4.1.2", + "webpack-sources": "^1.1.0", + "webpack-subresource-integrity": "^1.1.0-rc.4" } }, "@angular-devkit/build-optimizer": { @@ -79,10 +79,10 @@ "integrity": "sha512-of5syQbv3uNPp4AQkfRecfnp8AE8kvffbfYi+FFPZ6OGr7e59T1fGwk6+Zgb2qQFQg8HO2tzWI/uygtLIqmbmw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "source-map": "0.5.7", - "typescript": "2.9.1", - "webpack-sources": "1.1.0" + "loader-utils": "^1.1.0", + "source-map": "^0.5.6", + "typescript": "~2.9.1", + "webpack-sources": "^1.1.0" }, "dependencies": { "typescript": { @@ -99,10 +99,10 @@ "integrity": "sha512-rkIa1OSVWTt4g9leLSK/PsqOj3HZbDKHbZjqlslyfVa3AyCeiumFoOgViOVXlYgPX3HHDbE5uH24nyUWSD8uww==", "dev": true, "requires": { - "ajv": "6.4.0", - "chokidar": "2.0.3", - "rxjs": "6.2.0", - "source-map": "0.5.7" + "ajv": "~6.4.0", + "chokidar": "^2.0.3", + "rxjs": "^6.0.0", + "source-map": "^0.5.6" } }, "@angular-devkit/schematics": { @@ -112,15 +112,15 @@ "dev": true, "requires": { "@angular-devkit/core": "0.6.8", - "rxjs": "6.2.0" + "rxjs": "^6.0.0" } }, "@angular/animations": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.4.tgz", - "integrity": "sha512-Ro1XEwShk8XRAogfu73fKLTBLnND1s+MGhN+ymwr7ib9hqxVr7jMNE+MXPqG2/1BX9c+7NHb30B8G4woQn62vw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.5.tgz", + "integrity": "sha512-zW/qX3CvsuRDOcTNFFSf7uXktvq1jRrfKR8LdGQ/DER1GU3o8pR3z3H8gHy8lAFc3PESfETtzXinKUNzvTDfpA==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/cdk": { @@ -128,7 +128,7 @@ "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.2.1.tgz", "integrity": "sha512-uwW4eIGJKqOkR+ew6YcEAh1J4SP98jdyDpsZ4IEMkV9+jXcKfcwcxGFpZvs9wJsAvAr8EgNmZ8h+iuZLwJsvmA==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.7.1" } }, "@angular/cli": { @@ -142,13 +142,13 @@ "@angular-devkit/schematics": "0.6.8", "@schematics/angular": "0.6.8", "@schematics/update": "0.6.8", - "opn": "5.3.0", - "resolve": "1.7.1", - "rxjs": "6.2.0", - "semver": "5.5.0", - "silent-error": "1.1.0", - "symbol-observable": "1.2.0", - "yargs-parser": "10.0.0" + "opn": "~5.3.0", + "resolve": "^1.1.7", + "rxjs": "^6.0.0", + "semver": "^5.1.0", + "silent-error": "^1.0.0", + "symbol-observable": "^1.2.0", + "yargs-parser": "^10.0.0" }, "dependencies": { "camelcase": { @@ -163,7 +163,7 @@ "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -173,7 +173,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.4.tgz", "integrity": "sha512-z2UE6a43u49omsqjzwdHhwD+wpCPauuD13FMkVQMLwzugKhNri0LjMk5I0I9xLz9OyXICm2B+wPAQN4d07savg==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/compiler": { @@ -181,7 +181,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.4.tgz", "integrity": "sha512-qwjuPacuRKUroD+xev653mljV9Jwhi2tvwGo/cVadq0isJ2rVH1hO6sa1FWFnNf1KPnyolMobZlMgg8DFW/yRw==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/compiler-cli": { @@ -190,10 +190,10 @@ "integrity": "sha512-bkN21JJrsbIdXNfOc9I9iB7AETUe4/QvApC25R3/pERSyhkK7UNNHTqg4FY5xMdSxlZd1ccWj8rvSbS+hFbTBw==", "dev": true, "requires": { - "chokidar": "1.7.0", - "minimist": "1.2.0", - "reflect-metadata": "0.1.12", - "tsickle": "0.29.0" + "chokidar": "^1.4.2", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "tsickle": "^0.29.0" }, "dependencies": { "anymatch": { @@ -202,8 +202,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -212,7 +212,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -227,9 +227,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -238,15 +238,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "expand-brackets": { @@ -255,7 +255,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -264,7 +264,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "glob-parent": { @@ -273,7 +273,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -288,7 +288,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -297,7 +297,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -306,19 +306,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "minimist": { @@ -334,7 +334,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.4.tgz", "integrity": "sha512-WCW8wyRoIKkjGjOjVLFpUyhQw/K0//s3W0qo1/vH6m9njC63jP/VP+2Xnt8bdtgeET2NYUeyl+w/0vUXqYlnEA==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/forms": { @@ -342,7 +342,7 @@ "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.4.tgz", "integrity": "sha512-JcKyCCkAwF3NlWuwPxtpRhFX/8QbFUkA4W0N62L+Odm8G0/P4QhMw/99o5kRs5xrsQRVyFlGvdYOrkgDyyZkGg==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/http": { @@ -350,7 +350,7 @@ "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.4.tgz", "integrity": "sha512-bq7cS0/5hM3Af3FolEe7HpKP19/7MJWIPGi5k9rYCGM4dXKFiKa+LA/SbXE0DMiKxhAQbZDwQ9HN04r70DRyBQ==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/language-service": { @@ -364,7 +364,7 @@ "resolved": "https://registry.npmjs.org/@angular/material/-/material-6.2.1.tgz", "integrity": "sha512-SBoUXxHknkgwzp5pNDHW0jyrTM0d0Tk4lVyDbtEX8VEPtXqG5nL3BSgyjpJbTvqlmy2kOooUu3qgAmt87VH9lw==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.7.1" } }, "@angular/platform-browser": { @@ -372,7 +372,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.4.tgz", "integrity": "sha512-4y6rSqOLuBs+RL0CIM+RZ5T8a5Tm1NisZcTUGvM8lVYPNkqTzNfHQXhBq8mTgRw9JopEwOj+UEqBbgrNX715yQ==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { @@ -380,7 +380,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.4.tgz", "integrity": "sha512-uh7MoQi9kyKPFHrD7HPOU5gWyhF4pPJuGltyMTOtM/f5TNL9QQI2EugijKnnSFLQ8+7UQjmFAVeRqH9jylhIyQ==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@angular/router": { @@ -388,7 +388,7 @@ "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.4.tgz", "integrity": "sha512-IKUtbbRtHN8I+Hp8/pLqBPyXJmQHrPFGzKU3H43TovD++mmT5AaYVCeJgkGUB//wjtLN3y0X/yrmyWFWcN35Gw==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "@ngrx/effects": { @@ -425,8 +425,8 @@ "dev": true, "requires": { "@angular-devkit/core": "0.6.8", - "tree-kill": "1.2.0", - "webpack-sources": "1.1.0" + "tree-kill": "^1.0.0", + "webpack-sources": "^1.1.0" } }, "@schematics/angular": { @@ -437,7 +437,7 @@ "requires": { "@angular-devkit/core": "0.6.8", "@angular-devkit/schematics": "0.6.8", - "typescript": "2.7.2" + "typescript": ">=2.6.2 <2.8" } }, "@schematics/update": { @@ -448,10 +448,10 @@ "requires": { "@angular-devkit/core": "0.6.8", "@angular-devkit/schematics": "0.6.8", - "npm-registry-client": "8.5.1", - "rxjs": "6.2.0", - "semver": "5.5.0", - "semver-intersect": "1.3.1" + "npm-registry-client": "^8.5.1", + "rxjs": "^6.0.0", + "semver": "^5.3.0", + "semver-intersect": "^1.1.2" } }, "@types/jasmine": { @@ -466,7 +466,7 @@ "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", "dev": true, "requires": { - "@types/jasmine": "2.8.8" + "@types/jasmine": "*" } }, "@types/node": { @@ -495,7 +495,7 @@ "requires": { "@webassemblyjs/helper-wasm-bytecode": "1.4.3", "@webassemblyjs/wast-parser": "1.4.3", - "debug": "3.1.0", + "debug": "^3.1.0", "webassemblyjs": "1.4.3" }, "dependencies": { @@ -522,7 +522,7 @@ "integrity": "sha512-e8+KZHh+RV8MUvoSRtuT1sFXskFnWG9vbDy47Oa166xX+l0dD5sERJ21g5/tcH8Yo95e9IN3u7Jc3NbhnUcSkw==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -567,7 +567,7 @@ "@webassemblyjs/helper-buffer": "1.4.3", "@webassemblyjs/helper-wasm-bytecode": "1.4.3", "@webassemblyjs/wasm-gen": "1.4.3", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -587,7 +587,7 @@ "integrity": "sha512-4u0LJLSPzuRDWHwdqsrThYn+WqMFVqbI2ltNrHvZZkzFPO8XOZ0HFQ5eVc4jY/TNHgXcnwrHjONhPGYuuf//KQ==", "dev": true, "requires": { - "leb": "0.3.0" + "leb": "^0.3.0" } }, "@webassemblyjs/validation": { @@ -613,7 +613,7 @@ "@webassemblyjs/wasm-opt": "1.4.3", "@webassemblyjs/wasm-parser": "1.4.3", "@webassemblyjs/wast-printer": "1.4.3", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -648,7 +648,7 @@ "@webassemblyjs/helper-buffer": "1.4.3", "@webassemblyjs/wasm-gen": "1.4.3", "@webassemblyjs/wasm-parser": "1.4.3", - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -685,7 +685,7 @@ "@webassemblyjs/floating-point-hex-parser": "1.4.3", "@webassemblyjs/helper-code-frame": "1.4.3", "@webassemblyjs/helper-fsm": "1.4.3", - "long": "3.2.0", + "long": "^3.2.0", "webassemblyjs": "1.4.3" } }, @@ -697,7 +697,7 @@ "requires": { "@webassemblyjs/ast": "1.4.3", "@webassemblyjs/wast-parser": "1.4.3", - "long": "3.2.0" + "long": "^3.2.0" } }, "abbrev": { @@ -712,7 +712,7 @@ "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "dev": true, "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -728,7 +728,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.6.2" + "acorn": "^5.0.0" } }, "adm-zip": { @@ -749,7 +749,7 @@ "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", "dev": true, "requires": { - "es6-promisify": "5.0.0" + "es6-promisify": "^5.0.0" } }, "ajv": { @@ -758,10 +758,10 @@ "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "dev": true, "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "3.0.2" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } }, "ajv-keywords": { @@ -776,9 +776,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" }, "dependencies": { "kind-of": { @@ -787,7 +787,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -816,7 +816,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "anymatch": { @@ -825,8 +825,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, "app-root-path": { @@ -841,7 +841,7 @@ "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", "dev": true, "requires": { - "default-require-extensions": "2.0.0" + "default-require-extensions": "^2.0.0" } }, "aproba": { @@ -856,8 +856,8 @@ "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -866,7 +866,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -905,8 +905,8 @@ "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, "array-slice": { @@ -921,7 +921,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -967,9 +967,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -1047,12 +1047,12 @@ "integrity": "sha512-cv9v1mYYBcAnZq4MHseJ9AIdjQmNahnpCpPO46oTkQJS2GggsBp2azHjNpAuQ95Epvsg+AIsyjYhfI9YwFxGSA==", "dev": true, "requires": { - "browserslist": "3.2.8", - "caniuse-lite": "1.0.30000851", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "6.0.22", - "postcss-value-parser": "3.3.0" + "browserslist": "^3.2.8", + "caniuse-lite": "^1.0.30000851", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.22", + "postcss-value-parser": "^3.2.3" } }, "aws-sign2": { @@ -1073,9 +1073,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-styles": { @@ -1090,11 +1090,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -1111,14 +1111,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, "babel-messages": { @@ -1127,7 +1127,7 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-runtime": { @@ -1136,8 +1136,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.7", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "babel-template": { @@ -1146,11 +1146,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -1159,15 +1159,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" } }, "babel-types": { @@ -1176,10 +1176,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" } }, "babylon": { @@ -1206,13 +1206,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -1221,7 +1221,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -1230,7 +1230,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -1239,7 +1239,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -1248,9 +1248,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -1286,7 +1286,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "better-assert": { @@ -1323,7 +1323,7 @@ "dev": true, "optional": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "blocking-proxy": { @@ -1332,7 +1332,7 @@ "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { - "minimist": "1.2.0" + "minimist": "^1.2.0" }, "dependencies": { "minimist": { @@ -1362,15 +1362,15 @@ "dev": true, "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" }, "dependencies": { "qs": { @@ -1387,12 +1387,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.1", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, "boolbase": { @@ -1407,7 +1407,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -1416,7 +1416,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -1426,16 +1426,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -1444,7 +1444,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -1461,12 +1461,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -1475,9 +1475,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -1486,9 +1486,9 @@ "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1" } }, "browserify-rsa": { @@ -1497,8 +1497,8 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { @@ -1507,13 +1507,13 @@ "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, "browserify-zlib": { @@ -1522,7 +1522,7 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.6" + "pako": "~1.0.5" } }, "browserslist": { @@ -1531,8 +1531,8 @@ "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000851", - "electron-to-chromium": "1.3.48" + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" } }, "buffer": { @@ -1541,9 +1541,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.12", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -1594,19 +1594,19 @@ "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", "dev": true, "requires": { - "bluebird": "3.5.1", - "chownr": "1.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "lru-cache": "4.1.3", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.2", - "ssri": "5.3.0", - "unique-filename": "1.1.0", - "y18n": "4.0.0" + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" } }, "cache-base": { @@ -1615,15 +1615,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "cache-loader": { @@ -1632,10 +1632,10 @@ "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mkdirp": "0.5.1", - "neo-async": "2.5.1", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.5.0", + "schema-utils": "^0.4.2" } }, "callsite": { @@ -1650,8 +1650,8 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { @@ -1667,8 +1667,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" }, "dependencies": { "camelcase": { @@ -1698,8 +1698,8 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -1708,9 +1708,9 @@ "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" }, "dependencies": { "has-flag": { @@ -1725,7 +1725,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -1736,18 +1736,18 @@ "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", "dev": true, "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.1", - "braces": "2.3.2", - "fsevents": "1.2.4", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.0", - "normalize-path": "2.1.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0", - "upath": "1.1.0" + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.1.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.0" } }, "chownr": { @@ -1768,8 +1768,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-dependency-plugin": { @@ -1784,10 +1784,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1796,7 +1796,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -1807,7 +1807,7 @@ "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "0.5.x" } }, "cliui": { @@ -1817,8 +1817,8 @@ "dev": true, "optional": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" }, "dependencies": { @@ -1843,10 +1843,10 @@ "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" } }, "co": { @@ -1867,12 +1867,12 @@ "integrity": "sha512-CKwfgpfkqi9dyzy4s6ELaxJ54QgJ6A8iTSsM4bzHbLuTpbKncvNc3DUlCvpnkHBhK47gEf4qFsWoYqLrJPhy6g==", "dev": true, "requires": { - "app-root-path": "2.0.1", - "css-selector-tokenizer": "0.7.0", - "cssauron": "1.4.0", - "semver-dsl": "1.0.1", - "source-map": "0.5.7", - "sprintf-js": "1.0.3" + "app-root-path": "^2.0.1", + "css-selector-tokenizer": "^0.7.0", + "cssauron": "^1.4.0", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.6", + "sprintf-js": "^1.0.3" } }, "collection-visit": { @@ -1881,8 +1881,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -1891,7 +1891,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1912,7 +1912,7 @@ "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "dev": true, "requires": { - "lodash": "4.17.10" + "lodash": "^4.5.0" } }, "combined-stream": { @@ -1921,7 +1921,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1966,7 +1966,7 @@ "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", "dev": true, "requires": { - "mime-db": "1.34.0" + "mime-db": ">= 1.34.0 < 2" }, "dependencies": { "mime-db": { @@ -1983,13 +1983,13 @@ "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "bytes": "3.0.0", - "compressible": "2.0.14", + "compressible": "~2.0.13", "debug": "2.6.9", - "on-headers": "1.0.1", + "on-headers": "~1.0.1", "safe-buffer": "5.1.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "safe-buffer": { @@ -2012,10 +2012,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "connect": { @@ -2026,7 +2026,7 @@ "requires": { "debug": "2.6.9", "finalhandler": "1.1.0", - "parseurl": "1.3.2", + "parseurl": "~1.3.2", "utils-merge": "1.0.1" }, "dependencies": { @@ -2037,12 +2037,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" } }, "statuses": { @@ -2065,7 +2065,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { @@ -2116,12 +2116,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -2136,14 +2136,14 @@ "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.0", - "loader-utils": "1.1.0", - "minimatch": "3.0.4", - "p-limit": "1.3.0", - "serialize-javascript": "1.5.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" } }, "core-js": { @@ -2163,13 +2163,13 @@ "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.12.0", - "minimist": "1.2.0", - "object-assign": "4.1.1", - "os-homedir": "1.0.2", - "parse-json": "2.2.0", - "require-from-string": "1.2.1" + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" }, "dependencies": { "minimist": { @@ -2186,8 +2186,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -2196,11 +2196,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -2209,12 +2209,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -2224,8 +2224,8 @@ "dev": true, "optional": true, "requires": { - "lru-cache": "4.1.3", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, "cryptiles": { @@ -2234,7 +2234,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "crypto-browserify": { @@ -2243,17 +2243,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "css-parse": { @@ -2268,10 +2268,10 @@ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.0", + "boolbase": "~1.0.0", + "css-what": "2.1", "domutils": "1.5.1", - "nth-check": "1.0.1" + "nth-check": "~1.0.1" } }, "css-selector-tokenizer": { @@ -2280,9 +2280,9 @@ "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.1", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" } }, "css-what": { @@ -2297,7 +2297,7 @@ "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", "dev": true, "requires": { - "through": "2.3.8" + "through": "X.X.X" } }, "cssesc": { @@ -2318,7 +2318,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "custom-event": { @@ -2339,7 +2339,7 @@ "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", "dev": true, "requires": { - "es5-ext": "0.10.45" + "es5-ext": "^0.10.9" } }, "dashdash": { @@ -2348,7 +2348,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "date-now": { @@ -2396,7 +2396,7 @@ "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { - "strip-bom": "3.0.0" + "strip-bom": "^3.0.0" }, "dependencies": { "strip-bom": { @@ -2413,8 +2413,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -2423,8 +2423,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -2433,7 +2433,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -2442,7 +2442,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -2451,9 +2451,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -2464,12 +2464,12 @@ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "6.1.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "p-map": "1.2.0", - "pify": "3.0.0", - "rimraf": "2.6.2" + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" }, "dependencies": { "globby": { @@ -2478,11 +2478,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -2519,8 +2519,8 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { @@ -2535,7 +2535,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-node": { @@ -2562,9 +2562,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dir-glob": { @@ -2573,8 +2573,8 @@ "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", "dev": true, "requires": { - "arrify": "1.0.1", - "path-type": "3.0.0" + "arrify": "^1.0.1", + "path-type": "^3.0.0" } }, "dns-equal": { @@ -2589,8 +2589,8 @@ "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -2599,7 +2599,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "dom-converter": { @@ -2608,7 +2608,7 @@ "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", "dev": true, "requires": { - "utila": "0.3.3" + "utila": "~0.3" }, "dependencies": { "utila": { @@ -2625,10 +2625,10 @@ "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "custom-event": "1.0.1", - "ent": "2.2.0", - "extend": "3.0.1", - "void-elements": "2.0.1" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, "dom-serializer": { @@ -2637,8 +2637,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2667,7 +2667,7 @@ "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2676,8 +2676,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "duplexify": { @@ -2686,10 +2686,10 @@ "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "ecc-jsbn": { @@ -2699,7 +2699,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ee-first": { @@ -2726,13 +2726,13 @@ "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" } }, "emojis-list": { @@ -2753,7 +2753,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } }, "engine.io": { @@ -2776,7 +2776,7 @@ "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", "dev": true, "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.11", "negotiator": "0.6.1" } }, @@ -2854,9 +2854,9 @@ "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "memory-fs": "0.4.1", - "tapable": "1.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, "ent": { @@ -2877,7 +2877,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -2886,7 +2886,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -2895,11 +2895,11 @@ "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.3", - "is-regex": "1.0.4" + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -2908,9 +2908,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "es5-ext": { @@ -2919,9 +2919,9 @@ "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", "dev": true, "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" } }, "es6-iterator": { @@ -2930,9 +2930,9 @@ "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.45", - "es6-symbol": "3.1.1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, "es6-promise": { @@ -2947,7 +2947,7 @@ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "es6-promise": "4.2.4" + "es6-promise": "^4.0.3" } }, "es6-symbol": { @@ -2956,8 +2956,8 @@ "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "dev": true, "requires": { - "d": "1.0.0", - "es5-ext": "0.10.45" + "d": "1", + "es5-ext": "~0.10.14" } }, "escape-html": { @@ -2978,11 +2978,11 @@ "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", "dev": true, "requires": { - "esprima": "2.7.3", - "estraverse": "1.9.3", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.2.0" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "source-map": { @@ -2992,7 +2992,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -3003,8 +3003,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" }, "dependencies": { "estraverse": { @@ -3027,7 +3027,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" }, "dependencies": { "estraverse": { @@ -3074,7 +3074,7 @@ "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", "dev": true, "requires": { - "original": "1.0.1" + "original": ">=0.0.5" } }, "evp_bytestokey": { @@ -3083,8 +3083,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "execa": { @@ -3093,13 +3093,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" }, "dependencies": { "cross-spawn": { @@ -3108,9 +3108,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.3", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } } } @@ -3127,9 +3127,9 @@ "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", "dev": true, "requires": { - "array-slice": "0.2.3", - "array-unique": "0.2.1", - "braces": "0.1.5" + "array-slice": "^0.2.3", + "array-unique": "^0.2.1", + "braces": "^0.1.2" }, "dependencies": { "array-unique": { @@ -3144,7 +3144,7 @@ "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", "dev": true, "requires": { - "expand-range": "0.1.1" + "expand-range": "^0.1.0" } }, "expand-range": { @@ -3153,8 +3153,8 @@ "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", "dev": true, "requires": { - "is-number": "0.1.1", - "repeat-string": "0.2.2" + "is-number": "^0.1.1", + "repeat-string": "^0.2.2" } }, "is-number": { @@ -3177,13 +3177,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3192,7 +3192,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -3201,7 +3201,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3212,7 +3212,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -3221,11 +3221,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -3234,7 +3234,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -3252,7 +3252,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -3263,36 +3263,36 @@ "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "array-flatten": { @@ -3327,8 +3327,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -3337,7 +3337,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -3348,14 +3348,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -3364,7 +3364,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -3373,7 +3373,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -3382,7 +3382,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3391,7 +3391,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3400,9 +3400,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3443,7 +3443,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "file-loader": { @@ -3452,8 +3452,8 @@ "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" } }, "filename-regex": { @@ -3468,8 +3468,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "7.1.2", - "minimatch": "3.0.4" + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, "fill-range": { @@ -3478,10 +3478,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -3490,7 +3490,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3502,12 +3502,12 @@ "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-cache-dir": { @@ -3516,9 +3516,9 @@ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "find-up": { @@ -3527,7 +3527,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flush-write-stream": { @@ -3536,8 +3536,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "follow-redirects": { @@ -3546,7 +3546,7 @@ "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", "dev": true, "requires": { - "debug": "3.1.0" + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -3572,7 +3572,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -3593,9 +3593,9 @@ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", "dev": true, "requires": { - "asynckit": "0.4.0", + "asynckit": "^0.4.0", "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "mime-types": "^2.1.12" } }, "forwarded": { @@ -3610,7 +3610,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -3625,8 +3625,8 @@ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-access": { @@ -3635,7 +3635,7 @@ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", "dev": true, "requires": { - "null-check": "1.0.0" + "null-check": "^1.0.0" } }, "fs-write-stream-atomic": { @@ -3644,10 +3644,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -3663,8 +3663,8 @@ "dev": true, "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -3690,8 +3690,8 @@ "dev": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -3704,7 +3704,7 @@ "bundled": true, "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3768,7 +3768,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -3783,14 +3783,14 @@ "dev": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3799,12 +3799,12 @@ "dev": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -3819,7 +3819,7 @@ "dev": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3828,7 +3828,7 @@ "dev": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3837,8 +3837,8 @@ "dev": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -3857,7 +3857,7 @@ "bundled": true, "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3871,7 +3871,7 @@ "bundled": true, "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3884,8 +3884,8 @@ "bundled": true, "dev": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -3894,7 +3894,7 @@ "dev": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -3917,9 +3917,9 @@ "dev": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3928,16 +3928,16 @@ "dev": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -3946,8 +3946,8 @@ "dev": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3962,8 +3962,8 @@ "dev": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3972,10 +3972,10 @@ "dev": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -3994,7 +3994,7 @@ "bundled": true, "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -4015,8 +4015,8 @@ "dev": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -4037,10 +4037,10 @@ "dev": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -4057,13 +4057,13 @@ "dev": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -4072,7 +4072,7 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -4115,9 +4115,9 @@ "bundled": true, "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -4126,7 +4126,7 @@ "dev": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -4134,7 +4134,7 @@ "bundled": true, "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -4149,13 +4149,13 @@ "dev": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -4170,7 +4170,7 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -4191,10 +4191,10 @@ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" } }, "function-bind": { @@ -4209,14 +4209,14 @@ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "gaze": { @@ -4226,7 +4226,7 @@ "dev": true, "optional": true, "requires": { - "globule": "1.2.1" + "globule": "^1.0.0" } }, "generate-function": { @@ -4243,7 +4243,7 @@ "dev": true, "optional": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-caller-file": { @@ -4276,7 +4276,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "glob": { @@ -4285,12 +4285,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -4299,8 +4299,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -4309,7 +4309,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -4324,7 +4324,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -4335,8 +4335,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -4345,7 +4345,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -4362,12 +4362,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "1.0.2", - "dir-glob": "2.0.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pify": "3.0.0", - "slash": "1.0.0" + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, "globule": { @@ -4377,9 +4377,9 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" } }, "graceful-fs": { @@ -4405,10 +4405,10 @@ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", "dev": true, "requires": { - "async": "1.5.2", - "optimist": "0.6.1", - "source-map": "0.4.4", - "uglify-js": "2.8.29" + "async": "^1.4.0", + "optimist": "^0.6.1", + "source-map": "^0.4.4", + "uglify-js": "^2.6" }, "dependencies": { "source-map": { @@ -4417,7 +4417,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "uglify-js": { @@ -4427,9 +4427,9 @@ "dev": true, "optional": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" }, "dependencies": { "source-map": { @@ -4455,8 +4455,8 @@ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" + "ajv": "^5.1.0", + "har-schema": "^2.0.0" }, "dependencies": { "ajv": { @@ -4465,10 +4465,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } } } @@ -4479,7 +4479,7 @@ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -4488,7 +4488,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-binary": { @@ -4538,9 +4538,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -4549,8 +4549,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -4559,7 +4559,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4570,8 +4570,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash.js": { @@ -4580,8 +4580,8 @@ "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.0" } }, "hawk": { @@ -4590,10 +4590,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "he": { @@ -4608,9 +4608,9 @@ "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "hoek": { @@ -4631,10 +4631,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "html-entities": { @@ -4649,13 +4649,13 @@ "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.1.11", - "commander": "2.15.1", - "he": "1.1.1", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.3.28" + "camel-case": "3.0.x", + "clean-css": "4.1.x", + "commander": "2.15.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.3.x" } }, "html-webpack-plugin": { @@ -4664,12 +4664,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.16", - "loader-utils": "0.2.17", - "lodash": "4.17.10", - "pretty-error": "2.1.1", - "tapable": "1.0.0", - "toposort": "1.0.7", + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", "util.promisify": "1.0.0" }, "dependencies": { @@ -4679,10 +4679,10 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } } } @@ -4693,10 +4693,10 @@ "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.1.0", - "domutils": "1.1.6", - "readable-stream": "1.0.34" + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" }, "dependencies": { "domutils": { @@ -4705,7 +4705,7 @@ "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "isarray": { @@ -4720,10 +4720,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4746,10 +4746,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.4.0" + "statuses": ">= 1.4.0 < 2" } }, "http-parser-js": { @@ -4764,9 +4764,9 @@ "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "dev": true, "requires": { - "eventemitter3": "3.1.0", - "follow-redirects": "1.5.0", - "requires-port": "1.0.0" + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, "http-proxy-middleware": { @@ -4775,10 +4775,10 @@ "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.0", - "lodash": "4.17.10", - "micromatch": "3.1.10" + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" } }, "http-signature": { @@ -4787,9 +4787,9 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "https-browserify": { @@ -4804,8 +4804,8 @@ "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", "dev": true, "requires": { - "agent-base": "4.2.0", - "debug": "3.1.0" + "agent-base": "^4.1.0", + "debug": "^3.1.0" }, "dependencies": { "debug": { @@ -4862,8 +4862,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -4885,7 +4885,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "indexof": { @@ -4900,8 +4900,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -4922,7 +4922,7 @@ "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", "dev": true, "requires": { - "meow": "3.7.0" + "meow": "^3.3.0" } }, "invariant": { @@ -4931,7 +4931,7 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.3.1" + "loose-envify": "^1.0.0" } }, "invert-kv": { @@ -4958,7 +4958,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -4967,7 +4967,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4984,7 +4984,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -4999,7 +4999,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-callable": { @@ -5014,7 +5014,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5023,7 +5023,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5040,9 +5040,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -5071,7 +5071,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -5092,7 +5092,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5101,7 +5101,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-glob": { @@ -5110,7 +5110,7 @@ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, "is-my-ip-valid": { @@ -5127,11 +5127,11 @@ "dev": true, "optional": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-number": { @@ -5140,7 +5140,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5149,7 +5149,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5160,7 +5160,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -5183,7 +5183,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5192,7 +5192,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -5201,7 +5201,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -5229,7 +5229,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.3" + "has": "^1.0.1" } }, "is-stream": { @@ -5304,20 +5304,20 @@ "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { - "abbrev": "1.0.9", - "async": "1.5.2", - "escodegen": "1.8.1", - "esprima": "2.7.3", - "glob": "5.0.15", - "handlebars": "4.0.11", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "once": "1.4.0", - "resolve": "1.1.7", - "supports-color": "3.2.3", - "which": "1.3.1", - "wordwrap": "1.0.0" + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" }, "dependencies": { "glob": { @@ -5326,11 +5326,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-flag": { @@ -5351,7 +5351,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5362,18 +5362,18 @@ "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", "dev": true, "requires": { - "async": "2.6.1", - "compare-versions": "3.3.0", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.2.0", - "istanbul-lib-hook": "1.2.1", - "istanbul-lib-instrument": "1.10.1", - "istanbul-lib-report": "1.1.4", - "istanbul-lib-source-maps": "1.2.5", - "istanbul-reports": "1.3.0", - "js-yaml": "3.12.0", - "mkdirp": "0.5.1", - "once": "1.4.0" + "async": "^2.1.4", + "compare-versions": "^3.1.0", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-hook": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-report": "^1.1.4", + "istanbul-lib-source-maps": "^1.2.4", + "istanbul-reports": "^1.3.0", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" }, "dependencies": { "async": { @@ -5382,7 +5382,7 @@ "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", "dev": true, "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.10" } } } @@ -5393,10 +5393,10 @@ "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", "dev": true, "requires": { - "convert-source-map": "1.5.1", - "istanbul-lib-instrument": "1.10.1", - "loader-utils": "1.1.0", - "schema-utils": "0.3.0" + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0" }, "dependencies": { "ajv": { @@ -5405,10 +5405,10 @@ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "dev": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "schema-utils": { @@ -5417,7 +5417,7 @@ "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "dev": true, "requires": { - "ajv": "5.5.2" + "ajv": "^5.0.0" } } } @@ -5434,7 +5434,7 @@ "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", "dev": true, "requires": { - "append-transform": "1.0.0" + "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { @@ -5443,13 +5443,13 @@ "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", "dev": true, "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.0", - "semver": "5.5.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.0", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -5458,10 +5458,10 @@ "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.2.0", - "mkdirp": "0.5.1", - "path-parse": "1.0.5", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -5476,7 +5476,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -5487,11 +5487,11 @@ "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", "dev": true, "requires": { - "debug": "3.1.0", - "istanbul-lib-coverage": "1.2.0", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.0", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "debug": { @@ -5511,7 +5511,7 @@ "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", "dev": true, "requires": { - "handlebars": "4.0.11" + "handlebars": "^4.0.3" } }, "jasmine": { @@ -5520,9 +5520,9 @@ "integrity": "sha1-awicChFXax8W3xG4AUbZHU6Lij4=", "dev": true, "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.8.0" + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.8.0" }, "dependencies": { "jasmine-core": { @@ -5573,8 +5573,8 @@ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -5617,7 +5617,7 @@ "dev": true, "optional": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -5670,11 +5670,11 @@ "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", "dev": true, "requires": { - "core-js": "2.3.0", - "es6-promise": "3.0.2", - "lie": "3.1.1", - "pako": "1.0.6", - "readable-stream": "2.0.6" + "core-js": "~2.3.0", + "es6-promise": "~3.0.2", + "lie": "~3.1.0", + "pako": "~1.0.2", + "readable-stream": "~2.0.6" }, "dependencies": { "core-js": { @@ -5701,12 +5701,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "string_decoder": { @@ -5723,33 +5723,33 @@ "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", "dev": true, "requires": { - "bluebird": "3.5.1", - "body-parser": "1.18.2", - "chokidar": "1.7.0", - "colors": "1.1.2", - "combine-lists": "1.0.1", - "connect": "3.6.6", - "core-js": "2.5.7", - "di": "0.0.1", - "dom-serialize": "2.2.1", - "expand-braces": "0.1.2", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "http-proxy": "1.17.0", - "isbinaryfile": "3.0.2", - "lodash": "3.10.1", - "log4js": "0.6.38", - "mime": "1.6.0", - "minimatch": "3.0.4", - "optimist": "0.6.1", - "qjobs": "1.2.0", - "range-parser": "1.2.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "chokidar": "^1.4.1", + "colors": "^1.1.0", + "combine-lists": "^1.0.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "expand-braces": "^0.1.1", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^3.8.0", + "log4js": "^0.6.31", + "mime": "^1.3.4", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", "socket.io": "1.7.3", - "source-map": "0.5.7", + "source-map": "^0.5.3", "tmp": "0.0.31", - "useragent": "2.3.0" + "useragent": "^2.1.12" }, "dependencies": { "anymatch": { @@ -5758,8 +5758,8 @@ "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -5768,7 +5768,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -5783,9 +5783,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -5794,15 +5794,15 @@ "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "expand-brackets": { @@ -5811,7 +5811,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -5820,7 +5820,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "glob-parent": { @@ -5829,7 +5829,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -5844,7 +5844,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -5853,7 +5853,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "lodash": { @@ -5868,19 +5868,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } } } @@ -5891,8 +5891,8 @@ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", "dev": true, "requires": { - "fs-access": "1.0.1", - "which": "1.3.1" + "fs-access": "^1.0.0", + "which": "^1.2.1" } }, "karma-coverage-istanbul-reporter": { @@ -5901,8 +5901,8 @@ "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==", "dev": true, "requires": { - "istanbul-api": "1.3.1", - "minimatch": "3.0.4" + "istanbul-api": "^1.3.1", + "minimatch": "^3.0.4" } }, "karma-jasmine": { @@ -5917,7 +5917,7 @@ "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", "dev": true, "requires": { - "karma-jasmine": "1.1.2" + "karma-jasmine": "^1.0.2" } }, "karma-source-map-support": { @@ -5926,7 +5926,7 @@ "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", "dev": true, "requires": { - "source-map-support": "0.5.6" + "source-map-support": "^0.5.5" } }, "killable": { @@ -5954,7 +5954,7 @@ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, "requires": { - "invert-kv": "1.0.0" + "invert-kv": "^1.0.0" } }, "leb": { @@ -5969,14 +5969,14 @@ "integrity": "sha512-q3SyEnPKbk9zh4l36PGeW2fgynKu+FpbhiUNx/yaiBUQ3V0CbACCgb9FzYWcRgI2DJlP6eI4jc8XPrCTi55YcQ==", "dev": true, "requires": { - "errno": "0.1.7", - "graceful-fs": "4.1.11", - "image-size": "0.5.5", - "mime": "1.6.0", - "mkdirp": "0.5.1", - "promise": "7.3.1", - "request": "2.87.0", - "source-map": "0.6.1" + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -5994,9 +5994,9 @@ "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", "dev": true, "requires": { - "clone": "2.1.1", - "loader-utils": "1.1.0", - "pify": "3.0.0" + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^3.0.0" } }, "levn": { @@ -6005,8 +6005,8 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, "license-webpack-plugin": { @@ -6015,7 +6015,7 @@ "integrity": "sha512-NqAFodJdpBUuf1iD+Ij8hQvF0rCFKlO2KaieoQzAPhFgzLCtJnC7Z7x5gQbGNjoe++wOKAtAmwVEIBLqq2Yp1A==", "dev": true, "requires": { - "ejs": "2.6.1" + "ejs": "^2.5.7" } }, "lie": { @@ -6024,7 +6024,7 @@ "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", "dev": true, "requires": { - "immediate": "3.0.6" + "immediate": "~3.0.5" } }, "load-json-file": { @@ -6033,11 +6033,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "pify": { @@ -6060,9 +6060,9 @@ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" } }, "locate-path": { @@ -6071,8 +6071,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { @@ -6113,7 +6113,7 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.2.2" + "chalk": "^2.0.1" } }, "log4js": { @@ -6122,8 +6122,8 @@ "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "semver": "4.3.6" + "readable-stream": "~1.0.2", + "semver": "~4.3.3" }, "dependencies": { "isarray": { @@ -6138,10 +6138,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "semver": { @@ -6170,8 +6170,8 @@ "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", "dev": true, "requires": { - "es6-symbol": "3.1.1", - "object.assign": "4.1.0" + "es6-symbol": "^3.1.1", + "object.assign": "^4.1.0" } }, "long": { @@ -6192,7 +6192,7 @@ "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", "dev": true, "requires": { - "js-tokens": "3.0.2" + "js-tokens": "^3.0.0" } }, "loud-rejection": { @@ -6201,8 +6201,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -6217,8 +6217,8 @@ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "make-dir": { @@ -6227,7 +6227,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "make-error": { @@ -6254,7 +6254,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "math-random": { @@ -6269,8 +6269,8 @@ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "media-typer": { @@ -6285,7 +6285,7 @@ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "memory-fs": { @@ -6294,8 +6294,8 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { @@ -6304,16 +6304,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" }, "dependencies": { "minimist": { @@ -6342,19 +6342,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "miller-rabin": { @@ -6363,8 +6363,8 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { @@ -6385,7 +6385,7 @@ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "dev": true, "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "mimic-fn": { @@ -6400,8 +6400,8 @@ "integrity": "sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "webpack-sources": "1.1.0" + "loader-utils": "^1.1.0", + "webpack-sources": "^1.1.0" } }, "minimalistic-assert": { @@ -6422,7 +6422,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6437,16 +6437,16 @@ "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.6.0", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.0.3", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.2", - "through2": "2.0.3" + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" } }, "mixin-deep": { @@ -6455,8 +6455,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6465,7 +6465,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6476,8 +6476,8 @@ "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "dev": true, "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" }, "dependencies": { "for-in": { @@ -6503,12 +6503,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.2", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" } }, "ms": { @@ -6523,8 +6523,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.2" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -6546,18 +6546,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "negotiator": { @@ -6584,7 +6584,7 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, "node-forge": { @@ -6600,18 +6600,18 @@ "dev": true, "optional": true, "requires": { - "fstream": "1.0.11", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.81.0", - "rimraf": "2.6.2", - "semver": "5.3.0", - "tar": "2.2.1", - "which": "1.3.1" + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": ">=2.9.0 <2.82.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" }, "dependencies": { "ajv": { @@ -6621,8 +6621,8 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "assert-plus": { @@ -6646,9 +6646,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "har-schema": { @@ -6665,8 +6665,8 @@ "dev": true, "optional": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "http-signature": { @@ -6676,9 +6676,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "performance-now": { @@ -6702,28 +6702,28 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "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" } }, "semver": { @@ -6741,28 +6741,28 @@ "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", "dev": true, "requires": { - "assert": "1.4.1", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "1.1.1", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.1", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.10.4", + "url": "^0.11.0", + "util": "^0.10.3", "vm-browserify": "0.0.4" }, "dependencies": { @@ -6781,25 +6781,25 @@ "dev": true, "optional": true, "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.2", - "in-publish": "2.0.0", - "lodash.assign": "4.2.0", - "lodash.clonedeep": "4.5.0", - "lodash.mergewith": "4.6.1", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.10.0", - "node-gyp": "3.7.0", - "npmlog": "4.1.2", - "request": "2.79.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.0", - "true-case-path": "1.0.2" + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.3.1", + "npmlog": "^4.0.0", + "request": "~2.79.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" }, "dependencies": { "ansi-styles": { @@ -6835,11 +6835,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "form-data": { @@ -6849,9 +6849,9 @@ "dev": true, "optional": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "har-validator": { @@ -6861,10 +6861,10 @@ "dev": true, "optional": true, "requires": { - "chalk": "1.1.3", - "commander": "2.15.1", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "http-signature": { @@ -6874,9 +6874,9 @@ "dev": true, "optional": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.2" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "qs": { @@ -6893,26 +6893,26 @@ "dev": true, "optional": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.7.0", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~2.0.6", + "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", + "qs": "~6.3.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "~0.4.1", + "uuid": "^3.0.0" } }, "supports-color": { @@ -6936,7 +6936,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.0.9" + "abbrev": "1" } }, "normalize-package-data": { @@ -6945,10 +6945,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.5.0", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -6957,7 +6957,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "normalize-range": { @@ -6972,10 +6972,10 @@ "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "osenv": "0.1.5", - "semver": "5.5.0", - "validate-npm-package-name": "3.0.0" + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" } }, "npm-registry-client": { @@ -6984,18 +6984,18 @@ "integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", "dev": true, "requires": { - "concat-stream": "1.6.2", - "graceful-fs": "4.1.11", - "normalize-package-data": "2.4.0", - "npm-package-arg": "6.1.0", - "npmlog": "4.1.2", - "once": "1.4.0", - "request": "2.87.0", - "retry": "0.10.1", - "safe-buffer": "5.1.2", - "semver": "5.5.0", - "slide": "1.1.6", - "ssri": "5.3.0" + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "safe-buffer": "^5.1.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^5.2.4" } }, "npm-run-path": { @@ -7004,7 +7004,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -7013,10 +7013,10 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "nth-check": { @@ -7025,7 +7025,7 @@ "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "null-check": { @@ -7070,9 +7070,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -7081,7 +7081,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -7090,7 +7090,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7107,7 +7107,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { @@ -7116,10 +7116,10 @@ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" } }, "object.getownpropertydescriptors": { @@ -7128,8 +7128,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.12.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -7138,8 +7138,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" }, "dependencies": { "for-own": { @@ -7148,7 +7148,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } } } @@ -7159,7 +7159,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "obuf": { @@ -7189,7 +7189,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -7198,7 +7198,7 @@ "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "optimist": { @@ -7207,8 +7207,8 @@ "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "dev": true, "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" }, "dependencies": { "wordwrap": { @@ -7225,12 +7225,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "options": { @@ -7245,7 +7245,7 @@ "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", "dev": true, "requires": { - "url-parse": "1.4.1" + "url-parse": "~1.4.0" } }, "os-browserify": { @@ -7267,7 +7267,7 @@ "dev": true, "optional": true, "requires": { - "lcid": "1.0.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -7282,8 +7282,8 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-finally": { @@ -7298,7 +7298,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { @@ -7307,7 +7307,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -7334,9 +7334,9 @@ "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -7345,7 +7345,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parse-asn1": { @@ -7354,11 +7354,11 @@ "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" } }, "parse-glob": { @@ -7367,10 +7367,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -7385,7 +7385,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -7396,7 +7396,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse5": { @@ -7411,7 +7411,7 @@ "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseqs": { @@ -7420,7 +7420,7 @@ "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseuri": { @@ -7429,7 +7429,7 @@ "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", "dev": true, "requires": { - "better-assert": "1.0.2" + "better-assert": "~1.0.0" } }, "parseurl": { @@ -7498,7 +7498,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pbkdf2": { @@ -7507,11 +7507,11 @@ "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { @@ -7538,7 +7538,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -7547,7 +7547,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "portfinder": { @@ -7556,9 +7556,9 @@ "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" } }, "posix-character-classes": { @@ -7573,9 +7573,9 @@ "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", "dev": true, "requires": { - "chalk": "2.4.1", - "source-map": "0.6.1", - "supports-color": "5.4.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" }, "dependencies": { "chalk": { @@ -7584,9 +7584,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "source-map": { @@ -7603,10 +7603,10 @@ "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", "dev": true, "requires": { - "postcss": "6.0.22", - "postcss-value-parser": "3.3.0", - "read-cache": "1.0.0", - "resolve": "1.7.1" + "postcss": "^6.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" } }, "postcss-load-config": { @@ -7615,10 +7615,10 @@ "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1", - "postcss-load-options": "1.2.0", - "postcss-load-plugins": "2.3.0" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" } }, "postcss-load-options": { @@ -7627,8 +7627,8 @@ "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" } }, "postcss-load-plugins": { @@ -7637,8 +7637,8 @@ "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", "dev": true, "requires": { - "cosmiconfig": "2.2.2", - "object-assign": "4.1.1" + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" } }, "postcss-loader": { @@ -7647,10 +7647,10 @@ "integrity": "sha512-pV7kB5neJ0/1tZ8L1uGOBNTVBCSCXQoIsZMsrwvO8V2rKGa2tBl/f80GGVxow2jJnRJ2w1ocx693EKhZAb9Isg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "postcss": "6.0.22", - "postcss-load-config": "1.2.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^1.2.0", + "schema-utils": "^0.4.0" } }, "postcss-url": { @@ -7659,11 +7659,11 @@ "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==", "dev": true, "requires": { - "mime": "1.6.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "postcss": "6.0.22", - "xxhashjs": "0.2.2" + "mime": "^1.4.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.0", + "postcss": "^6.0.1", + "xxhashjs": "^0.2.1" } }, "postcss-value-parser": { @@ -7690,8 +7690,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.1", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "process": { @@ -7713,7 +7713,7 @@ "dev": true, "optional": true, "requires": { - "asap": "2.0.6" + "asap": "~2.0.3" } }, "promise-inflight": { @@ -7728,21 +7728,21 @@ "integrity": "sha512-pw4uwwiy5lHZjIguxNpkEwJJa7hVz+bJsvaTI+IbXlfn2qXwzbF8eghW/RmrZwE2sGx82I8etb8lVjQ+JrjejA==", "dev": true, "requires": { - "@types/node": "6.0.112", - "@types/q": "0.0.32", - "@types/selenium-webdriver": "2.53.43", - "blocking-proxy": "1.0.1", - "chalk": "1.1.3", - "glob": "7.1.2", + "@types/node": "^6.0.46", + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "~2.53.39", + "blocking-proxy": "^1.0.0", + "chalk": "^1.1.3", + "glob": "^7.0.3", "jasmine": "2.8.0", - "jasminewd2": "2.2.0", - "optimist": "0.6.1", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", "q": "1.4.1", - "saucelabs": "1.5.0", + "saucelabs": "^1.5.0", "selenium-webdriver": "3.6.0", - "source-map-support": "0.4.18", - "webdriver-js-extender": "1.0.0", - "webdriver-manager": "12.0.6" + "source-map-support": "~0.4.0", + "webdriver-js-extender": "^1.0.0", + "webdriver-manager": "^12.0.6" }, "dependencies": { "@types/node": { @@ -7769,11 +7769,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "del": { @@ -7782,13 +7782,13 @@ "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", "dev": true, "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" } }, "globby": { @@ -7797,12 +7797,12 @@ "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "minimist": { @@ -7823,7 +7823,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } }, "supports-color": { @@ -7838,17 +7838,17 @@ "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", "dev": true, "requires": { - "adm-zip": "0.4.11", - "chalk": "1.1.3", - "del": "2.2.2", - "glob": "7.1.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "q": "1.4.1", - "request": "2.87.0", - "rimraf": "2.6.2", - "semver": "5.5.0", - "xml2js": "0.4.19" + "adm-zip": "^0.4.7", + "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", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" } } } @@ -7859,7 +7859,7 @@ "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "dev": true, "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" } }, @@ -7881,11 +7881,11 @@ "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" } }, "pump": { @@ -7894,8 +7894,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -7904,9 +7904,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.6.0", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, "punycode": { @@ -7957,9 +7957,9 @@ "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "dev": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -7976,7 +7976,7 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -7985,8 +7985,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -8022,7 +8022,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "statuses": ">= 1.3.1 < 2" } }, "setprototypeof": { @@ -8045,7 +8045,7 @@ "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.3.0" }, "dependencies": { "pify": { @@ -8062,9 +8062,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "dependencies": { "path-type": { @@ -8073,9 +8073,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -8092,8 +8092,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -8102,8 +8102,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -8112,7 +8112,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } } } @@ -8123,13 +8123,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -8138,10 +8138,10 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "redent": { @@ -8150,8 +8150,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "reflect-metadata": { @@ -8178,7 +8178,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -8187,8 +8187,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "regexpu-core": { @@ -8197,9 +8197,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -8214,7 +8214,7 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { @@ -8243,11 +8243,11 @@ "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.1.4", - "htmlparser2": "3.3.0", - "strip-ansi": "3.0.1", - "utila": "0.3.3" + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" }, "dependencies": { "utila": { @@ -8276,7 +8276,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { @@ -8285,26 +8285,26 @@ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", "dev": true, "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" } }, "require-directory": { @@ -8337,7 +8337,7 @@ "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-cwd": { @@ -8346,7 +8346,7 @@ "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" } }, "resolve-from": { @@ -8380,7 +8380,7 @@ "dev": true, "optional": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -8389,7 +8389,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "ripemd160": { @@ -8398,8 +8398,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "run-queue": { @@ -8408,7 +8408,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rxjs": { @@ -8416,7 +8416,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", "integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", "requires": { - "tslib": "1.9.2" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -8431,7 +8431,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "safer-buffer": { @@ -8447,10 +8447,10 @@ "dev": true, "optional": true, "requires": { - "glob": "7.1.2", - "lodash": "4.17.10", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" }, "dependencies": { "camelcase": { @@ -8467,9 +8467,9 @@ "dev": true, "optional": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, "y18n": { @@ -8486,19 +8486,19 @@ "dev": true, "optional": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" } } } @@ -8509,11 +8509,11 @@ "integrity": "sha512-iaSFtQcGo4SSgDw5Aes5p4VTrA5jCGSA7sGmhPIcOloBlgI1VktM2MUrk2IHHjbNagckXlPz+HWq1vAAPrcYxA==", "dev": true, "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.1.0", - "lodash.tail": "4.1.1", - "neo-async": "2.5.1", - "pify": "3.0.0" + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" } }, "saucelabs": { @@ -8522,7 +8522,7 @@ "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", "dev": true, "requires": { - "https-proxy-agent": "2.2.1" + "https-proxy-agent": "^2.2.1" } }, "sax": { @@ -8537,8 +8537,8 @@ "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", "dev": true, "requires": { - "ajv": "6.4.0", - "ajv-keywords": "3.2.0" + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" } }, "scss-tokenizer": { @@ -8548,8 +8548,8 @@ "dev": true, "optional": true, "requires": { - "js-base64": "2.4.5", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" }, "dependencies": { "source-map": { @@ -8559,7 +8559,7 @@ "dev": true, "optional": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -8576,10 +8576,10 @@ "integrity": "sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==", "dev": true, "requires": { - "jszip": "3.1.5", - "rimraf": "2.6.2", + "jszip": "^3.1.3", + "rimraf": "^2.5.4", "tmp": "0.0.30", - "xml2js": "0.4.19" + "xml2js": "^0.4.17" }, "dependencies": { "tmp": { @@ -8588,7 +8588,7 @@ "integrity": "sha1-ckGdSovn1s51FI/YsyTlk6cRwu0=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } } } @@ -8614,7 +8614,7 @@ "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", "dev": true, "requires": { - "semver": "5.5.0" + "semver": "^5.3.0" } }, "semver-intersect": { @@ -8623,7 +8623,7 @@ "integrity": "sha1-j6hKnhAovSOeRTDRo+GB5pjYhLo=", "dev": true, "requires": { - "semver": "5.5.0" + "semver": "^5.0.0" } }, "send": { @@ -8633,18 +8633,18 @@ "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "mime": { @@ -8667,13 +8667,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.18", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" } }, "serve-static": { @@ -8682,9 +8682,9 @@ "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -8706,10 +8706,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8718,7 +8718,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8741,8 +8741,8 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { @@ -8751,9 +8751,9 @@ "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" }, "dependencies": { "kind-of": { @@ -8770,7 +8770,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8791,7 +8791,7 @@ "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", "dev": true, "requires": { - "debug": "2.6.9" + "debug": "^2.2.0" } }, "slash": { @@ -8812,14 +8812,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -8828,7 +8828,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8837,7 +8837,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8848,9 +8848,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8859,7 +8859,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -8868,7 +8868,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -8877,7 +8877,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -8886,9 +8886,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -8899,7 +8899,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -8908,7 +8908,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8919,7 +8919,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "socket.io": { @@ -9070,8 +9070,8 @@ "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.2.1" + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" } }, "sockjs-client": { @@ -9080,12 +9080,12 @@ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, "requires": { - "debug": "2.6.9", + "debug": "^2.6.6", "eventsource": "0.1.6", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.1" + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" }, "dependencies": { "faye-websocket": { @@ -9094,7 +9094,7 @@ "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } } } @@ -9117,11 +9117,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "2.1.1", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -9130,8 +9130,8 @@ "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "dev": true, "requires": { - "buffer-from": "1.1.0", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -9154,8 +9154,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -9170,8 +9170,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -9186,12 +9186,12 @@ "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", "dev": true, "requires": { - "debug": "2.6.9", - "handle-thing": "1.2.5", - "http-deceiver": "1.2.7", - "safe-buffer": "5.1.2", - "select-hose": "2.0.0", - "spdy-transport": "2.1.0" + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" } }, "spdy-transport": { @@ -9200,13 +9200,13 @@ "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", "dev": true, "requires": { - "debug": "2.6.9", - "detect-node": "2.0.3", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2", - "wbuf": "1.7.3" + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" } }, "split-string": { @@ -9215,7 +9215,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -9230,15 +9230,15 @@ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "ssri": { @@ -9247,7 +9247,7 @@ "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.1" } }, "static-extend": { @@ -9256,8 +9256,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -9266,7 +9266,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -9277,7 +9277,7 @@ "integrity": "sha1-LFlJtTHgf4eojm6k3PrFOqjHWis=", "dev": true, "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.4" } }, "statuses": { @@ -9293,7 +9293,7 @@ "dev": true, "optional": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "stream-browserify": { @@ -9302,8 +9302,8 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -9312,8 +9312,8 @@ "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -9322,11 +9322,11 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { @@ -9341,9 +9341,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -9352,7 +9352,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -9367,7 +9367,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -9376,7 +9376,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -9391,7 +9391,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "style-loader": { @@ -9400,8 +9400,8 @@ "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5" } }, "stylus": { @@ -9410,12 +9410,12 @@ "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", "dev": true, "requires": { - "css-parse": "1.7.0", - "debug": "2.6.9", - "glob": "7.0.6", - "mkdirp": "0.5.1", - "sax": "0.5.8", - "source-map": "0.1.43" + "css-parse": "1.7.x", + "debug": "*", + "glob": "7.0.x", + "mkdirp": "0.5.x", + "sax": "0.5.x", + "source-map": "0.1.x" }, "dependencies": { "glob": { @@ -9424,12 +9424,12 @@ "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "source-map": { @@ -9438,7 +9438,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -9449,9 +9449,9 @@ "integrity": "sha512-+VomPdZ6a0razP+zinir61yZgpw2NfljeSsdUF5kJuEzlo3khXhY19Fn6l8QQz1GRJGtMCo8nG5C04ePyV7SUA==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "lodash.clonedeep": "4.5.0", - "when": "3.6.4" + "loader-utils": "^1.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" } }, "supports-color": { @@ -9460,7 +9460,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "symbol-observable": { @@ -9482,9 +9482,9 @@ "dev": true, "optional": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" } }, "through": { @@ -9499,8 +9499,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "thunky": { @@ -9515,7 +9515,7 @@ "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "tmp": { @@ -9524,7 +9524,7 @@ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "to-array": { @@ -9551,7 +9551,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9560,7 +9560,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9571,10 +9571,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9583,8 +9583,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toposort": { @@ -9599,7 +9599,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" }, "dependencies": { "punycode": { @@ -9635,7 +9635,7 @@ "dev": true, "optional": true, "requires": { - "glob": "6.0.4" + "glob": "^6.0.4" }, "dependencies": { "glob": { @@ -9645,11 +9645,11 @@ "dev": true, "optional": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } } } @@ -9660,14 +9660,14 @@ "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", "dev": true, "requires": { - "arrify": "1.0.1", - "chalk": "2.4.1", - "diff": "3.5.0", - "make-error": "1.3.4", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.5.6", - "yn": "2.0.0" + "arrify": "^1.0.0", + "chalk": "^2.3.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.3", + "yn": "^2.0.0" }, "dependencies": { "chalk": { @@ -9676,9 +9676,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "minimist": { @@ -9695,10 +9695,10 @@ "integrity": "sha512-JpID0Lv8/irRtPmqJJxb5fCwfZhjZeKmav9Zna7UjqVuJoSbI49Wue/c2PPybX1SbRrjl7bbI/JsCl0dSUJygA==", "dev": true, "requires": { - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map": "0.6.1", - "source-map-support": "0.5.6" + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map": "^0.6.0", + "source-map-support": "^0.5.0" }, "dependencies": { "minimist": { @@ -9726,18 +9726,18 @@ "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "builtin-modules": "1.1.1", - "chalk": "2.4.1", - "commander": "2.15.1", - "diff": "3.5.0", - "glob": "7.1.2", - "js-yaml": "3.12.0", - "minimatch": "3.0.4", - "resolve": "1.7.1", - "semver": "5.5.0", - "tslib": "1.9.2", - "tsutils": "2.27.1" + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.12.1" }, "dependencies": { "chalk": { @@ -9746,9 +9746,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } } } @@ -9759,7 +9759,7 @@ "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", "dev": true, "requires": { - "tslib": "1.9.2" + "tslib": "^1.8.1" } }, "tty-browserify": { @@ -9774,7 +9774,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -9790,7 +9790,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-is": { @@ -9800,7 +9800,7 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -9821,8 +9821,8 @@ "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", "dev": true, "requires": { - "commander": "2.15.1", - "source-map": "0.6.1" + "commander": "~2.15.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -9846,14 +9846,14 @@ "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "schema-utils": "0.4.5", - "serialize-javascript": "1.5.0", - "source-map": "0.6.1", - "uglify-es": "3.3.9", - "webpack-sources": "1.1.0", - "worker-farm": "1.6.0" + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" }, "dependencies": { "commander": { @@ -9874,8 +9874,8 @@ "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", "dev": true, "requires": { - "commander": "2.13.0", - "source-map": "0.6.1" + "commander": "~2.13.0", + "source-map": "~0.6.1" } } } @@ -9892,10 +9892,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9904,7 +9904,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -9913,10 +9913,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9927,7 +9927,7 @@ "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", "dev": true, "requires": { - "unique-slug": "2.0.0" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -9936,7 +9936,7 @@ "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "unpipe": { @@ -9951,8 +9951,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9961,9 +9961,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -10003,7 +10003,7 @@ "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -10042,9 +10042,9 @@ "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", "dev": true, "requires": { - "loader-utils": "1.1.0", - "mime": "2.3.1", - "schema-utils": "0.4.5" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^0.4.3" }, "dependencies": { "mime": { @@ -10061,8 +10061,8 @@ "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", "dev": true, "requires": { - "querystringify": "2.0.0", - "requires-port": "1.0.0" + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" } }, "use": { @@ -10071,7 +10071,7 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" } }, "useragent": { @@ -10080,8 +10080,8 @@ "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "4.1.3", - "tmp": "0.0.31" + "lru-cache": "4.1.x", + "tmp": "0.0.x" } }, "util": { @@ -10105,8 +10105,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.2", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -10133,8 +10133,8 @@ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "validate-npm-package-name": { @@ -10143,7 +10143,7 @@ "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", "dev": true, "requires": { - "builtins": "1.0.3" + "builtins": "^1.0.3" } }, "vary": { @@ -10158,9 +10158,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" } }, "vm-browserify": { @@ -10184,9 +10184,9 @@ "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", "dev": true, "requires": { - "chokidar": "2.0.3", - "graceful-fs": "4.1.11", - "neo-async": "2.5.1" + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" } }, "wbuf": { @@ -10195,7 +10195,7 @@ "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { - "minimalistic-assert": "1.0.1" + "minimalistic-assert": "^1.0.0" } }, "webassemblyjs": { @@ -10208,7 +10208,7 @@ "@webassemblyjs/validation": "1.4.3", "@webassemblyjs/wasm-parser": "1.4.3", "@webassemblyjs/wast-parser": "1.4.3", - "long": "3.2.0" + "long": "^3.2.0" } }, "webdriver-js-extender": { @@ -10217,8 +10217,8 @@ "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", "dev": true, "requires": { - "@types/selenium-webdriver": "2.53.43", - "selenium-webdriver": "2.53.3" + "@types/selenium-webdriver": "^2.53.35", + "selenium-webdriver": "^2.53.2" }, "dependencies": { "sax": { @@ -10234,9 +10234,9 @@ "dev": true, "requires": { "adm-zip": "0.4.4", - "rimraf": "2.6.2", + "rimraf": "^2.2.8", "tmp": "0.0.24", - "ws": "1.1.2", + "ws": "^1.0.1", "xml2js": "0.4.4" } }, @@ -10252,8 +10252,8 @@ "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", "dev": true, "requires": { - "sax": "0.6.1", - "xmlbuilder": "9.0.7" + "sax": "0.6.x", + "xmlbuilder": ">=1.0.0" } } } @@ -10267,25 +10267,25 @@ "@webassemblyjs/ast": "1.4.3", "@webassemblyjs/wasm-edit": "1.4.3", "@webassemblyjs/wasm-parser": "1.4.3", - "acorn": "5.6.2", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.4.0", - "ajv-keywords": "3.2.0", - "chrome-trace-event": "0.1.3", - "enhanced-resolve": "4.0.0", - "eslint-scope": "3.7.1", - "loader-runner": "2.3.0", - "loader-utils": "1.1.0", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.5.1", - "node-libs-browser": "2.1.0", - "schema-utils": "0.4.5", - "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.5", - "watchpack": "1.6.0", - "webpack-sources": "1.1.0" + "acorn": "^5.0.0", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^0.1.1", + "enhanced-resolve": "^4.0.0", + "eslint-scope": "^3.7.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.0.1" } }, "webpack-core": { @@ -10294,8 +10294,8 @@ "integrity": "sha1-/FcViMhVjad76e+23r3Fo7FyvcI=", "dev": true, "requires": { - "source-list-map": "0.1.8", - "source-map": "0.4.4" + "source-list-map": "~0.1.7", + "source-map": "~0.4.1" }, "dependencies": { "source-list-map": { @@ -10310,7 +10310,7 @@ "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -10321,13 +10321,13 @@ "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", "dev": true, "requires": { - "loud-rejection": "1.6.0", - "memory-fs": "0.4.1", - "mime": "2.3.1", - "path-is-absolute": "1.0.1", - "range-parser": "1.2.0", - "url-join": "4.0.0", - "webpack-log": "1.2.0" + "loud-rejection": "^1.6.0", + "memory-fs": "~0.4.1", + "mime": "^2.1.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "url-join": "^4.0.0", + "webpack-log": "^1.0.1" }, "dependencies": { "mime": { @@ -10345,32 +10345,32 @@ "dev": true, "requires": { "ansi-html": "0.0.7", - "array-includes": "3.0.3", - "bonjour": "3.5.0", - "chokidar": "2.0.3", - "compression": "1.7.2", - "connect-history-api-fallback": "1.5.0", - "debug": "3.1.0", - "del": "3.0.0", - "express": "4.16.3", - "html-entities": "1.2.1", - "http-proxy-middleware": "0.18.0", - "import-local": "1.0.0", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^1.0.0", "internal-ip": "1.2.0", - "ip": "1.1.5", - "killable": "1.0.0", - "loglevel": "1.6.1", - "opn": "5.3.0", - "portfinder": "1.0.13", - "selfsigned": "1.10.3", - "serve-index": "1.9.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", "sockjs": "0.3.19", "sockjs-client": "1.1.4", - "spdy": "3.4.7", - "strip-ansi": "3.0.1", - "supports-color": "5.4.0", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", "webpack-dev-middleware": "3.1.3", - "webpack-log": "1.2.0", + "webpack-log": "^1.1.2", "yargs": "11.0.0" }, "dependencies": { @@ -10392,9 +10392,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "strip-ansi": { @@ -10403,7 +10403,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -10429,9 +10429,9 @@ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", "dev": true, "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" } }, "string-width": { @@ -10440,8 +10440,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "strip-ansi": { @@ -10450,7 +10450,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -10473,18 +10473,18 @@ "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.2", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.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", + "yargs-parser": "^9.0.2" } }, "yargs-parser": { @@ -10493,7 +10493,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" } } } @@ -10504,10 +10504,10 @@ "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", "dev": true, "requires": { - "chalk": "2.2.2", - "log-symbols": "2.2.0", - "loglevelnext": "1.0.5", - "uuid": "3.2.1" + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "loglevelnext": "^1.0.1", + "uuid": "^3.1.0" } }, "webpack-merge": { @@ -10516,7 +10516,7 @@ "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", "dev": true, "requires": { - "lodash": "4.17.10" + "lodash": "^4.17.5" } }, "webpack-sources": { @@ -10525,8 +10525,8 @@ "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "dev": true, "requires": { - "source-list-map": "2.0.0", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -10543,7 +10543,7 @@ "integrity": "sha1-xcTj1pD50vZKlVDgeodn+Xlqpdg=", "dev": true, "requires": { - "webpack-core": "0.6.9" + "webpack-core": "^0.6.8" } }, "websocket-driver": { @@ -10552,8 +10552,8 @@ "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "http-parser-js": "0.4.13", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { @@ -10574,7 +10574,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "which-module": { @@ -10590,7 +10590,7 @@ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2 || 2" } }, "window-size": { @@ -10612,7 +10612,7 @@ "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -10621,8 +10621,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" } }, "wrappy": { @@ -10637,8 +10637,8 @@ "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", "dev": true, "requires": { - "options": "0.0.6", - "ultron": "1.0.2" + "options": ">=0.0.5", + "ultron": "1.0.x" } }, "wtf-8": { @@ -10653,8 +10653,8 @@ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "sax": "1.2.4", - "xmlbuilder": "9.0.7" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" }, "dependencies": { "sax": { @@ -10689,7 +10689,7 @@ "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", "dev": true, "requires": { - "cuint": "0.2.2" + "cuint": "^0.2.2" } }, "y18n": { @@ -10711,9 +10711,9 @@ "dev": true, "optional": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" } }, @@ -10724,7 +10724,7 @@ "dev": true, "optional": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^3.0.0" }, "dependencies": { "camelcase": { diff --git a/client/package.json b/client/package.json index 7fbe561..1627439 100644 --- a/client/package.json +++ b/client/package.json @@ -11,7 +11,7 @@ }, "private": true, "dependencies": { - "@angular/animations": "^6.0.3", + "@angular/animations": "^6.0.5", "@angular/cdk": "^6.2.1", "@angular/common": "^6.0.3", "@angular/compiler": "^6.0.3", diff --git a/client/src/app-theme.scss b/client/src/app-theme.scss new file mode 100644 index 0000000..3849fc8 --- /dev/null +++ b/client/src/app-theme.scss @@ -0,0 +1,24 @@ +@import '~@angular/material/theming'; +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat-core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. +$client-app-primary: mat-palette($mat-indigo); +$client-app-accent: mat-palette($mat-pink, A200, A100, A400); + +// The warn palette is optional (defaults to red). +$client-app-warn: mat-palette($mat-red); + +// Create the theme object (a Sass map containing all of the palettes). +$client-app-theme: mat-light-theme($client-app-primary, $client-app-accent, $client-app-warn); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include angular-material-theme($client-app-theme); diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index 2eadf87..f05f33b 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -3,7 +3,7 @@ import { Routes, RouterModule } from '@angular/router'; const routes: Routes = [ { path: '', redirectTo: 'users', pathMatch: 'full' }, - { path: 'users', loadChildren: './modules/users/users.module#UsersModule' }, + { path: 'users', loadChildren: './users/users.module#UsersModule' }, ]; @NgModule({ diff --git a/client/src/app/reducers/index.ts b/client/src/app/reducers/index.ts index 869004e..ae1424b 100644 --- a/client/src/app/reducers/index.ts +++ b/client/src/app/reducers/index.ts @@ -6,7 +6,7 @@ import { MetaReducer } from '@ngrx/store'; import { environment } from '../../environments/environment'; -import * as fromUsers from '../users/users.reducer'; +import * as fromUsers from '../users/reducers/users.reducer'; export interface State { users: fromUsers.State; @@ -18,3 +18,8 @@ export const reducers: ActionReducerMap = { export const metaReducers: MetaReducer[] = !environment.production ? [] : []; + +/** + * Layout Reducers + */ +export const getUsersState = createFeatureSelector('users'); diff --git a/client/src/app/users/actions/users.actions.ts b/client/src/app/users/actions/users.actions.ts index 9376984..73f238b 100644 --- a/client/src/app/users/actions/users.actions.ts +++ b/client/src/app/users/actions/users.actions.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; -import { User } from '../models/user.model'; +import { User, UsersResponse } from '../models/user.model'; export enum UsersActionTypes { LoadUsers = '[Users] Load All Users', @@ -17,7 +17,7 @@ export class LoadUsersAction implements Action { export class LoadUsersSuccessAction implements Action { readonly type = UsersActionTypes.LoadUsersSuccess; - constructor(public payload: User[]) {} + constructor(public payload: UsersResponse) {} } export class LoadUsersFailedAction implements Action { diff --git a/client/src/app/users/components/user/user.component.html b/client/src/app/users/components/user/user.component.html index 5e7fd58..dfc511b 100644 --- a/client/src/app/users/components/user/user.component.html +++ b/client/src/app/users/components/user/user.component.html @@ -1,3 +1,6 @@ -

- user works! -

+ +
+ Name: {{ user.name }} + Age: {{ user.age }} + Email: {{ user.email }} +
diff --git a/client/src/app/users/components/user/user.component.css b/client/src/app/users/components/user/user.component.scss similarity index 100% rename from client/src/app/users/components/user/user.component.css rename to client/src/app/users/components/user/user.component.scss diff --git a/client/src/app/users/components/user/user.component.ts b/client/src/app/users/components/user/user.component.ts index 8a33d00..c40084c 100644 --- a/client/src/app/users/components/user/user.component.ts +++ b/client/src/app/users/components/user/user.component.ts @@ -1,15 +1,15 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; + +import { User } from '../../models/user.model'; @Component({ selector: 'client-user', templateUrl: './user.component.html', - styleUrls: ['./user.component.css'] + styleUrls: ['./user.component.scss'] }) -export class UserComponent implements OnInit { +export class UserComponent { + @Input() user: User; constructor() { } - ngOnInit() { - } - } diff --git a/client/src/app/users/components/users-list/users-list.component.css b/client/src/app/users/components/users-list/users-list.component.css deleted file mode 100644 index e69de29..0000000 diff --git a/client/src/app/users/components/users-list/users-list.component.html b/client/src/app/users/components/users-list/users-list.component.html index da587c0..ee84889 100644 --- a/client/src/app/users/components/users-list/users-list.component.html +++ b/client/src/app/users/components/users-list/users-list.component.html @@ -1,3 +1,3 @@ -

- users-list works! -

+ + + diff --git a/client/src/app/users/components/users-list/users-list.component.scss b/client/src/app/users/components/users-list/users-list.component.scss new file mode 100644 index 0000000..5f199fa --- /dev/null +++ b/client/src/app/users/components/users-list/users-list.component.scss @@ -0,0 +1,5 @@ +mat-card { + width: 300px; + margin: 10px; + display: inline-block; +} diff --git a/client/src/app/users/components/users-list/users-list.component.ts b/client/src/app/users/components/users-list/users-list.component.ts index bf16327..31d456e 100644 --- a/client/src/app/users/components/users-list/users-list.component.ts +++ b/client/src/app/users/components/users-list/users-list.component.ts @@ -1,15 +1,26 @@ +import { Observable } from 'rxjs'; +import { Store } from '@ngrx/store'; import { Component, OnInit } from '@angular/core'; +import * as fromRoot from '../../../reducers'; +import { User } from '../../models/user.model'; +import { LoadUsersAction } from '../../actions/users.actions'; + @Component({ selector: 'client-users-list', templateUrl: './users-list.component.html', - styleUrls: ['./users-list.component.css'] + styleUrls: ['./users-list.component.scss'] }) export class UsersListComponent implements OnInit { + public users$: Observable; - constructor() { } + constructor( + private store: Store, + ) { } ngOnInit() { + this.store.dispatch(new LoadUsersAction()); + this.users$ = this.store.select(fromRoot.getUsersState); } } diff --git a/client/src/app/users/models/user.model.ts b/client/src/app/users/models/user.model.ts index 7cd7859..70586d7 100644 --- a/client/src/app/users/models/user.model.ts +++ b/client/src/app/users/models/user.model.ts @@ -1,3 +1,13 @@ export interface User { - _id?: string; + age: string; + date_joined: number; + dirty_fields?: Array; + email: string; + id: number; + name: string; +} + +export interface UsersResponse { + _message: string; + users: User[]; } diff --git a/client/src/app/users/reducers/users.reducer.ts b/client/src/app/users/reducers/users.reducer.ts index dea3e61..3b39410 100644 --- a/client/src/app/users/reducers/users.reducer.ts +++ b/client/src/app/users/reducers/users.reducer.ts @@ -1,13 +1,18 @@ import { Action } from '@ngrx/store'; -import { UsersActions, UsersActionTypes } from '../actions/users.actions'; - -export interface State { -} +import { User } from '../models/user.model'; +import { UsersActions, UsersActionTypes } from '../actions/users.actions'; -export const initialState: State = { +export type State = User[]; -}; +export const initialState: State = [{ + 'age': '', + 'date_joined': 0, + 'dirty_fields': [], + 'email': '', + 'id': 0, + 'name': '', +}]; export function reducer(state = initialState, action: UsersActions): State { switch (action.type) { @@ -16,7 +21,7 @@ export function reducer(state = initialState, action: UsersActions): State { return state; case UsersActionTypes.LoadUsersSuccess: - return state; + return action.payload.users; default: return state; diff --git a/client/src/app/users/services/users.service.ts b/client/src/app/users/services/users.service.ts index dab8576..efb8c12 100644 --- a/client/src/app/users/services/users.service.ts +++ b/client/src/app/users/services/users.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; import { HttpClient } from '@angular/common/http'; -import { User } from '../models/user.model'; +import { UsersResponse } from '../models/user.model'; import { environment } from '../../../environments/environment'; @@ -15,7 +15,7 @@ export class UsersService { private http: HttpClient, ) { } - getAllUsers(): Observable { - return this.http.get(`${environment.backend}/users`); + getAllUsers(): Observable { + return this.http.get(`${environment.backend}/users`); } } diff --git a/client/src/app/users/users-routing.module.ts b/client/src/app/users/users-routing.module.ts index b059875..0c90462 100644 --- a/client/src/app/users/users-routing.module.ts +++ b/client/src/app/users/users-routing.module.ts @@ -1,7 +1,11 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; -const routes: Routes = []; +import { UsersListComponent } from './components/users-list/users-list.component'; + +const routes: Routes = [ + { path: '', component: UsersListComponent, }, +]; @NgModule({ imports: [RouterModule.forChild(routes)], diff --git a/client/src/app/users/users.module.ts b/client/src/app/users/users.module.ts index d945195..5ca96c1 100644 --- a/client/src/app/users/users.module.ts +++ b/client/src/app/users/users.module.ts @@ -1,19 +1,38 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; +import { HttpClientModule } from '@angular/common/http'; + +import { MatCardModule } from '@angular/material'; + +import { EffectsModule } from '@ngrx/effects'; import { UsersRoutingModule } from './users-routing.module'; import { UserComponent } from './components/user/user.component'; import { UsersListComponent } from './components/users-list/users-list.component'; +import { UsersEffects } from './effects/users.effects'; + +import { UsersService } from './services/users.service'; + +import { environment } from '../../environments/environment'; + @NgModule({ imports: [ CommonModule, + HttpClientModule, UsersRoutingModule, + MatCardModule, + EffectsModule.forRoot([ + UsersEffects, + ]) ], declarations: [ UserComponent, UsersListComponent, + ], + providers: [ + UsersService, ] }) export class UsersModule { } diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index a4f6edd..bdad566 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts @@ -4,7 +4,7 @@ export const environment = { production: false, - backend: '', + backend: 'http://localhost:8000', }; /* diff --git a/client/src/index.html b/client/src/index.html index b885a51..d4073a5 100644 --- a/client/src/index.html +++ b/client/src/index.html @@ -7,6 +7,7 @@ + diff --git a/client/src/main.ts b/client/src/main.ts index 91ec6da..3a24a24 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,3 +1,5 @@ +import 'hammerjs'; + import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; diff --git a/client/src/styles.scss b/client/src/styles.scss index 90d4ee0..cb69dd3 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -1 +1,7 @@ /* You can add global styles to this file, and also import other style files */ + +body { + margin: 0; + padding: 0; + font-family: 'Roboto', sans-serif; +} diff --git a/server/Pipfile b/server/Pipfile index 0b28f24..63c3827 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -11,6 +11,7 @@ sanic = "*" aiopg = "*" peewee-async = "*" peewee = "*" +sanic-cors = "*" [dev-packages] diff --git a/server/Pipfile.lock b/server/Pipfile.lock deleted file mode 100644 index 2dc0503..0000000 --- a/server/Pipfile.lock +++ /dev/null @@ -1,154 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "829a6c65f70f1db3ab3b01009a2056846e4dfa90c450cc53eac229df20e90536" - }, - "pipfile-spec": 6, - "requires": { - "python_version": "3.6" - }, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "aiofiles": { - "hashes": [ - "sha256:25c66ea3872d05d53292a6b3f7fa0f86691512076446d83a505d227b5e76f668", - "sha256:852a493a877b73e11823bfd4e8e5ef2610d70d12c9eaed961bcd9124d8de8c10" - ], - "version": "==0.3.2" - }, - "aiopg": { - "hashes": [ - "sha256:7dee52e0fa4697bace62d39180df96e94a328ee96aa211c8e93c346b8ffd1bcc", - "sha256:a6a4c41938bb177e583c43cf47e2179e5822d3c175d5a99b165945eb4fba12ea" - ], - "version": "==0.14.0" - }, - "asyncio": { - "hashes": [ - "sha256:83360ff8bc97980e4ff25c964c7bd3923d333d177aa4f7fb736b019f26c7cb41", - "sha256:b62c9157d36187eca799c378e572c969f0da87cd5fc42ca372d92cdb06e7e1de", - "sha256:c46a87b48213d7464f22d9a497b9eef8c1928b68320a2fa94240f969f6fec08c", - "sha256:c4d18b22701821de07bd6aea8b53d21449ec0ec5680645e5317062ea21817d2d" - ], - "markers": "python_version == '3.3'", - "version": "==3.4.3" - }, - "httptools": { - "hashes": [ - "sha256:04c7703bbef0e8ca28b09811547352b8c7c20549eab70dc24e536bb24fd2b7c5" - ], - "version": "==0.0.11" - }, - "peewee": { - "hashes": [ - "sha256:2342067f48a779e35956a44cd547df883dda35153daa9fe994d970585aaec281" - ], - "version": "==2.10.2" - }, - "peewee-async": { - "hashes": [ - "sha256:1376774637b6f5cfb9192a06380a8e987fed206e0e229bbadd50da6a4578557b", - "sha256:ab64a2a376033ce5621406b33735cb064659af05f5c2570af0fba08f6eab6282" - ], - "version": "==0.5.12" - }, - "psycopg2": { - "hashes": [ - "sha256:027ae518d0e3b8fff41990e598bc7774c3d08a3a20e9ecc0b59fb2aaaf152f7f", - "sha256:092a80da1b052a181b6e6c765849c9b32d46c5dac3b81bf8c9b83e697f3cdbe8", - "sha256:0b9851e798bae024ed1a2a6377a8dab4b8a128a56ed406f572f9f06194e4b275", - "sha256:179c52eb870110a8c1b460c86d4f696d58510ea025602cd3f81453746fccb94f", - "sha256:19983b77ec1fc2a210092aa0333ee48811fd9fb5f194c6cd5b927ed409aea5f8", - "sha256:1d90379d01d0dc50ae9b40c863933d87ff82d51dd7d52cea5d1cb7019afd72cd", - "sha256:27467fd5af1dcc0a82d72927113b8f92da8f44b2efbdb8906bd76face95b596d", - "sha256:32702e3bd8bfe12b36226ba9846ed9e22336fc4bd710039d594b36bd432ae255", - "sha256:33f9e1032095e1436fa9ec424abcbd4c170da934fb70e391c5d78275d0307c75", - "sha256:36030ca7f4b4519ee4f52a74edc4ec73c75abfb6ea1d80ac7480953d1c0aa3c3", - "sha256:363fbbf4189722fc46779be1fad2597e2c40b3f577dc618f353a46391cf5d235", - "sha256:6f302c486132f8dd11f143e919e236ea4467d53bf18c451cac577e6988ecbd05", - "sha256:733166464598c239323142c071fa4c9b91c14359176e5ae7e202db6bcc1d2eb5", - "sha256:7cbc3b21ce2f681ca9ad2d8c0901090b23a30c955e980ebf1006d41f37068a95", - "sha256:888bba7841116e529f407f15c6d28fe3ef0760df8c45257442ec2f14f161c871", - "sha256:8966829cb0d21a08a3c5ac971a2eb67c3927ae27c247300a8476554cc0ce2ae8", - "sha256:8bf51191d60f6987482ef0cfe8511bbf4877a5aa7f313d7b488b53189cf26209", - "sha256:8eb94c0625c529215b53c08fb4e461546e2f3fc96a49c13d5474b5ad7aeab6cf", - "sha256:8ebba5314c609a05c6955e5773c7e0e57b8dd817e4f751f30de729be58fa5e78", - "sha256:932a4c101af007cb3132b1f8a9ffef23386acc53dad46536dc5ba43a3235ae02", - "sha256:ad75fe10bea19ad2188c5cb5fc4cdf53ee808d9b44578c94a3cd1e9fc2beb656", - "sha256:aeaba399254ca79c299d9fe6aa811d3c3eac61458dee10270de7f4e71c624998", - "sha256:b178e0923c93393e16646155794521e063ec17b7cc9f943f15b7d4b39776ea2c", - "sha256:b68e89bb086a9476fa85298caab43f92d0a6af135a5f433d1f6b6d82cafa7b55", - "sha256:d74cf9234ba76426add5e123449be08993a9b13ff434c6efa3a07caa305a619f", - "sha256:f3d3a88128f0c219bdc5b2d9ccd496517199660cea021c560a3252116df91cbd", - "sha256:fe6a7f87356116f5ea840c65b032af17deef0e1a5c34013a2962dd6f99b860dd" - ], - "version": "==2.7.4" - }, - "sanic": { - "hashes": [ - "sha256:18a3bd729093ac93a245849c44045c505a11e6d36da5bf231cb986bfb1e3c14c", - "sha256:22b1a6f1dc55db8a136335cb0961afa95040ca78aa8c78425a40d91e8618e60e" - ], - "version": "==0.7.0" - }, - "singledispatch": { - "hashes": [ - "sha256:5b06af87df13818d14f08a028e42f566640aef80805c3b50c5056b086e3c2b9c", - "sha256:833b46966687b3de7f438c761ac475213e53b306740f1abfaa86e1d1aae56aa8" - ], - "markers": "python_version == '3.3'", - "version": "==3.4.0.3" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" - }, - "ujson": { - "hashes": [ - "sha256:f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86" - ], - "version": "==1.35" - }, - "uvloop": { - "hashes": [ - "sha256:2d4aaae6e3b35416a82b52f7d41d7d366c8870627a923262e0654ab95e0a37da", - "sha256:3286e803eeb55413b4f1ef38f43a40340c490d3b7b1427ff2e50bacff7ee95a3", - "sha256:5aade4aa1f5508ca1aa26cd01ebaf1d638d06c9a326f78755643c4bcafff17a7", - "sha256:6fbcd4f5515d4a07da471261e75d30b7a6af3025413edd1bf68e56835534d32e", - "sha256:8b4c009b5cd8b2270bdccff288f6d162526bc80dc7fd142592f1761441ffc229", - "sha256:90f9d3ba56ddd554954feff381306ec7e8c31305fc8bf686277b7d8c46e09d68", - "sha256:f95fc54b281c87021ed931cdc18c6e5983bbd16b0369038354bef5210173d5f1" - ], - "version": "==0.10.1" - }, - "websockets": { - "hashes": [ - "sha256:0b7b561bcbf992edd54e961b89551b5b6073415a0446fe445bd6554d41dabb95", - "sha256:2469c98f2254878a49a6eda248d3ed8a89bbdca85cc316ff72ea15924cec9e1f", - "sha256:29b676568e4fcb1a05064473b96243ef4e9391f251b4c485cf7f93507787b459", - "sha256:2a05e42400de009c1c330167cd6d90b300d2364d2dd1e6539d01a6a22901967b", - "sha256:39241fb291c1648e33dc41208be876a5771466291f0f6f7bff8f6732373084bd", - "sha256:43c332fc331541c57d40c124089b270d668c25a6b04908bd688969375db7327f", - "sha256:480259ec6e80f28859f23b5c231beb856fb96ab30e64ee621fdaf27da1515604", - "sha256:9049ec652713f5132b512d3498c2d37264580714ccc95dbc0f7f9622c3f6da7e", - "sha256:a17c45716178a42cc8f66f587507f01e169a75556749d88f714e4c1d295885d1", - "sha256:a49d315db5a7a19d55422e1678e8a1c3b9661d7296bef3179fa620cf80b12674", - "sha256:a911beb8149d7dae9d4c942927c448c05c41dfaa9c002a6bc26e269df932769b", - "sha256:cf34479130704797ce28a478f0b5985abe71ea90999a1c956e15fe0b0b11d0dc", - "sha256:d3724acff61ee1029fefc614cf005982338b033998a0b71fbb13a0a2fd99ab6f" - ], - "version": "==5.0.1" - } - }, - "develop": {} -} diff --git a/server/main.py b/server/main.py index fb2a0fb..1d2207a 100644 --- a/server/main.py +++ b/server/main.py @@ -1,5 +1,6 @@ from sanic import Sanic from sanic.response import json +from sanic_cors import CORS from api.users.routes import users_routes from util.middlewares import handle_request, handle_response @@ -7,6 +8,7 @@ # Start the app and load environment variables. app = Sanic(load_env=True) app.config.from_envvar('ENV_VARS') +CORS(app) # root route From 277d520349f1828c163d6f2178ea7a16bb5636bf Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Tue, 8 Oct 2019 21:32:48 +0300 Subject: [PATCH 33/35] Update project (#98) * Update client to angular v8 * Fix server database connection * Fix client errors * Add requirements file from pipfile * Fix travis file * Fix travis * Fix server errors * Fix travis errors * Fix travis * Fix travis * Fix travis * Fix travis * Fix angular lint errors * Fix travis * Add chrome to travis * Fix travis * Fix travis * Fix travis * Fix travis last take? * Fix travis * Fix server errors * Add pwa * Cleanup --- .travis.yml | 93 +- client/.editorconfig | 2 +- client/.gitignore | 39 - client/README.md | 31 +- client/angular.json | 78 +- client/browserslist | 12 + client/e2e/protractor.conf.js | 6 +- client/e2e/src/app.e2e-spec.ts | 10 +- client/e2e/src/app.po.ts | 6 +- .../e2e/{tsconfig.e2e.json => tsconfig.json} | 4 +- client/{src => }/karma.conf.js | 9 +- client/ngsw-config.json | 29 + client/package-lock.json | 14987 +++++++++------- client/package.json | 70 +- client/src/app/app-routing.module.ts | 3 +- client/src/app/app.component.spec.ts | 9 +- client/src/app/app.component.ts | 2 +- client/src/app/app.module.ts | 14 +- .../app/modules/material/material.module.ts | 23 + .../app/modules/users/actions/user.actions.ts | 17 + .../users-list/users-list.component.html | 16 + .../users-list/users-list.component.scss | 3 +- .../users-list/users-list.component.spec.ts | 8 +- .../users-list/users-list.component.ts | 41 + .../app/modules/users/effects/user.effects.ts | 32 + .../{ => modules}/users/models/user.model.ts | 8 +- .../src/app/modules/users/reducers/index.ts | 30 + .../modules/users/reducers/user.reducer.ts | 29 + .../users/services/user.service.spec.ts | 31 + .../users/services/user.service.ts} | 11 +- .../users/users-routing.module.ts | 5 +- client/src/app/modules/users/users.module.ts | 38 + client/src/app/reducers/index.ts | 8 - .../app/users/actions/users.actions.spec.ts | 31 - client/src/app/users/actions/users.actions.ts | 32 - .../users/components/user/user.component.html | 6 - .../users/components/user/user.component.scss | 0 .../components/user/user.component.spec.ts | 25 - .../users/components/user/user.component.ts | 15 - .../users-list/users-list.component.html | 3 - .../users-list/users-list.component.ts | 26 - .../app/users/effects/users.effects.spec.ts | 25 - client/src/app/users/effects/users.effects.ts | 35 - .../app/users/reducers/users.reducer.spec.ts | 13 - .../src/app/users/reducers/users.reducer.ts | 29 - .../app/users/services/users.service.spec.ts | 42 - client/src/app/users/users.module.spec.ts | 13 - client/src/app/users/users.module.ts | 38 - client/src/assets/icons/icon-128x128.png | Bin 0 -> 1253 bytes client/src/assets/icons/icon-144x144.png | Bin 0 -> 1394 bytes client/src/assets/icons/icon-152x152.png | Bin 0 -> 1427 bytes client/src/assets/icons/icon-192x192.png | Bin 0 -> 1790 bytes client/src/assets/icons/icon-384x384.png | Bin 0 -> 3557 bytes client/src/assets/icons/icon-512x512.png | Bin 0 -> 5008 bytes client/src/assets/icons/icon-72x72.png | Bin 0 -> 792 bytes client/src/assets/icons/icon-96x96.png | Bin 0 -> 958 bytes .../src/{app-theme.scss => assp-theme.scss} | 17 +- client/src/browserslist | 9 - client/src/environments/environment.ts | 11 +- client/src/favicon.ico | Bin 5430 -> 948 bytes client/src/index.html | 6 +- client/src/main.ts | 2 +- client/src/manifest.webmanifest | 51 + client/src/polyfills.ts | 59 +- client/src/styles.scss | 35 +- client/src/tsconfig.app.json | 12 - client/src/tsconfig.spec.json | 19 - client/src/tslint.json | 17 - client/tsconfig.app.json | 18 + client/tsconfig.json | 14 +- client/tsconfig.spec.json | 18 + client/tslint.json | 126 +- server/Pipfile | 10 +- server/Pipfile.lock | 283 + server/README.md | 12 +- server/api/users/model.py | 9 + server/api/users/tests.py | 8 + server/main.py | 19 +- server/requirements.txt | 25 + server/util/config.py | 14 + server/util/middlewares.py | 25 - server/util/seed.py | 21 + 82 files changed, 9828 insertions(+), 7049 deletions(-) delete mode 100644 client/.gitignore create mode 100644 client/browserslist rename client/e2e/{tsconfig.e2e.json => tsconfig.json} (84%) rename client/{src => }/karma.conf.js (83%) create mode 100644 client/ngsw-config.json create mode 100644 client/src/app/modules/material/material.module.ts create mode 100644 client/src/app/modules/users/actions/user.actions.ts create mode 100644 client/src/app/modules/users/components/users-list/users-list.component.html rename client/src/app/{ => modules}/users/components/users-list/users-list.component.scss (54%) rename client/src/app/{ => modules}/users/components/users-list/users-list.component.spec.ts (68%) create mode 100644 client/src/app/modules/users/components/users-list/users-list.component.ts create mode 100644 client/src/app/modules/users/effects/user.effects.ts rename client/src/app/{ => modules}/users/models/user.model.ts (78%) create mode 100644 client/src/app/modules/users/reducers/index.ts create mode 100644 client/src/app/modules/users/reducers/user.reducer.ts create mode 100644 client/src/app/modules/users/services/user.service.spec.ts rename client/src/app/{users/services/users.service.ts => modules/users/services/user.service.ts} (60%) rename client/src/app/{ => modules}/users/users-routing.module.ts (85%) create mode 100644 client/src/app/modules/users/users.module.ts delete mode 100644 client/src/app/users/actions/users.actions.spec.ts delete mode 100644 client/src/app/users/actions/users.actions.ts delete mode 100644 client/src/app/users/components/user/user.component.html delete mode 100644 client/src/app/users/components/user/user.component.scss delete mode 100644 client/src/app/users/components/user/user.component.spec.ts delete mode 100644 client/src/app/users/components/user/user.component.ts delete mode 100644 client/src/app/users/components/users-list/users-list.component.html delete mode 100644 client/src/app/users/components/users-list/users-list.component.ts delete mode 100644 client/src/app/users/effects/users.effects.spec.ts delete mode 100644 client/src/app/users/effects/users.effects.ts delete mode 100644 client/src/app/users/reducers/users.reducer.spec.ts delete mode 100644 client/src/app/users/reducers/users.reducer.ts delete mode 100644 client/src/app/users/services/users.service.spec.ts delete mode 100644 client/src/app/users/users.module.spec.ts delete mode 100644 client/src/app/users/users.module.ts create mode 100644 client/src/assets/icons/icon-128x128.png create mode 100644 client/src/assets/icons/icon-144x144.png create mode 100644 client/src/assets/icons/icon-152x152.png create mode 100644 client/src/assets/icons/icon-192x192.png create mode 100644 client/src/assets/icons/icon-384x384.png create mode 100644 client/src/assets/icons/icon-512x512.png create mode 100644 client/src/assets/icons/icon-72x72.png create mode 100644 client/src/assets/icons/icon-96x96.png rename client/src/{app-theme.scss => assp-theme.scss} (62%) delete mode 100644 client/src/browserslist create mode 100644 client/src/manifest.webmanifest delete mode 100644 client/src/tsconfig.app.json delete mode 100644 client/src/tsconfig.spec.json delete mode 100644 client/src/tslint.json create mode 100644 client/tsconfig.app.json create mode 100644 client/tsconfig.spec.json create mode 100644 server/Pipfile.lock create mode 100644 server/api/users/tests.py create mode 100644 server/requirements.txt create mode 100644 server/util/config.py delete mode 100644 server/util/middlewares.py create mode 100644 server/util/seed.py diff --git a/.travis.yml b/.travis.yml index a7fade8..9dec446 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,52 +1,41 @@ -sudo: required -dist: trusty - -addons: - apt: - sources: - - google-chrome - packages: - - google-chrome-stable - -language: python -python: - - 3.6 - -services: - - postgresql - -cache: - npm: true - directories: - - client/node_modules - -before_install: - - npm install -g npm@latest local-web-server codecov - - export CHROME_BIN=chromium-browser - - export DISPLAY=:99.0 - - sh -e /etc/init.d/xvfb start - -install: - # Client - - cd client && npm install - - # Server - - cd ../server && pip install coverage pycodestyle - - pip install -r requirements.txt - - psql -c 'create database server;' -U postgres - -script: - # Client - - cd ../client && npm run lint - - npm run test - - npm run build - - cd dist && ws --port 4200& - - npm run e2e - - # Server - - cd ../server && coverage run --source='.' manage.py test - - coverage xml - - pycodestyle --show-source --max-line-length=120 --show-pep8 . - -after_script: - - cd .. && codecov +matrix: + include: + - language: python + python: 3.7 + env: + - DB_URI="postgres://postgres:@localhost:5432/assp" + - DB_NAME="assp" + - DB_USER="postgres" + - DB_PASSWORD="" + - DB_PORT="5432" + - HOST="0.0.0.0" + - PORT="8000" + - LOG_LEVEL="info" + - ENV="development" + services: + - postgresql + before_script: + - cd server && pip install coverage pycodestyle python-dotenv + - pip install -r requirements.txt + - psql -c 'create database assp;' -U postgres + script: + - python -m unittest + - pycodestyle --show-source --max-line-length=120 --show-pep8 . + + - language: node_js + node_js: + - v12 + services: + - xvfb + addons: + chrome: stable + before_install: + - npm install -g npm@latest codecov + - export DISPLAY=:99.0 + install: + - cd client && npm install + script: + - npm run lint + - npm run test + - npm run build + - npm run e2e diff --git a/client/.editorconfig b/client/.editorconfig index 6e87a00..e89330a 100644 --- a/client/.editorconfig +++ b/client/.editorconfig @@ -1,4 +1,4 @@ -# Editor configuration, see http://editorconfig.org +# Editor configuration, see https://editorconfig.org root = true [*] diff --git a/client/.gitignore b/client/.gitignore deleted file mode 100644 index ee5c9d8..0000000 --- a/client/.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. - -# compiled output -/dist -/tmp -/out-tsc - -# dependencies -/node_modules - -# IDEs and editors -/.idea -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# IDE - VSCode -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json - -# misc -/.sass-cache -/connect.lock -/coverage -/libpeerconnection.log -npm-debug.log -yarn-error.log -testem.log -/typings - -# System Files -.DS_Store -Thumbs.db diff --git a/client/README.md b/client/README.md index c8be806..5c2b88f 100644 --- a/client/README.md +++ b/client/README.md @@ -1,24 +1,27 @@ # Client -The front end (client) side of the project written in Angular, with Angular-CLI, ngrx, and Material. +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.3.7. -## Prerequisites +## Development server -* Install [Angular-cli](https://github.com/angular/angular-cli). -* Install [npm](https://nodejs.org/en/). +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. -## Installation +## Code scaffolding -1. Run `npm install` to install dependencies. -2. Run `npm start` to fire up the dev server. -3. Open browser to [http://localhost:4200](http://localhost:4200). +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. -## Tests +## Build -* Run `npm run lint` to check for TSLint mistakes. -* Run `npm run test` to execute the unit tests via Karma. -* Run `npm run e2e` to execute the end-to-end tests via Protractor. +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. -## Deploy +## Running unit tests -1. Run `ng build --prod` to build the project. +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/client/angular.json b/client/angular.json index 7c5ece5..831b86b 100644 --- a/client/angular.json +++ b/client/angular.json @@ -4,15 +4,15 @@ "newProjectRoot": "projects", "projects": { "client": { - "root": "", - "sourceRoot": "src", "projectType": "application", - "prefix": "client", "schematics": { "@schematics/angular:component": { - "styleext": "scss" + "style": "scss" } }, + "root": "", + "sourceRoot": "src", + "prefix": "assp", "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", @@ -21,14 +21,15 @@ "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", - "tsConfig": "src/tsconfig.app.json", + "tsConfig": "tsconfig.app.json", + "aot": false, "assets": [ "src/favicon.ico", - "src/assets" + "src/assets", + "src/manifest.webmanifest" ], "styles": [ - "src/styles.scss", - "src/app-theme.scss" + "src/styles.scss" ], "scripts": [] }, @@ -48,7 +49,21 @@ "aot": true, "extractLicenses": true, "vendorChunk": false, - "buildOptimizer": true + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ], + "serviceWorker": true, + "ngswConfigPath": "ngsw-config.json" } } }, @@ -74,36 +89,32 @@ "options": { "main": "src/test.ts", "polyfills": "src/polyfills.ts", - "tsConfig": "src/tsconfig.spec.json", - "karmaConfig": "src/karma.conf.js", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "assets": [ + "src/favicon.ico", + "src/assets", + "src/manifest.webmanifest" + ], "styles": [ "src/styles.scss" ], - "scripts": [], - "assets": [ - "src/favicon.ico", - "src/assets" - ] + "scripts": [] } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": [ - "src/tsconfig.app.json", - "src/tsconfig.spec.json" + "tsconfig.app.json", + "tsconfig.spec.json", + "e2e/tsconfig.json" ], "exclude": [ "**/node_modules/**" ] } - } - } - }, - "client-e2e": { - "root": "e2e/", - "projectType": "application", - "architect": { + }, "e2e": { "builder": "@angular-devkit/build-angular:protractor", "options": { @@ -115,21 +126,8 @@ "devServerTarget": "client:serve:production" } } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } } } - } - }, - "defaultProject": "client", - "cli": { - "defaultCollection": "@ngrx/schematics" - } + }}, + "defaultProject": "client" } diff --git a/client/browserslist b/client/browserslist new file mode 100644 index 0000000..8084853 --- /dev/null +++ b/client/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/client/e2e/protractor.conf.js b/client/e2e/protractor.conf.js index 86776a3..73e4e68 100644 --- a/client/e2e/protractor.conf.js +++ b/client/e2e/protractor.conf.js @@ -1,8 +1,12 @@ +// @ts-check // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts const { SpecReporter } = require('jasmine-spec-reporter'); +/** + * @type { import("protractor").Config } + */ exports.config = { allScriptsTimeout: 11000, specs: [ @@ -21,7 +25,7 @@ exports.config = { }, onPrepare() { require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.e2e.json') + project: require('path').join(__dirname, './tsconfig.json') }); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } diff --git a/client/e2e/src/app.e2e-spec.ts b/client/e2e/src/app.e2e-spec.ts index c54a666..06a8609 100644 --- a/client/e2e/src/app.e2e-spec.ts +++ b/client/e2e/src/app.e2e-spec.ts @@ -1,4 +1,5 @@ import { AppPage } from './app.po'; +import { browser, logging } from 'protractor'; describe('workspace-project App', () => { let page: AppPage; @@ -7,8 +8,11 @@ describe('workspace-project App', () => { page = new AppPage(); }); - it('should display welcome message', () => { - page.navigateTo(); - expect(page.getParagraphText()).toEqual('Welcome to client!'); + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser.manage().logs().get(logging.Type.BROWSER); + expect(logs).not.toContain(jasmine.objectContaining({ + level: logging.Level.SEVERE, + } as logging.Entry)); }); }); diff --git a/client/e2e/src/app.po.ts b/client/e2e/src/app.po.ts index 1778dfc..7476ea8 100644 --- a/client/e2e/src/app.po.ts +++ b/client/e2e/src/app.po.ts @@ -2,10 +2,10 @@ import { browser, by, element } from 'protractor'; export class AppPage { navigateTo() { - return browser.get('/'); + return browser.get(browser.baseUrl) as Promise; } - getParagraphText() { - return element(by.css('client-root h1')).getText(); + getTitleText() { + return element(by.css('asp-root .content span')).getText() as Promise; } } diff --git a/client/e2e/tsconfig.e2e.json b/client/e2e/tsconfig.json similarity index 84% rename from client/e2e/tsconfig.e2e.json rename to client/e2e/tsconfig.json index a6dd622..39b800f 100644 --- a/client/e2e/tsconfig.e2e.json +++ b/client/e2e/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.json", "compilerOptions": { - "outDir": "../out-tsc/app", + "outDir": "../out-tsc/e2e", "module": "commonjs", "target": "es5", "types": [ @@ -10,4 +10,4 @@ "node" ] } -} \ No newline at end of file +} diff --git a/client/src/karma.conf.js b/client/karma.conf.js similarity index 83% rename from client/src/karma.conf.js rename to client/karma.conf.js index b6e0042..dbd00cd 100644 --- a/client/src/karma.conf.js +++ b/client/karma.conf.js @@ -16,8 +16,8 @@ module.exports = function (config) { clearContext: false // leave Jasmine Spec Runner output visible in browser }, coverageIstanbulReporter: { - dir: require('path').join(__dirname, '../coverage'), - reports: ['html', 'lcovonly'], + dir: require('path').join(__dirname, './coverage/client'), + reports: ['html', 'lcovonly', 'text-summary'], fixWebpackSourcePaths: true }, reporters: ['progress', 'kjhtml'], @@ -26,6 +26,7 @@ module.exports = function (config) { logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], - singleRun: false + singleRun: false, + restartOnFileChange: true }); -}; \ No newline at end of file +}; diff --git a/client/ngsw-config.json b/client/ngsw-config.json new file mode 100644 index 0000000..4ddf1a7 --- /dev/null +++ b/client/ngsw-config.json @@ -0,0 +1,29 @@ +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/*.js" + ] + } + }, { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)" + ] + } + } + ] +} diff --git a/client/package-lock.json b/client/package-lock.json index deec93b..fc66932 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -5,4264 +5,5295 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.6.8.tgz", - "integrity": "sha512-ZKTm/zC61iY9IBHOEAKoMSzZpvhkmv+1O/HHzpHEuR551jCzu6vSyCmMY9Z7GBcccscCV+hjeSMwgFrFRcqlkw==", + "version": "0.803.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.7.tgz", + "integrity": "sha512-8cjg4BnLNbCc3YwPzuAjnt4oKHJmYr7IvdcLockrp9MZqxaNbSs9cy55iFKZyz3eGahYpTxxRa4oTUQsxRT3fQ==", "dev": true, "requires": { - "@angular-devkit/core": "0.6.8", - "rxjs": "^6.0.0" + "@angular-devkit/core": "8.3.7", + "rxjs": "6.4.0" } }, "@angular-devkit/build-angular": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.6.8.tgz", - "integrity": "sha512-VGqYAk8jpISraz2UHfsDre270NOUmV0CTSZw2p9sm5g/XIr5m+IHetFZz3gpoAr9+If2aFTs8Rt3sGdCRzwBqA==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.6.8", - "@angular-devkit/build-optimizer": "0.6.8", - "@angular-devkit/core": "0.6.8", - "@ngtools/webpack": "6.0.8", - "ajv": "~6.4.0", - "autoprefixer": "^8.4.1", - "cache-loader": "^1.2.2", - "chalk": "~2.2.2", - "circular-dependency-plugin": "^5.0.2", - "clean-css": "^4.1.11", - "copy-webpack-plugin": "^4.5.1", - "file-loader": "^1.1.11", - "glob": "^7.0.3", - "html-webpack-plugin": "^3.0.6", - "istanbul": "^0.4.5", - "istanbul-instrumenter-loader": "^3.0.1", - "karma-source-map-support": "^1.2.0", - "less": "^3.0.4", - "less-loader": "^4.1.0", - "license-webpack-plugin": "^1.3.1", - "lodash": "^4.17.4", - "memory-fs": "^0.4.1", - "mini-css-extract-plugin": "~0.4.0", - "minimatch": "^3.0.4", - "node-sass": "^4.9.0", - "opn": "^5.1.0", - "parse5": "^4.0.0", - "portfinder": "^1.0.13", - "postcss": "^6.0.22", - "postcss-import": "^11.1.0", - "postcss-loader": "^2.1.5", - "postcss-url": "^7.3.2", - "raw-loader": "^0.5.1", - "resolve": "^1.5.0", - "rxjs": "^6.0.0", - "sass-loader": "^7.0.1", - "silent-error": "^1.1.0", - "source-map-support": "^0.5.0", - "stats-webpack-plugin": "^0.6.2", - "style-loader": "^0.21.0", - "stylus": "^0.54.5", - "stylus-loader": "^3.0.2", - "tree-kill": "^1.2.0", - "uglifyjs-webpack-plugin": "^1.2.5", - "url-loader": "^1.0.1", - "webpack": "~4.8.1", - "webpack-dev-middleware": "^3.1.3", - "webpack-dev-server": "^3.1.4", - "webpack-merge": "^4.1.2", - "webpack-sources": "^1.1.0", - "webpack-subresource-integrity": "^1.1.0-rc.4" + "version": "0.803.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.7.tgz", + "integrity": "sha512-Rvd0JXstVWmdEY4+0lLJEdFEQuZD2fcVvIJPQGzJt1ExycDliP6ebrhjeWOpLuRCgUU2/CObHgh2rVEDDKeMHg==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.7", + "@angular-devkit/build-optimizer": "0.803.7", + "@angular-devkit/build-webpack": "0.803.7", + "@angular-devkit/core": "8.3.7", + "@babel/core": "7.5.5", + "@babel/preset-env": "7.5.5", + "@ngtools/webpack": "8.3.7", + "ajv": "6.10.2", + "autoprefixer": "9.6.1", + "browserslist": "4.6.6", + "cacache": "12.0.2", + "caniuse-lite": "1.0.30000989", + "circular-dependency-plugin": "5.2.0", + "clean-css": "4.2.1", + "copy-webpack-plugin": "5.0.4", + "core-js": "3.2.1", + "file-loader": "4.2.0", + "find-cache-dir": "3.0.0", + "glob": "7.1.4", + "istanbul-instrumenter-loader": "3.0.1", + "jest-worker": "24.9.0", + "karma-source-map-support": "1.4.0", + "less": "3.9.0", + "less-loader": "5.0.0", + "license-webpack-plugin": "2.1.2", + "loader-utils": "1.2.3", + "mini-css-extract-plugin": "0.8.0", + "minimatch": "3.0.4", + "open": "6.4.0", + "parse5": "4.0.0", + "postcss": "7.0.17", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "3.1.0", + "regenerator-runtime": "0.13.3", + "rxjs": "6.4.0", + "sass": "1.22.9", + "sass-loader": "7.2.0", + "semver": "6.3.0", + "source-map": "0.7.3", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.13", + "speed-measure-webpack-plugin": "1.3.1", + "style-loader": "1.0.0", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "terser": "4.1.4", + "terser-webpack-plugin": "1.4.1", + "tree-kill": "1.2.1", + "webpack": "4.39.2", + "webpack-dev-middleware": "3.7.0", + "webpack-dev-server": "3.8.0", + "webpack-merge": "4.2.1", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.1.0-rc.6", + "worker-plugin": "3.2.0" } }, "@angular-devkit/build-optimizer": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.6.8.tgz", - "integrity": "sha512-of5syQbv3uNPp4AQkfRecfnp8AE8kvffbfYi+FFPZ6OGr7e59T1fGwk6+Zgb2qQFQg8HO2tzWI/uygtLIqmbmw==", + "version": "0.803.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.7.tgz", + "integrity": "sha512-tk6z/QKw2OM++6OTUiUXp/pAwKFyyvfJmzrsXdHqmBZyrqGPU1fcSOfuJCSGjjwjpiQ7tjSVHf/ZvZHakdOoOQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "source-map": "^0.5.6", - "typescript": "~2.9.1", - "webpack-sources": "^1.1.0" - }, - "dependencies": { - "typescript": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz", - "integrity": "sha512-h6pM2f/GDchCFlldnriOhs1QHuwbnmj6/v7499eMHqPeW4V2G0elua2eIc2nu8v2NdHV0Gm+tzX83Hr6nUFjQA==", - "dev": true - } + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "tslib": "1.10.0", + "typescript": "3.5.3", + "webpack-sources": "1.4.3" + } + }, + "@angular-devkit/build-webpack": { + "version": "0.803.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.7.tgz", + "integrity": "sha512-hBFqPTMhQn0BhjhZ5kd69cknWeQu1o0v/+yJbF5otpn0c+QbjvI0Yq+ikF82rDFJIkO8UUjNCTBU6o6gdwW4pw==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.7", + "@angular-devkit/core": "8.3.7", + "rxjs": "6.4.0", + "webpack-merge": "4.2.1" } }, "@angular-devkit/core": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.6.8.tgz", - "integrity": "sha512-rkIa1OSVWTt4g9leLSK/PsqOj3HZbDKHbZjqlslyfVa3AyCeiumFoOgViOVXlYgPX3HHDbE5uH24nyUWSD8uww==", + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.7.tgz", + "integrity": "sha512-DByn3rUOg21rDZQXdIFbN7Dt0JgUc11kyP3TZb8kzXRKdpPZA4AwvtQ6tZveR4+n1dTDX38P1ZGDsO6bdMQivg==", "dev": true, "requires": { - "ajv": "~6.4.0", - "chokidar": "^2.0.3", - "rxjs": "^6.0.0", - "source-map": "^0.5.6" + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" } }, "@angular-devkit/schematics": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.6.8.tgz", - "integrity": "sha512-R4YqAUdo62wtrhX/5HSRGSKXNTWqfQb66ZE6m8jj6GEJNFKdNXMdxOchxr07LCiKTxfh1w6G3nGzxIsu/+D4KA==", + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.7.tgz", + "integrity": "sha512-xdWvSLU5tuFOaeAaeMQRY0VJbic1gWyPFifx6VcU5oxi9wQY6o1j7AWMeEcsGh+PCZEt0G9WJQIh73tcKRqkNg==", "dev": true, "requires": { - "@angular-devkit/core": "0.6.8", - "rxjs": "^6.0.0" + "@angular-devkit/core": "8.3.7", + "rxjs": "6.4.0" } }, "@angular/animations": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-6.0.5.tgz", - "integrity": "sha512-zW/qX3CvsuRDOcTNFFSf7uXktvq1jRrfKR8LdGQ/DER1GU3o8pR3z3H8gHy8lAFc3PESfETtzXinKUNzvTDfpA==", + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.2.9.tgz", + "integrity": "sha512-l30AF0d9P5okTPM1wieUHgcnDyGSNvyaBcxXSOkT790wAP2v5zs7VrKq9Lm+ICu4Nkx07KrOr5XLUHhqsg3VXA==", "requires": { "tslib": "^1.9.0" } }, "@angular/cdk": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-6.2.1.tgz", - "integrity": "sha512-uwW4eIGJKqOkR+ew6YcEAh1J4SP98jdyDpsZ4IEMkV9+jXcKfcwcxGFpZvs9wJsAvAr8EgNmZ8h+iuZLwJsvmA==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-8.2.2.tgz", + "integrity": "sha512-e+BtFab0Vd1q/ZVu6l850Q4vvgyVYiugSX31oMRlp86fKHPowlAO7jL3z5JcAG7TybpLIqd7oqF8XQBR/yw83w==", "requires": { + "parse5": "^5.0.0", "tslib": "^1.7.1" + }, + "dependencies": { + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "optional": true + } } }, "@angular/cli": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-6.0.8.tgz", - "integrity": "sha512-DhH1Zq5Yonthw6zh6W07fhf+9XrAZbD1fcQ0MrmbxlieCfLlTAdBqyK2LavFCKwSZkUMLF6UHM3+jiNRVZSSIg==", - "dev": true, - "requires": { - "@angular-devkit/architect": "0.6.8", - "@angular-devkit/core": "0.6.8", - "@angular-devkit/schematics": "0.6.8", - "@schematics/angular": "0.6.8", - "@schematics/update": "0.6.8", - "opn": "~5.3.0", - "resolve": "^1.1.7", - "rxjs": "^6.0.0", - "semver": "^5.1.0", - "silent-error": "^1.0.0", - "symbol-observable": "^1.2.0", - "yargs-parser": "^10.0.0" + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.7.tgz", + "integrity": "sha512-YZvF/+4vReqChaBA4pbsHO9/e/A6h1MUjPcUtQO4Ssp6hxTDJUnZfaMUzY0w0aZQSO31Phcw12qWtXZLqYn9Ww==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.7", + "@angular-devkit/core": "8.3.7", + "@angular-devkit/schematics": "8.3.7", + "@schematics/angular": "8.3.7", + "@schematics/update": "0.803.7", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "^4.1.1", + "ini": "1.3.5", + "inquirer": "6.5.1", + "npm-package-arg": "6.1.0", + "npm-pick-manifest": "3.0.2", + "open": "6.4.0", + "pacote": "9.5.5", + "read-package-tree": "5.3.1", + "semver": "6.3.0", + "symbol-observable": "1.2.0", + "universal-analytics": "^0.4.20", + "uuid": "^3.3.2" }, "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true - }, - "yargs-parser": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.0.0.tgz", - "integrity": "sha512-+DHejWujTVYeMHLff8U96rLc4uE4Emncoftvn5AjhB1Jw1pWxLzgBUT/WYbPrHmy6YPEBTZQx5myHhVcuuu64g==", - "dev": true, - "requires": { - "camelcase": "^4.1.0" - } } } }, "@angular/common": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-6.0.4.tgz", - "integrity": "sha512-z2UE6a43u49omsqjzwdHhwD+wpCPauuD13FMkVQMLwzugKhNri0LjMk5I0I9xLz9OyXICm2B+wPAQN4d07savg==", + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.2.9.tgz", + "integrity": "sha512-76WDU1USlI5vAzqCJ3gxCQGuu57aJEggNk/xoWmQEXipiFTFBh2wSKn/dE6Txr/q3COTPIcrmb9OCeal5kQPIA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-6.0.4.tgz", - "integrity": "sha512-qwjuPacuRKUroD+xev653mljV9Jwhi2tvwGo/cVadq0isJ2rVH1hO6sa1FWFnNf1KPnyolMobZlMgg8DFW/yRw==", + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.2.9.tgz", + "integrity": "sha512-oQho19DnOhEDNerCOGuGK95tcZ2oy4dSA5SykJmmniRnZzPM2++bJD32qJehXHy1K+3hv2zN9x7HPhqT3ljT6g==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-6.0.4.tgz", - "integrity": "sha512-bkN21JJrsbIdXNfOc9I9iB7AETUe4/QvApC25R3/pERSyhkK7UNNHTqg4FY5xMdSxlZd1ccWj8rvSbS+hFbTBw==", + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.2.9.tgz", + "integrity": "sha512-tqGBKPf3SRYNEGGJbmjom//U/eAjnecDhGUw6o+VkYE/wxYd9pPcLmcEwwyXBpIPJAsN8RsjTikPuH0gcNE8bw==", "dev": true, "requires": { - "chokidar": "^1.4.2", + "canonical-path": "1.0.0", + "chokidar": "^2.1.1", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "magic-string": "^0.25.0", "minimist": "^1.2.0", "reflect-metadata": "^0.1.2", - "tsickle": "^0.29.0" + "source-map": "^0.6.1", + "tslib": "^1.9.0", + "yargs": "13.1.0" }, "dependencies": { - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true }, - "arr-diff": { + "anymatch": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "arr-flatten": "^1.0.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" } }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "readdirp": "^2.2.1", + "upath": "^1.1.1" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "is-glob": { + "extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-extendable": "^0.1.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "@angular/core": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.0.4.tgz", - "integrity": "sha512-WCW8wyRoIKkjGjOjVLFpUyhQw/K0//s3W0qo1/vH6m9njC63jP/VP+2Xnt8bdtgeET2NYUeyl+w/0vUXqYlnEA==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/forms": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-6.0.4.tgz", - "integrity": "sha512-JcKyCCkAwF3NlWuwPxtpRhFX/8QbFUkA4W0N62L+Odm8G0/P4QhMw/99o5kRs5xrsQRVyFlGvdYOrkgDyyZkGg==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/http": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-6.0.4.tgz", - "integrity": "sha512-bq7cS0/5hM3Af3FolEe7HpKP19/7MJWIPGi5k9rYCGM4dXKFiKa+LA/SbXE0DMiKxhAQbZDwQ9HN04r70DRyBQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/language-service": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-6.0.4.tgz", - "integrity": "sha512-LyFh/sFtnyjJJYO5UKM31nGSSkmGYFMwqzwbG+l0QNQXNoa9jj+OApvu0oOY5F0WP9DBrOAzj74j2M5olprtMQ==", - "dev": true - }, - "@angular/material": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-6.2.1.tgz", - "integrity": "sha512-SBoUXxHknkgwzp5pNDHW0jyrTM0d0Tk4lVyDbtEX8VEPtXqG5nL3BSgyjpJbTvqlmy2kOooUu3qgAmt87VH9lw==", - "requires": { - "tslib": "^1.7.1" - } - }, - "@angular/platform-browser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-6.0.4.tgz", - "integrity": "sha512-4y6rSqOLuBs+RL0CIM+RZ5T8a5Tm1NisZcTUGvM8lVYPNkqTzNfHQXhBq8mTgRw9JopEwOj+UEqBbgrNX715yQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/platform-browser-dynamic": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.4.tgz", - "integrity": "sha512-uh7MoQi9kyKPFHrD7HPOU5gWyhF4pPJuGltyMTOtM/f5TNL9QQI2EugijKnnSFLQ8+7UQjmFAVeRqH9jylhIyQ==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@angular/router": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-6.0.4.tgz", - "integrity": "sha512-IKUtbbRtHN8I+Hp8/pLqBPyXJmQHrPFGzKU3H43TovD++mmT5AaYVCeJgkGUB//wjtLN3y0X/yrmyWFWcN35Gw==", - "requires": { - "tslib": "^1.9.0" - } - }, - "@ngrx/effects": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-6.0.1.tgz", - "integrity": "sha512-YS68D7E1qKbbOIzV6Iyfv6BY3CrTNi8nBgGJ6whTi6f7Y0apXySvNj9aOQyzuJsePWziu6h0uJhy2ZFT/iELyg==" - }, - "@ngrx/entity": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/entity/-/entity-6.0.1.tgz", - "integrity": "sha512-UjYHg6Okm9AMa+5qEVQJ71h5fkc6/S1LveW7G5UFn7hTKK0a+8OJYi/wGmfPGPo4M4/Qi1q722YgylAZf/9KbA==" - }, - "@ngrx/schematics": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-6.0.1.tgz", - "integrity": "sha512-EBTGJNVX+UUntt6wDq3a8UPft9SNcnKCVM9qMb/7Ldav7PbbbWiYqNRWpWKf6qTOaE57uBa6I5J4oE6Qd37F8Q==", - "dev": true - }, - "@ngrx/store": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-6.0.1.tgz", - "integrity": "sha512-cSgfT8CgpOr6BOQac9M3DH6QQC5gxCVjdEcZH//Zn/kwdse86X73iK7KWv6B6AiIEdyVbFfggXNZwd/HiyLGOA==" - }, - "@ngrx/store-devtools": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-6.0.1.tgz", - "integrity": "sha512-eZyguQvIltJuhCVgPPR1IyMAztykRuvGalwCH1G2ODWKGZPNrWlJbxVMqzUeSJTBS268RIFIkMTwEDKi/xCQoQ==", - "dev": true - }, - "@ngtools/webpack": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-6.0.8.tgz", - "integrity": "sha512-jorGpTd82ILbyUwg4JQekovHFaYwSMlZan4f7x+sd3+2WgyL3Z1+ZbVSGKvXZWKS/mAVx7eLkRikzJkuC4FgHw==", - "dev": true, - "requires": { - "@angular-devkit/core": "0.6.8", - "tree-kill": "^1.0.0", - "webpack-sources": "^1.1.0" - } - }, - "@schematics/angular": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.6.8.tgz", - "integrity": "sha512-9kRphqTYG5Df/I8fvnT1zMsw0YNDPO9tl18tQZXj4am4raT7l9UCr+WkwJdlBoA5pwG6baWE9sL0iGWV/bzF/g==", - "dev": true, - "requires": { - "@angular-devkit/core": "0.6.8", - "@angular-devkit/schematics": "0.6.8", - "typescript": ">=2.6.2 <2.8" - } - }, - "@schematics/update": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.6.8.tgz", - "integrity": "sha512-1Uq7LYnwL2wBwGVCgNz76QAR13ghAk+2vDDHOi+VX5+usHManxydrpoMGeX66OBPd+y5D3D2MFb+8mYHE7mygg==", - "dev": true, - "requires": { - "@angular-devkit/core": "0.6.8", - "@angular-devkit/schematics": "0.6.8", - "npm-registry-client": "^8.5.1", - "rxjs": "^6.0.0", - "semver": "^5.3.0", - "semver-intersect": "^1.1.2" - } - }, - "@types/jasmine": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.8.tgz", - "integrity": "sha512-OJSUxLaxXsjjhob2DBzqzgrkLmukM3+JMpRp0r0E4HTdT1nwDCWhaswjYxazPij6uOdzHCJfNbDjmQ1/rnNbCg==", - "dev": true - }, - "@types/jasminewd2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.3.tgz", - "integrity": "sha512-hYDVmQZT5VA2kigd4H4bv7vl/OhlympwREUemqBdOqtrYTo5Ytm12a5W5/nGgGYdanGVxj0x/VhZ7J3hOg/YKg==", - "dev": true, - "requires": { - "@types/jasmine": "*" - } - }, - "@types/node": { - "version": "8.9.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", - "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", - "dev": true - }, - "@types/q": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", - "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", - "dev": true - }, - "@types/selenium-webdriver": { - "version": "2.53.43", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz", - "integrity": "sha512-UBYHWph6P3tutkbXpW6XYg9ZPbTKjw/YC2hGG1/GEvWwTbvezBUv3h+mmUFw79T3RFPnmedpiXdOBbXX+4l0jg==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.4.3.tgz", - "integrity": "sha512-S6npYhPcTHDYe9nlsKa9CyWByFi8Vj8HovcAgtmMAQZUOczOZbQ8CnwMYKYC5HEZzxEE+oY0jfQk4cVlI3J59Q==", - "dev": true, - "requires": { - "@webassemblyjs/helper-wasm-bytecode": "1.4.3", - "@webassemblyjs/wast-parser": "1.4.3", - "debug": "^3.1.0", - "webassemblyjs": "1.4.3" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.4.3.tgz", - "integrity": "sha512-3zTkSFswwZOPNHnzkP9ONq4bjJSeKVMcuahGXubrlLmZP8fmTIJ58dW7h/zOVWiFSuG2em3/HH3BlCN7wyu9Rw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.4.3.tgz", - "integrity": "sha512-e8+KZHh+RV8MUvoSRtuT1sFXskFnWG9vbDy47Oa166xX+l0dD5sERJ21g5/tcH8Yo95e9IN3u7Jc3NbhnUcSkw==", - "dev": true, - "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.4.3.tgz", - "integrity": "sha512-9FgHEtNsZQYaKrGCtsjswBil48Qp1agrzRcPzCbQloCoaTbOXLJ9IRmqT+uEZbenpULLRNFugz3I4uw18hJM8w==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.4.3" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.4.3.tgz", - "integrity": "sha512-JINY76U+702IRf7ePukOt037RwmtH59JHvcdWbTTyHi18ixmQ+uOuNhcdCcQHTquDAH35/QgFlp3Y9KqtyJsCQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.4.3.tgz", - "integrity": "sha512-I7bS+HaO0K07Io89qhJv+z1QipTpuramGwUSDkwEaficbSvCcL92CUZEtgykfNtk5wb0CoLQwWlmXTwGbNZUeQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.4.3.tgz", - "integrity": "sha512-p0yeeO/h2r30PyjnJX9xXSR6EDcvJd/jC6xa/Pxg4lpfcNi7JUswOpqDToZQ55HMMVhXDih/yqkaywHWGLxqyQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/helper-buffer": "1.4.3", - "@webassemblyjs/helper-wasm-bytecode": "1.4.3", - "@webassemblyjs/wasm-gen": "1.4.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, + "optional": true, "requires": { - "ms": "2.0.0" - } - } - } - }, - "@webassemblyjs/leb128": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.4.3.tgz", - "integrity": "sha512-4u0LJLSPzuRDWHwdqsrThYn+WqMFVqbI2ltNrHvZZkzFPO8XOZ0HFQ5eVc4jY/TNHgXcnwrHjONhPGYuuf//KQ==", - "dev": true, + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "yargs": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@angular/core": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.2.9.tgz", + "integrity": "sha512-GpHAuLOlN9iioELCQBmAsjETTUCyFgVUI3LXwh3e63jnpd+ZuuZcZbjfTYhtgYVNMetn7cVEO6p88eb7qvpUWQ==", "requires": { - "leb": "^0.3.0" + "tslib": "^1.9.0" } }, - "@webassemblyjs/validation": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/validation/-/validation-1.4.3.tgz", - "integrity": "sha512-R+rRMKfhd9mq0rj2mhU9A9NKI2l/Rw65vIYzz4lui7eTKPcCu1l7iZNi4b9Gen8D42Sqh/KGiaQNk/x5Tn/iBQ==", - "dev": true, + "@angular/forms": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.2.9.tgz", + "integrity": "sha512-kAdBuApC9PPOdPI8BmNhxCraAkXGbX/PkVan8pQ5xdumvgGqvVjbJvLaUSbJROPtgCRlQyiEDrHFd4gk/WU76A==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/http": { + "version": "7.2.15", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.15.tgz", + "integrity": "sha512-TR7PEdmLWNIre3Zn8lvyb4lSrvPUJhKLystLnp4hBMcWsJqq5iK8S3bnlR4viZ9HMlf7bW7+Hm4SI6aB3tdUtw==", "requires": { - "@webassemblyjs/ast": "1.4.3" + "tslib": "^1.9.0" } }, - "@webassemblyjs/wasm-edit": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.4.3.tgz", - "integrity": "sha512-qzuwUn771PV6/LilqkXcS0ozJYAeY/OKbXIWU3a8gexuqb6De2p4ya/baBeH5JQ2WJdfhWhSvSbu86Vienttpw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/helper-buffer": "1.4.3", - "@webassemblyjs/helper-wasm-bytecode": "1.4.3", - "@webassemblyjs/helper-wasm-section": "1.4.3", - "@webassemblyjs/wasm-gen": "1.4.3", - "@webassemblyjs/wasm-opt": "1.4.3", - "@webassemblyjs/wasm-parser": "1.4.3", - "@webassemblyjs/wast-printer": "1.4.3", - "debug": "^3.1.0" + "@angular/language-service": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-8.2.9.tgz", + "integrity": "sha512-F6ReN0cToHIkCjEM2ECkBxCTsvFjVae8FpIr3Fz8IHZHOOYcS5mx/BWdEO7odI5/tQKl+cCWol7NjvJYV0zolg==", + "dev": true + }, + "@angular/material": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-8.2.2.tgz", + "integrity": "sha512-mR2ppE+Z1S5As2SUFK8wUH76Fj7YgrefhrwVGaeCLcAen//RHPw043+KL2apPAUaltdIFlGFtUuA6yJN6av0nQ==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.2.9.tgz", + "integrity": "sha512-k3aNZy0OTqGn7HlHHV52QF6ZAP/VlQhWGD2u5e1dWIWMq39kdkdSCNu5tiuAf5hIzMBiSQ0tjnuVWA4MuDBYIQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.9.tgz", + "integrity": "sha512-GbE4TUy4n/a8yp8fLWwdG/QnjUPZZ8VufItZ7GvOpoyknzegvka111dLctvMoPzSAsrKyShL6cryuyDC5PShUA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/pwa": { + "version": "0.803.8", + "resolved": "https://registry.npmjs.org/@angular/pwa/-/pwa-0.803.8.tgz", + "integrity": "sha512-ZLhE5z4krHErkPF0BhpL/jdNYKfJZWcNgiWArvltB0FsHN+f/D+CsvQ4b48NoX5nwQVZ4/jhSCGEp7AHWxSmAQ==", + "requires": { + "@angular-devkit/core": "8.3.8", + "@angular-devkit/schematics": "8.3.8", + "@schematics/angular": "8.3.8", + "parse5-html-rewriting-stream": "5.1.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, + "@angular-devkit/core": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.8.tgz", + "integrity": "sha512-HwlMRr6qANwhOJS+5rGgQ2lmP4nj2C4cbUc0LlA09Cdbq0RnDquUFVqHF6h81FUKFW1D5qDehWYHNOVq8+gTkQ==", "requires": { - "ms": "2.0.0" + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.8.tgz", + "integrity": "sha512-1KnluRj86QO6fDE++iNbUHq1nNHpz0ZQDs/siy+tDtenO5TxAO/vegHYNKvsIcMMUF9z2kHA0qwUbq5oN8K85g==", + "requires": { + "@angular-devkit/core": "8.3.8", + "rxjs": "6.4.0" + } + }, + "@schematics/angular": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.8.tgz", + "integrity": "sha512-TOueA7gfQ5P7iDS593EBtLtqqgl6Pvg6snWqbMaW74VUxd5euAuPMPKkoJPddKF+cWjGYZgF09tp7G0kbuLGqw==", + "requires": { + "@angular-devkit/core": "8.3.8", + "@angular-devkit/schematics": "8.3.8" } } } }, - "@webassemblyjs/wasm-gen": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.4.3.tgz", - "integrity": "sha512-eR394T8dHZfpLJ7U/Z5pFSvxl1L63JdREebpv9gYc55zLhzzdJPAuxjBYT4XqevUdW67qU2s0nNA3kBuNJHbaQ==", + "@angular/router": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.2.9.tgz", + "integrity": "sha512-4P60CWNB/jxGjDBEuYN0Jobt76QlebAQeFBTDswRVwRlq/WJT4QhL3a8AVIRsHn9bQII0LUt/ZQBBPxn7h9lSA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/service-worker": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/@angular/service-worker/-/service-worker-8.2.9.tgz", + "integrity": "sha512-vC+xIJuWUaqxyfj/DX58HqC/uddwTCQEHd83ZukJB8yHCX/sYacfanTJ63NkkYkmIdSCrcY5q0/OiWNyoNHZVg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/helper-wasm-bytecode": "1.4.3", - "@webassemblyjs/leb128": "1.4.3" + "@babel/highlight": "^7.0.0" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.4.3.tgz", - "integrity": "sha512-7Gp+nschuKiDuAL1xmp4Xz0rgEbxioFXw4nCFYEmy+ytynhBnTeGc9W9cB1XRu1w8pqRU2lbj2VBBA4cL5Z2Kw==", + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/helper-buffer": "1.4.3", - "@webassemblyjs/wasm-gen": "1.4.3", - "@webassemblyjs/wasm-parser": "1.4.3", - "debug": "^3.1.0" + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", "dev": true, "requires": { - "ms": "2.0.0" + "minimist": "^1.2.0" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.2.tgz", + "integrity": "sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ==", + "dev": true, + "requires": { + "@babel/types": "^7.6.0", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, - "@webassemblyjs/wasm-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.4.3.tgz", - "integrity": "sha512-KXBjtlwA3BVukR/yWHC9GF+SCzBcgj0a7lm92kTOaa4cbjaTaa47bCjXw6cX4SGQpkncB9PU2hHGYVyyI7wFRg==", + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/helper-wasm-bytecode": "1.4.3", - "@webassemblyjs/leb128": "1.4.3", - "@webassemblyjs/wasm-parser": "1.4.3", - "webassemblyjs": "1.4.3" + "@babel/types": "^7.4.4" } }, - "@webassemblyjs/wast-parser": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.4.3.tgz", - "integrity": "sha512-QhCsQzqV0CpsEkRYyTzQDilCNUZ+5j92f+g35bHHNqS22FppNTywNFfHPq8ZWZfYCgbectc+PoghD+xfzVFh1Q==", + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/floating-point-hex-parser": "1.4.3", - "@webassemblyjs/helper-code-frame": "1.4.3", - "@webassemblyjs/helper-fsm": "1.4.3", - "long": "^3.2.0", - "webassemblyjs": "1.4.3" + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" } }, - "@webassemblyjs/wast-printer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.4.3.tgz", - "integrity": "sha512-EgXk4anf8jKmuZJsqD8qy5bz2frEQhBvZruv+bqwNoLWUItjNSFygk8ywL3JTEz9KtxTlAmqTXNrdD1d9gNDtg==", + "@babel/helpers": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", + "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/wast-parser": "1.4.3", - "long": "^3.2.0" + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.0" } }, - "abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", - "dev": true - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" } }, - "acorn": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.6.2.tgz", - "integrity": "sha512-zUzo1E5dI2Ey8+82egfnttyMlMZ2y0D8xOCO3PNPPlYXpl8NZvF6Qk9L9BEtJs+43FqEmfBViDqc5d1ckRDguw==", + "@babel/parser": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.2.tgz", + "integrity": "sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg==", "dev": true }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "dev": true, "requires": { - "acorn": "^5.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" } }, - "adm-zip": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz", - "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=", - "dev": true - }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true - }, - "agent-base": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz", - "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" } }, - "ajv": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", - "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", "dev": true, "requires": { - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0", - "uri-js": "^3.0.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" } }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", - "dev": true + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", "dev": true, "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", + "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "app-root-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.0.1.tgz", - "integrity": "sha1-zWLc+OT9WkF+/GZNLlsQZTxlG0Y=", - "dev": true + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "append-transform": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", - "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "dev": true, "requires": { - "default-require-extensions": "^2.0.0" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "dev": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "@babel/helper-plugin-utils": "^7.0.0" } }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "@babel/plugin-transform-block-scoping": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz", + "integrity": "sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true + "@babel/plugin-transform-dotall-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", + "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } }, - "array-flatten": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", - "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", - "dev": true + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "arraybuffer.slice": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz", - "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", - "dev": true + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "@babel/plugin-transform-modules-commonjs": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", "dev": true, - "optional": true + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz", + "integrity": "sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "regexpu-core": "^4.6.0" } }, - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", "dev": true, "requires": { - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "@babel/helper-plugin-utils": "^7.0.0" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", - "dev": true + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } }, - "async-foreach": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", "dev": true, - "optional": true + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "atob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.1.tgz", - "integrity": "sha1-ri1acpR38onWDdf5amMUoi3Wwio=", - "dev": true + "@babel/plugin-transform-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "autoprefixer": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.2.tgz", - "integrity": "sha512-cv9v1mYYBcAnZq4MHseJ9AIdjQmNahnpCpPO46oTkQJS2GggsBp2azHjNpAuQ95Epvsg+AIsyjYhfI9YwFxGSA==", + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "dev": true, "requires": { - "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000851", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.22", - "postcss-value-parser": "^3.2.3" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==", - "dev": true + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "@babel/plugin-transform-unicode-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", + "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "@babel/template": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", "dev": true, "requires": { - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.17.4", - "source-map": "^0.5.7", - "trim-right": "^1.0.1" + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" } }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "@babel/traverse": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.2.tgz", + "integrity": "sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ==", "dev": true, "requires": { - "babel-runtime": "^6.22.0" + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.2", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.6.2", + "@babel/types": "^7.6.0", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "@babel/types": { + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.1.tgz", + "integrity": "sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g==", "dev": true, "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "@ngrx/effects": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-8.3.0.tgz", + "integrity": "sha512-/DdBqCFpHOJZUAmIpefQ8EVwmJXXkcEdLhsV8aXncCNWkK61sy/MbZZfDAbee6Cd1is33bVXRUKD49Z+Upvw5A==" + }, + "@ngrx/entity": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ngrx/entity/-/entity-8.3.0.tgz", + "integrity": "sha512-UBN+mMDJYxklXuJMwVN9lEC9XDPodOsXwczV+kyS7vz3B+i9docwmLM0PqucYIPnmXPcIM+rOa0HfJDacP9ZMA==" + }, + "@ngrx/schematics": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ngrx/schematics/-/schematics-8.3.0.tgz", + "integrity": "sha512-18wyj0bOudF+RW6SCuPBVjMNeUgY9uWD+d481xCQ43VttamRAIsmNPmb9e1N/96Kte/HaotF5LNjw3mj/dU7QQ==", + "dev": true + }, + "@ngrx/store": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-8.3.0.tgz", + "integrity": "sha512-QtM5T6/wTYqAlqeW60ptqqrsBwYF7jvQHsh0yE3AnwZIQvSbLFM2t5S2kN+753v4rHiXVRrA5pLaLzjGhAKcSg==" + }, + "@ngrx/store-devtools": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-8.3.0.tgz", + "integrity": "sha512-7jsmN8wz6PMKrbqHnUulMvf8OSYUZbXXOwkcXRaGqIjlnEG9RCHQL0cXuF8zB6uX5xencdEXsRVQe3MdZXWQng==", + "dev": true + }, + "@ngtools/webpack": { + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.7.tgz", + "integrity": "sha512-JPUzw08myovtT/x2dzzWVUNjFq8OHD81bvcBXdqPAQwQvHDSIdo6bKcu2qhakgagtXLJZnglKtefTJFrMG8ciw==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "lodash": "^4.17.4" + "@angular-devkit/core": "8.3.7", + "enhanced-resolve": "4.1.0", + "rxjs": "6.4.0", + "tree-kill": "1.2.1", + "webpack-sources": "1.4.3" } }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "@schematics/angular": { + "version": "8.3.7", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.7.tgz", + "integrity": "sha512-RsUZofittMe+o8AGi2wbrWb10Avurl2VgDqlINF0fAEfdxzmjvNwXkP4IdAo5wsGl2URrxnJWeRP6geBqgueZQ==", "dev": true, "requires": { - "babel-code-frame": "^6.26.0", - "babel-messages": "^6.23.0", - "babel-runtime": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "debug": "^2.6.8", - "globals": "^9.18.0", - "invariant": "^2.2.2", - "lodash": "^4.17.4" + "@angular-devkit/core": "8.3.7", + "@angular-devkit/schematics": "8.3.7" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "@schematics/update": { + "version": "0.803.7", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.7.tgz", + "integrity": "sha512-T8HM88+oY7bMBq0w1SoSNTpPJplwGcU3tMbX9p18h7rdsmH3j68+al84A8S3/x+mUiLmumTUXAUmxd1gtoTiKA==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" + "@angular-devkit/core": "8.3.7", + "@angular-devkit/schematics": "8.3.7", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.5.5", + "rxjs": "6.4.0", + "semver": "6.3.0", + "semver-intersect": "1.4.0" } }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", "dev": true }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "@types/jasmine": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.16.tgz", + "integrity": "sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q==", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", + "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "@types/jasmine": "*" } }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "@types/node": { + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", + "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", "dev": true }, - "base64id": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", - "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", "dev": true }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "@types/selenium-webdriver": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz", + "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", "dev": true, - "optional": true, "requires": { - "tweetnacl": "^0.14.3" + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", "dev": true, "requires": { - "callsite": "1.0.0" + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" } }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", "dev": true }, - "binary-extensions": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", - "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", "dev": true }, - "blob": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.4.tgz", - "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=", + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", "dev": true, - "optional": true, "requires": { - "inherits": "~2.0.0" + "@webassemblyjs/wast-printer": "1.8.5" } }, - "blocking-proxy": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", - "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", "dev": true, "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", "dev": true }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } }, - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "dev": true, "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.1", - "http-errors": "~1.6.2", - "iconv-lite": "0.4.19", - "on-finished": "~2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "~1.6.15" - }, - "dependencies": { - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - } + "@xtuc/ieee754": "^1.2.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", "dev": true, "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "@xtuc/long": "4.2.2" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", "dev": true, "requires": { - "hoek": "2.x.x" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", "dev": true, "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", "dev": true, "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1" + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" } }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { - "pako": "~1.0.5" + "es6-promisify": "^5.0.0" } }, - "browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" + "humanize-ms": "^1.2.1" } }, - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==", + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", "dev": true }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "color-convert": "^1.9.0" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "cache-loader": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.2.tgz", - "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==", + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "mkdirp": "^0.5.1", - "neo-async": "^2.5.0", - "schema-utils": "^0.4.2" + "sprintf-js": "~1.0.2" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true - }, - "camel-case": { + "aria-query": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", "dev": true, "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" } }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", - "dev": true, - "optional": true + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - } + "array-uniq": "^1.0.1" } }, - "caniuse-lite": { - "version": "1.0.30000851", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000851.tgz", - "integrity": "sha512-Y1ecA1cL9wg0vni8t33nBw/poX8ypm+2c3fbwAESj8cm4ufK9CBFQ1+nUK8Dp5dtFo5Fc3JzkI5DKmQbuIo6hQ==", + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, - "optional": true, "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "safer-buffer": "~2.1.0" } }, - "chalk": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.2.2.tgz", - "integrity": "sha512-LvixLAQ4MYhbf7hgL4o5PeK32gJKvVzDRiSNIApDofQvyhl8adgG2lJVXn4+ekQoK7HL9RF8lqxwerpe0x2pCw==", + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "ansi-styles": "^3.1.0", - "escape-string-regexp": "^1.0.5", - "supports-color": "^4.0.0" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" }, "dependencies": { - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, - "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "has-flag": "^2.0.0" + "inherits": "2.0.1" } } } }, - "chokidar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.3.tgz", - "integrity": "sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg==", + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.0", - "braces": "^2.3.0", - "fsevents": "^1.1.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^2.1.1", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0", - "upath": "^1.0.0" + "lodash": "^4.17.14" } }, - "chownr": { + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", "dev": true }, - "chrome-trace-event": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-0.1.3.tgz", - "integrity": "sha512-sjndyZHrrWiu4RY7AkHgjn80GfAM2ZSzUkZLV/Js59Ldmh6JDThf0SUmOHU53rFu2rVxxfCzJ30Ukcfch3Gb/A==", + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" } }, - "circular-dependency-plugin": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", - "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true }, - "clean-css": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", - "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", "dev": true, "requires": { - "source-map": "0.5.x" + "ast-types-flow": "0.0.7" } }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, - "optional": true, "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { - "wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, - "optional": true + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", - "dev": true - }, - "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codelyzer": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-4.2.1.tgz", - "integrity": "sha512-CKwfgpfkqi9dyzy4s6ELaxJ54QgJ6A8iTSsM4bzHbLuTpbKncvNc3DUlCvpnkHBhK47gEf4qFsWoYqLrJPhy6g==", + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "app-root-path": "^2.0.1", - "css-selector-tokenizer": "^0.7.0", - "cssauron": "^1.4.0", - "semver-dsl": "^1.0.1", - "source-map": "^0.5.6", - "sprintf-js": "^1.0.3" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "babel-runtime": "^6.22.0" } }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", "dev": true, "requires": { - "color-name": "^1.1.1" + "object.assign": "^4.1.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "lodash": "^4.5.0" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "delayed-stream": "~1.0.0" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "compare-versions": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.3.0.tgz", - "integrity": "sha512-MAAAIOdi2s4Gl6rZ76PNcUa9IOYB+5ICdT41o5uMRf09aEu/F9RK+qhe8RjXNPwcTjGV7KU7h2P/fljThFVqyQ==", - "dev": true - }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true - }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true - }, - "compressible": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", - "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "mime-db": ">= 1.34.0 < 2" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" }, "dependencies": { - "mime-db": { - "version": "1.34.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.34.0.tgz", - "integrity": "sha1-RS0Oz/XDA0am3B5kseruDTcZ/5o=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "compression": { - "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", - "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "accepts": "~1.3.4", - "bytes": "3.0.0", - "compressible": "~2.0.13", - "debug": "2.6.9", - "on-headers": "~1.0.1", - "safe-buffer": "5.1.1", - "vary": "~1.1.2" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" }, "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true } } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } + "backo2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", + "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", + "dev": true }, - "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", - "utils-merge": "1.0.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" + "is-descriptor": "^1.0.0" } }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", - "dev": true - }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", "dev": true }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", "dev": true }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "better-assert": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", + "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", "dev": true, "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "callsite": "1.0.0" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "copy-webpack-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.1.tgz", - "integrity": "sha512-OlTo6DYg0XfTKOF8eLf79wcHm4Ut10xU2cRBRPMW/NA5F9VMjZGTfRHWDIYC3s+1kObGYrBLshXWU1K0hILkNQ==", + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", - "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "minimist": "^1.2.0" } }, - "core-js": { - "version": "2.5.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", - "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + "bluebird": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.0.tgz", + "integrity": "sha512-aBQ1FxIa7kSWCcmKHlcHFlT2jt6J/l4FzC7KcPELkOJOsPOb/bccdhmIrKDfXhwFrmc7vDoDrrepFvGqjyXGJg==", + "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "cosmiconfig": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", - "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "is-directory": "^0.3.1", - "js-yaml": "^3.4.3", - "minimist": "^1.2.0", - "object-assign": "^4.1.0", - "os-homedir": "^1.0.1", - "parse-json": "^2.2.0", - "require-from-string": "^1.1.0" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true } } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "fill-range": "^7.0.1" } }, - "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "optional": true, "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "boom": "2.x.x" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "safe-buffer": "^5.1.2" } }, - "css-parse": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", - "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", - "dev": true - }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, - "css-selector-tokenizer": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", - "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" } }, - "css-what": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", - "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", - "dev": true - }, - "cssauron": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", - "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "through": "X.X.X" + "pako": "~1.0.5" } }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cuint": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "es5-ext": "^0.10.9" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "assert-plus": "^1.0.0" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "default-require-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", - "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", - "dev": true, - "requires": { - "strip-bom": "^3.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", + "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" } }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "foreach": "^2.0.5", - "object-keys": "^1.0.8" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "callsites": "^2.0.0" } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - } + "caller-callsite": "^2.0.0" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "delegates": { + "callsite": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", "dev": true }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "detect-node": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.3.tgz", - "integrity": "sha1-ogM8CcyOFY03dI+951B4Mr1s4Sc=", + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", "dev": true }, - "di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", "dev": true }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.1.tgz", + "integrity": "sha512-/j5PPkb5Feyps9e+jo07jUZGvkB5Aj953NrI4s8xSVScrAo/RHeILrtdb4uzR7N6aaFFxxJ+gt8mA8HfNpw76w==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.0", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.1.3" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "ip": "^1.1.0", + "inherits": "^2.0.1", "safe-buffer": "^5.0.1" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "buffer-indexof": "^1.0.0" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } } }, - "dom-converter": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", - "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "utila": "~0.3" + "source-map": "~0.6.0" }, "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "restore-cursor": "^3.1.0" } }, - "dom-serializer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", - "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "domelementtype": "~1.1.1", - "entities": "~1.1.1" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { - "domelementtype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", - "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } } } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", "dev": true }, - "domelementtype": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", - "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", "dev": true }, - "domhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", - "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-5.1.2.tgz", + "integrity": "sha512-1z7mtpwxcz5uUqq0HLO0ifj/tz2dWEmeaK+8c5TEZXAwwVxrjjg0118ODCOCCOcpfYaaEHxStNCaWVYo9FUPXw==", "dev": true, "requires": { - "domelementtype": "1" + "app-root-path": "^2.2.1", + "aria-query": "^3.0.0", + "axobject-query": "^2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } } }, - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, - "duplexify": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", - "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "color-name": "1.1.3" } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, - "optional": true, "requires": { - "jsbn": "~0.1.0" + "delayed-stream": "~1.0.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "commander": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz", + "integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg==", "dev": true }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "electron-to-chromium": { - "version": "1.3.48", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.48.tgz", - "integrity": "sha1-07DYWTgUBE4JLs4hCPw6ya6kuQA=", + "compare-versions": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", + "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==", "dev": true }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } + "component-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", + "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", + "dev": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "component-inherit": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", + "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", "dev": true }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "compressible": { + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "once": "^1.4.0" + "mime-db": ">= 1.40.0 < 2" } }, - "engine.io": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", - "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { - "accepts": "1.3.3", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "ws": "1.1.2" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, - "requires": { - "mime-types": "~2.1.11", - "negotiator": "0.6.1" - } - }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "engine.io-client": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", - "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "2.3.3", - "engine.io-parser": "1.3.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parsejson": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "1.1.2", - "xmlhttprequest-ssl": "1.5.3", - "yeast": "0.1.2" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, - "engine.io-parser": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-1.3.2.tgz", - "integrity": "sha1-k3sHnwAH0Ik+xW1GyyILjLQ1Igo=", + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { - "after": "0.8.2", - "arraybuffer.slice": "0.0.6", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.4", - "has-binary": "0.1.7", - "wtf-8": "1.0.0" + "safe-buffer": "5.1.2" } }, - "enhanced-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", - "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "safe-buffer": "~5.1.1" } }, - "ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, - "entities": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", - "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "prr": "~1.0.1" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "cacache": "^11.3.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + } } }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "core-js": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", + "dev": true + }, + "core-js-compat": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.2.1.tgz", + "integrity": "sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A==", "dev": true, "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "browserslist": "^4.6.6", + "semver": "^6.3.0" } }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { - "is-callable": "^1.1.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" } }, - "es5-ext": { - "version": "0.10.45", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.45.tgz", - "integrity": "sha512-FkfM6Vxxfmztilbxxz5UKSD4ICMf5tSpRFtDNtkAhOxZ0EKtX6qwmXNyH/sFyIbX2P/nU5AMiA9jilWsUGJzCQ==", + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "es6-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "es6-promise": "^4.0.3" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=", "dev": true }, - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "css-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { - "source-map": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, - "optional": true, "requires": { - "amdefine": ">=0.0.4" + "jsesc": "~0.5.0" } } } }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "through": "X.X.X" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", "dev": true }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "estraverse": "^4.1.0" - }, - "dependencies": { - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - } + "assert-plus": "^1.0.0" } }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", "dev": true }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", "dev": true }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "dev": true }, - "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", "dev": true, "requires": { - "original": ">=0.0.5" + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" } }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - } + "strip-bom": "^3.0.0" } }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "expand-range": "^0.1.0" + "kind-of": "^6.0.0" } }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" + "kind-of": "^6.0.0" } }, - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" } }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.3", - "qs": "6.5.1", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true - } + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "electron-to-chromium": { + "version": "1.3.273", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.273.tgz", + "integrity": "sha512-0kUppiHQvHEENHh+nTtvTt4eXMwcPyWmMaj73GPrSEm3ldKhmmHuOH6IjrmuW6YmyS/fpXcLvMQLNVpqRhpNWw==", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, - "fastparse": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", - "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "dev": true, "requires": { - "websocket-driver": ">=0.5.1" + "iconv-lite": "~0.4.13" } }, - "file-loader": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", - "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^0.4.5" + "once": "^1.4.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, - "fileset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", - "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { - "glob": "^7.0.3", - "minimatch": "^3.0.3" + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" } } } }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", "dev": true, "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" } }, - "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^1.0.0", - "pkg-dir": "^2.0.0" + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "locate-path": "^2.0.0" + "prr": "~1.0.1" } }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "is-arrayish": "^0.2.1" } }, - "follow-redirects": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.0.tgz", - "integrity": "sha512-fdrt472/9qQ6Kgjvb935ig6vJCuofpBUD14f9Vb+SLlm7xIe4Qva5gey8EKtv8lp7ahE1wilg3xL1znpVGtZIA==", + "es-abstract": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.15.0.tgz", + "integrity": "sha512-bhkEqWJ2t2lMeaJDuk7okMkJWI/yqgH/EoGwpcvv0XW9RWQsRspI4wt6xuyuvMvvQE3gg/D9HXppgk21w78GyQ==", "dev": true, "requires": { - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "dev": true, "requires": { - "for-in": "^1.0.1" + "es6-promise": "^4.0.3" } }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "1.0.6", - "mime-types": "^2.1.12" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "map-cache": "^0.2.2" + "estraverse": "^4.1.0" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "original": "^1.0.0" } }, - "fs-access": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", - "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "null-check": "^1.0.0" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", - "dev": true, - "optional": true, - "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "optional": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "ms": "2.0.0" } }, - "glob": { - "version": "7.1.2", - "bundled": true, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "optional": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "is-descriptor": "^0.1.0" } }, - "has-unicode": { + "extend-shallow": { "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.21", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "^2.1.0" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "is-extendable": "^0.1.0" } }, - "inherits": { - "version": "2.0.3", - "bundled": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "minipass": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "^5.1.1", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "minimist": "0.0.8" + "ms": "2.0.0" } }, "ms": { "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.0", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.1.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.1.10", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.5.1", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, - "optional": true, "requires": { - "glob": "^7.0.5" + "is-plain-object": "^2.0.4" } - }, - "safe-buffer": { - "version": "5.1.1", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, - "optional": true + "requires": { + "is-descriptor": "^1.0.0" + } }, - "semver": { - "version": "5.5.0", - "bundled": true, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "optional": true + "requires": { + "is-extendable": "^0.1.0" + } }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "optional": true + "requires": { + "kind-of": "^6.0.0" + } }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "optional": true + "requires": { + "kind-of": "^6.0.0" + } }, - "string-width": { + "is-descriptor": { "version": "1.0.2", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz", + "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", "dev": true, - "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, + } + } + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ms": "2.0.0" } }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.0.0.tgz", + "integrity": "sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "optional": true + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "tar": { - "version": "4.4.1", - "bundled": true, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "optional": true, "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" + "p-locate": "^4.1.0" } }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", "dev": true, - "optional": true + "requires": { + "semver": "^6.0.0" + } }, - "wide-align": { - "version": "1.1.2", - "bundled": true, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "optional": true, "requires": { - "string-width": "^1.0.2" + "p-limit": "^2.2.0" } }, - "wrappy": { - "version": "1.0.2", - "bundled": true, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, - "yallist": { - "version": "3.0.2", - "bundled": true, - "dev": true + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } } } }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "locate-path": "^3.0.0" } }, - "function-bind": { + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flush-write-stream": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", "dev": true }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, - "optional": true, "requires": { - "globule": "^1.0.0" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.0.tgz", + "integrity": "sha512-+iXhW3LuDQsno8dOIrCIT/CBjeBWuP7PXe8w9shnj9Lebny/Gx1ZjVBYwexLz36Ri2jKuXMNpV6CYNh8lHHgrQ==", "dev": true, "optional": true }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "optional": true, - "requires": { - "is-property": "^1.0.0" - } + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", "dev": true }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } }, "get-value": { "version": "2.0.6", @@ -4280,9 +5311,9 @@ } }, "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4293,42 +5324,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -4351,9 +5346,9 @@ } }, "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, "globby": { @@ -4368,24 +5363,20 @@ "ignore": "^3.3.5", "pify": "^3.0.0", "slash": "^1.0.0" - } - }, - "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", - "dev": true, - "optional": true, - "requires": { - "glob": "~7.1.1", - "lodash": "~4.17.10", - "minimatch": "~3.0.2" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", "dev": true }, "hammerjs": { @@ -4394,52 +5385,28 @@ "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" }, "handle-thing": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", - "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.2.tgz", + "integrity": "sha512-cIv17+GhL8pHHnRJzGu2wwcthL5sb8uDKBHvZ2Dtu5s1YNt0ljbzKbamnc+gr69y7bzwQiBdr5+hOpRd5pnOdg==", "dev": true, "requires": { - "async": "^1.4.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "requires": { - "amdefine": ">=0.0.4" - } - }, - "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", - "dev": true, - "optional": true, - "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "optional": true - } - } + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, @@ -4450,27 +5417,13 @@ "dev": true }, "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "^5.1.0", + "ajv": "^6.5.5", "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "dev": true, - "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" - } - } } }, "has": { @@ -4491,19 +5444,19 @@ "ansi-regex": "^2.0.0" } }, - "has-binary": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-binary/-/has-binary-0.1.7.tgz", - "integrity": "sha1-aOYesWIQyVRaClzOBqhzkS/h5ow=", + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", "dev": true, "requires": { - "isarray": "0.0.1" + "isarray": "2.0.1" }, "dependencies": { "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true } } @@ -4526,12 +5479,6 @@ "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4553,6 +5500,26 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -4575,33 +5542,15 @@ } }, "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.0" - } - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" + "minimalistic-assert": "^1.0.1" } }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -4613,16 +5562,10 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", "dev": true }, "hpack.js": { @@ -4643,96 +5586,11 @@ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", "dev": true }, - "html-minifier": { - "version": "3.5.16", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.16.tgz", - "integrity": "sha512-zP5EfLSpiLRp0aAgud4CQXPQZm9kXwWjR/cF0PfdOj+jjWnOaCgeZcll4kYXSvIBPeUMmyaSc7mM4IDtA+kboA==", - "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.1.x", - "commander": "2.15.x", - "he": "1.1.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.3.x" - } - }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", - "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } - } - }, - "htmlparser2": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", - "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", - "dev": true, - "requires": { - "domelementtype": "1", - "domhandler": "2.1", - "domutils": "1.1", - "readable-stream": "1.0" - }, - "dependencies": { - "domutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", - "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", - "dev": true, - "requires": { - "domelementtype": "1" - } - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true }, "http-deceiver": { "version": "1.2.7", @@ -4741,44 +5599,80 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "http-parser-js": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", - "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "http-proxy-middleware": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", - "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "^1.16.2", + "http-proxy": "^1.17.0", "is-glob": "^4.0.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9" + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -4799,36 +5693,48 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", + "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", "dev": true, "requires": { - "agent-base": "^4.1.0", + "agent-base": "^4.3.0", "debug": "^3.1.0" }, "dependencies": { "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } } } }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", - "dev": true + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -4838,11 +5744,20 @@ "dev": true }, "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", "dev": true }, + "ignore-walk": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.2.tgz", + "integrity": "sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -4856,44 +5771,62 @@ "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", "dev": true }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" + "import-from": "^2.1.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "in-publish": { + "import-fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, - "optional": true + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } }, - "indent-string": { + "import-from": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "repeating": "^2.0.0" + "resolve-from": "^3.0.0" } }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4905,9 +5838,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "ini": { @@ -4916,13 +5849,69 @@ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, + "inquirer": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "internal-ip": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", - "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "meow": "^3.3.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, "invariant": { @@ -4935,9 +5924,9 @@ } }, "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", "dev": true }, "ip": { @@ -4946,10 +5935,22 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, "is-accessor-descriptor": { @@ -4972,6 +5973,12 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -4979,12 +5986,12 @@ "dev": true }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { @@ -4993,19 +6000,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-data-descriptor": { @@ -5059,21 +6057,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5096,105 +6079,56 @@ } }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true, - "optional": true - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "dev": true, - "optional": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-odd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", - "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true }, "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "^1.0.2" } }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -5204,25 +6138,12 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true, - "optional": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -5239,10 +6160,13 @@ "dev": true }, "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, "is-typedarray": { "version": "1.0.0", @@ -5250,12 +6174,6 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5275,10 +6193,13 @@ "dev": true }, "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } }, "isexe": { "version": "2.0.0", @@ -5298,91 +6219,46 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", - "dev": true, - "requires": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - }, - "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", - "dev": true, - "requires": { - "has-flag": "^1.0.0" - } - } - } - }, "istanbul-api": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.3.1.tgz", - "integrity": "sha512-duj6AlLcsWNwUpfyfHt0nWIeRiZpuShnP40YTxOGQgtaN8fd6JYSxsvxUphTDy8V5MfDXo4s/xVCIIvVCO808g==", - "dev": true, - "requires": { - "async": "^2.1.4", - "compare-versions": "^3.1.0", - "fileset": "^2.0.2", - "istanbul-lib-coverage": "^1.2.0", - "istanbul-lib-hook": "^1.2.0", - "istanbul-lib-instrument": "^1.10.1", - "istanbul-lib-report": "^1.1.4", - "istanbul-lib-source-maps": "^1.2.4", - "istanbul-reports": "^1.3.0", - "js-yaml": "^3.7.0", - "mkdirp": "^0.5.1", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "compare-versions": "^3.4.0", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", "once": "^1.4.0" }, "dependencies": { - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", "dev": true, "requires": { - "lodash": "^4.17.10" + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" } } } @@ -5411,6 +6287,18 @@ "json-schema-traverse": "^0.3.0" } }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "schema-utils": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", @@ -5423,24 +6311,24 @@ } }, "istanbul-lib-coverage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz", - "integrity": "sha512-GvgM/uXRwm+gLlvkWHTjDAvwynZkL9ns15calTrmhGgowlwJBbWMYzWbKqE2DT6JDP1AFXKa+Zi0EkqNCUqY0A==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", "dev": true }, "istanbul-lib-hook": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.2.1.tgz", - "integrity": "sha512-eLAMkPG9FU0v5L02lIkcj/2/Zlz9OuluaXikdr5iStk8FDbSwAixTK9TkYxbF0eNnzAJTwM2fkV2A1tpsIp4Jg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", "dev": true, "requires": { "append-transform": "^1.0.0" } }, "istanbul-lib-instrument": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz", - "integrity": "sha512-1dYuzkOCbuR5GRJqySuZdsmsNKPL3PTuyPevQfoCXJePT9C8y1ga75neU+Tuy9+yS3G/dgx8wgOmp2KLpgdoeQ==", + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { "babel-generator": "^6.18.0", @@ -5448,70 +6336,80 @@ "babel-traverse": "^6.18.0", "babel-types": "^6.18.0", "babylon": "^6.18.0", - "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-coverage": "^1.2.1", "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "istanbul-lib-report": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz", - "integrity": "sha512-Azqvq5tT0U09nrncK3q82e/Zjkxa4tkFZv7E6VcqP0QCPn6oNljDPfrZEC/umNXds2t7b8sRJfs6Kmpzt8m2kA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", "dev": true, "requires": { - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "supports-color": "^3.1.2" + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" }, "dependencies": { - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, "supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "^1.0.0" + "has-flag": "^3.0.0" } } } }, "istanbul-lib-source-maps": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.5.tgz", - "integrity": "sha512-8O2T/3VhrQHn0XcJbP1/GN7kXMiRAlPi+fj3uEHrjBD8Oz7Py0prSC25C09NuAZS6bgW1NNKAvCSHZXB0irSGA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", "dev": true, "requires": { - "debug": "^3.1.0", - "istanbul-lib-coverage": "^1.2.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.6.1", - "source-map": "^0.5.3" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" }, "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } } }, "istanbul-reports": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.3.0.tgz", - "integrity": "sha512-y2Z2IMqE1gefWUaVjrBm0mSKvUkaBy9Vqz8iwr/r40Y9hBbIteH5wqHG/9DLTfJ9xUnUT2j7A3+VVJ6EaYBllA==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", "dev": true, "requires": { - "handlebars": "^4.0.3" + "handlebars": "^4.1.2" } }, "jasmine": { @@ -5534,9 +6432,9 @@ } }, "jasmine-core": { - "version": "2.99.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz", - "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", "dev": true }, "jasmine-spec-reporter": { @@ -5554,48 +6452,65 @@ "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", "dev": true }, - "js-base64": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.5.tgz", - "integrity": "sha512-aUnNwqMOXw3yvErjMPSQu6qIIzUmT1e5KcU1OZxRDU1g/am6mzBvcrmLAYwzmB59BHPrh5/tKaiF4OPhqRWESQ==", + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, - "optional": true + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" - }, - "dependencies": { - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - } } }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true + "dev": true }, "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-schema": { @@ -5605,20 +6520,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", @@ -5627,30 +6531,34 @@ "dev": true }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "optional": true + "requires": { + "minimist": "^1.2.0" + } }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, - "optional": true + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true }, "jsprim": { "version": "1.4.1", @@ -5665,222 +6573,750 @@ } }, "jszip": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.1.5.tgz", - "integrity": "sha512-5W8NUaFRFRqTOL7ZDDrx5qWHJyBXy6velVudIzQUSoqAAYqzSh2Z7/m0Rf1QbmQJccegD0r+YZxBjzqoBiEeJQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", "dev": true, "requires": { - "core-js": "~2.3.0", - "es6-promise": "~3.0.2", - "lie": "~3.1.0", + "lie": "~3.3.0", "pako": "~1.0.2", - "readable-stream": "~2.0.6" - }, - "dependencies": { - "core-js": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.3.0.tgz", - "integrity": "sha1-+rg/uwstjchfpjbEudNMdUIMbWU=", - "dev": true - }, - "es6-promise": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", - "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" } }, "karma": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", - "chokidar": "^1.4.1", + "braces": "^2.3.2", + "chokidar": "^2.0.3", "colors": "^1.1.0", - "combine-lists": "^1.0.0", "connect": "^3.6.0", "core-js": "^2.2.0", "di": "^0.0.1", "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", + "flatted": "^2.0.0", "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^3.8.0", - "log4js": "^0.6.31", - "mime": "^1.3.4", + "lodash": "^4.17.11", + "log4js": "^4.0.0", + "mime": "^2.3.1", "minimatch": "^3.0.2", "optimist": "^0.6.1", "qjobs": "^1.1.4", "range-parser": "^1.2.0", "rimraf": "^2.6.0", "safe-buffer": "^5.0.1", - "socket.io": "1.7.3", - "source-map": "^0.5.3", - "tmp": "0.0.31", - "useragent": "^2.1.12" + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" }, "dependencies": { "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } } }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, + "optional": true, "requires": { - "arr-flatten": "^1.0.1" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } } }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" + "binary-extensions": "^1.0.0" } }, - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", - "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "kind-of": "^3.0.2" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-posix-bracket": "^0.1.0" + "is-buffer": "^1.1.5" } }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "is-glob": "^2.0.0" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-buffer": "^1.1.5" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } @@ -5896,43 +7332,43 @@ } }, "karma-coverage-istanbul-reporter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.1.tgz", - "integrity": "sha512-UcgrHkFehI5+ivMouD8NH/UOHiX4oCAtwaANylzPFdcAuD52fnCUuelacq2gh8tZ4ydhU3+xiXofSq7j5Ehygw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz", + "integrity": "sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==", "dev": true, "requires": { - "istanbul-api": "^1.3.1", + "istanbul-api": "^2.1.6", "minimatch": "^3.0.4" } }, "karma-jasmine": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", - "integrity": "sha1-OU8rJf+0pkS5rabyLUQ+L9CIhsM=", - "dev": true - }, - "karma-jasmine-html-reporter": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-0.2.2.tgz", - "integrity": "sha1-SKjl7xiAdhfuK14zwRlMNbQ5Ukw=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", + "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", "dev": true, "requires": { - "karma-jasmine": "^1.0.2" + "jasmine-core": "^3.3" } }, + "karma-jasmine-html-reporter": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.2.tgz", + "integrity": "sha512-7g0gPj8+9JepCNJR9WjDyQ2RkZ375jpdurYQyAYv8PorUCadepl8vrD6LmMqOGcM17cnrynBawQYZHaumgDjBw==", + "dev": true + }, "karma-source-map-support": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.3.0.tgz", - "integrity": "sha512-HcPqdAusNez/ywa+biN4EphGz62MmQyPggUsDfsHqa7tSe4jdsxgvTKuDfIazjL+IOxpVWyT7Pr4dhAV+sxX5Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", "dev": true, "requires": { "source-map-support": "^0.5.5" } }, "killable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.0.tgz", - "integrity": "sha1-2ouEvUfeU5WHj5XWTQLyRJ/gXms=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", "dev": true }, "kind-of": { @@ -5941,34 +7377,22 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", - "dev": true, - "optional": true - }, "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "invert-kv": "^2.0.0" } }, - "leb": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/leb/-/leb-0.3.0.tgz", - "integrity": "sha1-Mr7p+tFoMo1q6oUi2DP0GA7tHaM=", - "dev": true - }, "less": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/less/-/less-3.0.4.tgz", - "integrity": "sha512-q3SyEnPKbk9zh4l36PGeW2fgynKu+FpbhiUNx/yaiBUQ3V0CbACCgb9FzYWcRgI2DJlP6eI4jc8XPrCTi55YcQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", "dev": true, "requires": { + "clone": "^2.1.2", "errno": "^0.1.1", "graceful-fs": "^4.1.2", "image-size": "~0.5.0", @@ -5989,265 +7413,183 @@ } }, "less-loader": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.1.0.tgz", - "integrity": "sha512-KNTsgCE9tMOM70+ddxp9yyt9iHqgmSs0yTZc5XH5Wo+g80RWRIYNqE58QJKm/yMud5wZEvz50ugRDuzVIkyahg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", "dev": true, "requires": { "clone": "^2.1.1", "loader-utils": "^1.1.0", - "pify": "^3.0.0" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "pify": "^4.0.1" } }, "license-webpack-plugin": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.3.1.tgz", - "integrity": "sha512-NqAFodJdpBUuf1iD+Ij8hQvF0rCFKlO2KaieoQzAPhFgzLCtJnC7Z7x5gQbGNjoe++wOKAtAmwVEIBLqq2Yp1A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-7poZHRla+ae0eEButlwMrPpkXyhNVBf2EHePYWT0jyLnI6311/OXJkTI2sOIRungRpQgU2oDMpro5bSFPT5F0A==", "dev": true, "requires": { - "ejs": "^2.5.7" + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" } }, "lie": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", - "integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { "immediate": "~3.0.5" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, "loader-runner": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", - "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true }, "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "big.js": "^3.1.3", + "big.js": "^5.2.2", "emojis-list": "^2.0.0", - "json5": "^0.5.0" + "json5": "^1.0.1" } }, "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^2.0.0", + "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", "dev": true }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", - "dev": true, - "optional": true - }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", - "dev": true, - "optional": true - }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", - "dev": true, - "requires": { - "chalk": "^2.0.1" - } - }, "log4js": { - "version": "0.6.38", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-0.6.38.tgz", - "integrity": "sha1-LElBFmldb7JUgJQ9P8hy5mKlIv0=", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", "dev": true, "requires": { - "readable-stream": "~1.0.2", - "semver": "~4.3.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", - "dev": true - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", "dev": true }, - "loglevelnext": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", - "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "es6-symbol": "^3.1.1", - "object.assign": "^4.1.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", - "dev": true - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", - "dev": true - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "js-tokens": "^3.0.0" + "yallist": "^3.0.2" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "magic-string": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", "dev": true }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "make-fetch-happen": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz", + "integrity": "sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "pify": "^3.0.0" + "p-defer": "^1.0.0" } }, - "make-error": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.4.tgz", - "integrity": "sha512-0Dab5btKVPhibSalc9QGXb559ED7G7iLjFXBaj9Wq8O3vorueR5K5jaE3hkG6ZQINyhA/JgG6Qk4qdFQjsYV6g==", - "dev": true - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", @@ -6257,20 +7599,15 @@ "object-visit": "^1.0.0" } }, - "math-random": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", - "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", - "dev": true - }, "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -6280,48 +7617,24 @@ "dev": true }, "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" } }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "merge-descriptors": { @@ -6330,6 +7643,12 @@ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", "dev": true }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -6355,6 +7674,90 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "miller-rabin": { @@ -6374,33 +7777,35 @@ "dev": true }, "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", "dev": true }, "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", "dev": true, "requires": { - "mime-db": "~1.33.0" + "mime-db": "1.40.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mini-css-extract-plugin": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.0.tgz", - "integrity": "sha512-2Zik6PhUZ/MbiboG6SDS9UTPL4XXy4qnyGjSdCIWRrr8xb6PwLtHE+AYOjkXJWdF0OG8vo/yrJ8CgS5WbMpzIg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", "dev": true, "requires": { "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", "webpack-sources": "^1.1.0" } }, @@ -6426,15 +7831,34 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -6443,16 +7867,16 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" } }, "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { "for-in": "^1.0.2", @@ -6470,24 +7894,6 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -6495,6 +7901,14 @@ "dev": true, "requires": { "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } } }, "move-concurrently": { @@ -6512,9 +7926,9 @@ } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { @@ -6533,17 +7947,23 @@ "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", "dev": true, "optional": true }, "nanomatch": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", - "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { "arr-diff": "^4.0.0", @@ -6551,7 +7971,6 @@ "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", @@ -6561,184 +7980,44 @@ } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.1.tgz", - "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, - "node-gyp": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.7.0.tgz", - "integrity": "sha512-qDQE/Ft9xXP6zphwx4sD0t+VhwV7yFaloMpfbL2QnnDZcyaiakWlLdtFGGQfTAwpFHdpbRhRxVhIHN1OKAjgbg==", - "dev": true, - "optional": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": ">=2.9.0 <2.82.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "json-stable-stringify": "^1.0.1" - } - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "optional": true, - "requires": { - "ajv": "^4.9.1", - "har-schema": "^1.0.5" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.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" - } - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true, - "optional": true - } - } - }, "node-libs-browser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", - "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { "assert": "^1.1.1", @@ -6748,10 +8027,10 @@ "constants-browserify": "^1.0.0", "crypto-browserify": "^3.11.0", "domain-browser": "^1.1.1", - "events": "^1.0.0", + "events": "^3.0.0", "https-browserify": "^1.0.0", "os-browserify": "^0.3.0", - "path-browserify": "0.0.0", + "path-browserify": "0.0.1", "process": "^0.11.10", "punycode": "^1.2.4", "querystring-es3": "^0.2.0", @@ -6762,8 +8041,8 @@ "timers-browserify": "^2.0.4", "tty-browserify": "0.0.0", "url": "^0.11.0", - "util": "^0.10.3", - "vm-browserify": "0.0.4" + "util": "^0.11.0", + "vm-browserify": "^1.0.1" }, "dependencies": { "punycode": { @@ -6774,191 +8053,40 @@ } } }, - "node-sass": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.0.tgz", - "integrity": "sha512-QFHfrZl6lqRU3csypwviz2XLgGNOoWQbo2GOvtsfQqOfL4cy1BtWnhx/XUeAO9LT3ahBzSRXcEO6DdvAH9DzSg==", - "dev": true, - "optional": true, - "requires": { - "async-foreach": "^0.1.3", - "chalk": "^1.1.1", - "cross-spawn": "^3.0.0", - "gaze": "^1.0.0", - "get-stdin": "^4.0.1", - "glob": "^7.0.3", - "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", - "meow": "^3.7.0", - "mkdirp": "^0.5.1", - "nan": "^2.10.0", - "node-gyp": "^3.3.1", - "npmlog": "^4.0.0", - "request": "~2.79.0", - "sass-graph": "^2.2.4", - "stdout-stream": "^1.4.0", - "true-case-path": "^1.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.1.1", - "har-validator": "~2.0.6", - "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", - "qs": "~6.3.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1", - "uuid": "^3.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "node-releases": { + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.34.tgz", + "integrity": "sha512-fNn12JTEfniTuCqo0r9jXgl44+KxRH/huV7zM/KAGOKxDKrHr6EbT7SSs4B+DNxyBE2mks28AD+Jw6PkfY5uwA==", "dev": true, "requires": { - "abbrev": "1" + "semver": "^6.3.0" } }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", @@ -6966,6 +8094,24 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true + }, "npm-package-arg": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", @@ -6976,56 +8122,75 @@ "osenv": "^0.1.5", "semver": "^5.5.0", "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "npm-registry-client": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/npm-registry-client/-/npm-registry-client-8.5.1.tgz", - "integrity": "sha512-7rjGF2eA7hKDidGyEWmHTiKfXkbrcQAsGL/Rh4Rt3x3YNRNHhwaTzVJfW3aNvvlhg4G62VCluif0sLCb/i51Hg==", + "npm-packlist": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", + "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", "dev": true, "requires": { - "concat-stream": "^1.5.2", - "graceful-fs": "^4.1.6", - "normalize-package-data": "~1.0.1 || ^2.0.0", - "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", - "npmlog": "2 || ^3.1.0 || ^4.0.0", - "once": "^1.3.3", - "request": "^2.74.0", - "retry": "^0.10.0", - "safe-buffer": "^5.1.1", - "semver": "2 >=2.2.1 || 3.x || 4 || 5", - "slide": "^1.1.3", - "ssri": "^5.2.4" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", "dev": true, "requires": { - "path-key": "^2.0.0" + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "npm-registry-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.1.tgz", + "integrity": "sha512-1ZQ+yjnxc698R5h9Yje9CASapzAZr7aYDkJDdERg9xg2hOEY0vRJwskOaJAXq8N/eLavzvW4g564YAfq6zMn/A==", "dev": true, "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, - "nth-check": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", - "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "boolbase": "~1.0.0" + "path-key": "^2.0.0" } }, "null-check": { @@ -7047,9 +8212,9 @@ "dev": true }, "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, "object-assign": { @@ -7095,10 +8260,22 @@ } } }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -7132,27 +8309,6 @@ "es-abstract": "^1.5.1" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -7178,9 +8334,9 @@ } }, "on-headers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", - "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { @@ -7192,10 +8348,28 @@ "wrappy": "1" } }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "opn": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", - "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { "is-wsl": "^1.1.0" @@ -7211,41 +8385,21 @@ "wordwrap": "~0.0.2" }, "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true } } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } - }, - "options": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", - "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=", - "dev": true - }, "original": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.1.tgz", - "integrity": "sha512-IEvtB5vM5ULvwnqMxWBLxkS13JIEXbakizMSo3yoPNPCIWzg8TG3Usn/UhXoZFM/m+FuEA20KdzPSFq/0rS+UA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "dev": true, "requires": { - "url-parse": "~1.4.0" + "url-parse": "^1.4.3" } }, "os-browserify": { @@ -7261,13 +8415,14 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, - "optional": true, "requires": { - "lcid": "^1.0.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, "os-tmpdir": { @@ -7286,117 +8441,157 @@ "os-tmpdir": "^1.0.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "^2.0.0" } }, "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "pacote": { + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.5.tgz", + "integrity": "sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.2.3", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.8", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "pako": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", - "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "dev": true, - "requires": { - "no-case": "^2.2.0" - } - }, "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", "dev": true, "requires": { "asn1.js": "^4.0.0", "browserify-aes": "^1.0.0", "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3" - } - }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "parse5": { @@ -7405,13 +8600,35 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, - "parsejson": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz", - "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=", - "dev": true, + "parse5-html-rewriting-stream": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-5.1.0.tgz", + "integrity": "sha512-hZlaOTHJs4dpC5yFHnOSEMh26ErsqTsLzxKqkuRcUqtiu0kMsBQ9pkgANkECDyoBUhJ3+hvb2DPLsyqbtcS61Q==", "requires": { - "better-assert": "~1.0.0" + "parse5": "^5.1.0", + "parse5-sax-parser": "^5.1.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + } + } + }, + "parse5-sax-parser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-5.1.0.tgz", + "integrity": "sha512-VEhdEDhBkoSILPmsZ96SoIIUow3hZbtgQsqXw7r8DxxnqsCIO0fwkT9mWgBcf9SPjVUh92liuEprHrrYzXBPWQ==", + "requires": { + "parse5": "^5.1.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + } } }, "parseqs": { @@ -7433,9 +8650,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -7445,9 +8662,9 @@ "dev": true }, "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", "dev": true }, "path-dirname": { @@ -7481,9 +8698,9 @@ "dev": true }, "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, "path-to-regexp": { @@ -7499,12 +8716,20 @@ "dev": true, "requires": { "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -7520,10 +8745,16 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { @@ -7542,23 +8773,46 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "find-up": "^3.0.0" } }, "portfinder": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", - "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "version": "1.0.24", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", + "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", "dev": true, "requires": { "async": "^1.5.2", "debug": "^2.2.0", "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "posix-character-classes": { @@ -7568,132 +8822,93 @@ "dev": true }, "postcss": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.22.tgz", - "integrity": "sha512-Toc9lLoUASwGqxBSJGTVcOQiDqjK+Z2XlWBg+IgYwQMY9vA2f7iMpXVc1GpPcfTSyM5lkxNo0oDwDRO+wm7XHA==", + "version": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "postcss-import": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", - "integrity": "sha512-5l327iI75POonjxkXgdRCUS+AlzAdBx4pOvMEhTKTCjb1p8IEeVR9yx3cPbmN7LIWJLbfnIXxAhoB4jpD0c/Cw==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", "dev": true, "requires": { - "postcss": "^6.0.1", + "postcss": "^7.0.1", "postcss-value-parser": "^3.2.3", "read-cache": "^1.0.0", "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } } }, "postcss-load-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", - "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", - "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0", - "postcss-load-options": "^1.2.0", - "postcss-load-plugins": "^2.3.0" - } - }, - "postcss-load-options": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", - "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", - "dev": true, - "requires": { - "cosmiconfig": "^2.1.0", - "object-assign": "^4.1.0" - } - }, - "postcss-load-plugins": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", - "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", "dev": true, "requires": { - "cosmiconfig": "^2.1.1", - "object-assign": "^4.1.0" + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" } }, "postcss-loader": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.5.tgz", - "integrity": "sha512-pV7kB5neJ0/1tZ8L1uGOBNTVBCSCXQoIsZMsrwvO8V2rKGa2tBl/f80GGVxow2jJnRJ2w1ocx693EKhZAb9Isg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { "loader-utils": "^1.1.0", - "postcss": "^6.0.0", - "postcss-load-config": "^1.2.0", - "schema-utils": "^0.4.0" - } - }, - "postcss-url": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.2.tgz", - "integrity": "sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA==", - "dev": true, - "requires": { - "mime": "^1.4.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.0", - "postcss": "^6.0.1", - "xxhashjs": "^0.2.1" + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" } }, "postcss-value-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", - "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", "dev": true }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -7701,9 +8916,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "promise": { @@ -7722,16 +8937,43 @@ "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", "dev": true }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, "protractor": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.2.tgz", - "integrity": "sha512-pw4uwwiy5lHZjIguxNpkEwJJa7hVz+bJsvaTI+IbXlfn2qXwzbF8eghW/RmrZwE2sGx82I8etb8lVjQ+JrjejA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz", + "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", "dev": true, "requires": { - "@types/node": "^6.0.46", "@types/q": "^0.0.32", - "@types/selenium-webdriver": "~2.53.39", + "@types/selenium-webdriver": "^3.0.0", "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", "chalk": "^1.1.3", "glob": "^7.0.3", "jasmine": "2.8.0", @@ -7741,22 +8983,10 @@ "saucelabs": "^1.5.0", "selenium-webdriver": "3.6.0", "source-map-support": "~0.4.0", - "webdriver-js-extender": "^1.0.0", + "webdriver-js-extender": "2.1.0", "webdriver-manager": "^12.0.6" }, "dependencies": { - "@types/node": { - "version": "6.0.112", - "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.112.tgz", - "integrity": "sha512-HnekQWq9t3Gl5aBYYi8sGyOWm85M5ub2llMrpQkRY94eJEUhsUr8qYNaeefv22cxxm+D67a+5zIzpl+dpFxdjQ==", - "dev": true - }, - "adm-zip": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz", - "integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==", - "dev": true - }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", @@ -7805,18 +9035,48 @@ "pinkie-promise": "^2.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", "dev": true }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", @@ -7833,19 +9093,19 @@ "dev": true }, "webdriver-manager": { - "version": "12.0.6", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.0.6.tgz", - "integrity": "sha1-PfGkgZdwELTL+MnYXHpXeCjA5ws=", + "version": "12.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", "dev": true, "requires": { - "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" @@ -7854,13 +9114,13 @@ } }, "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.6.0" + "ipaddr.js": "1.9.0" } }, "prr": { @@ -7875,23 +9135,30 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", "dev": true }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", "create-hash": "^1.1.0", "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1" + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -7907,13 +9174,24 @@ "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "q": { "version": "1.4.1", @@ -7933,6 +9211,16 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -7946,34 +9234,15 @@ "dev": true }, "querystringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", - "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, - "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" @@ -7990,55 +9259,53 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + } + } + }, + "raw-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz", + "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", "dev": true, "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": ">= 1.3.1 < 2" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true } } }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", - "dev": true - }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -8056,65 +9323,28 @@ } } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "read-package-json": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz", + "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" } }, "readable-stream": { @@ -8132,32 +9362,31 @@ "util-deprecate": "~1.0.1" } }, - "readdirp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", - "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "dev": true, "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", "graceful-fs": "^4.1.2", - "minimatch": "^3.0.2", - "readable-stream": "^2.0.2", - "set-immediate-shim": "^1.0.1" + "once": "^1.3.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "readdirp": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.1.3.tgz", + "integrity": "sha512-ZOsfTGkjO2kqeR5Mzr5RYDbTGYneSkdNKX2fOX2P5jF7vMrd/GNnIAUtDldeHHumHUCQ3V05YfWUdxMPAsRu9Q==", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "picomatch": "^2.0.4" } }, "reflect-metadata": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", - "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", "dev": true }, "regenerate": { @@ -8166,19 +9395,28 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", "dev": true, "requires": { - "is-equal-shallow": "^0.1.3" + "private": "^0.1.6" } }, "regex-not": { @@ -8191,27 +9429,39 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", + "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -8225,43 +9475,16 @@ } } }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "renderkid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", - "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", - "dev": true, - "requires": { - "css-select": "^1.1.0", - "dom-converter": "~0.1", - "htmlparser2": "~3.3.0", - "strip-ansi": "^3.0.0", - "utila": "~0.3" - }, - "dependencies": { - "utila": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", - "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", - "dev": true - } - } - }, "repeat-element": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true }, "repeat-string": { @@ -8280,31 +9503,31 @@ } }, "request": { - "version": "2.87.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", - "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "dev": true, "requires": { "aws-sign2": "~0.7.0", - "aws4": "^1.6.0", + "aws4": "^1.8.0", "caseless": "~0.12.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.1", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", "forever-agent": "~0.6.1", - "form-data": "~2.3.1", - "har-validator": "~5.0.3", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", "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", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", "performance-now": "^2.1.0", - "qs": "~6.5.1", - "safe-buffer": "^5.1.1", - "tough-cookie": "~2.3.3", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", "tunnel-agent": "^0.6.0", - "uuid": "^3.1.0" + "uuid": "^3.3.2" } }, "require-directory": { @@ -8313,12 +9536,6 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", - "dev": true - }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -8332,12 +9549,12 @@ "dev": true }, "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "dev": true, "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-cwd": { @@ -8361,6 +9578,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -8368,28 +9595,24 @@ "dev": true }, "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", - "dev": true, - "optional": true, - "requires": { - "align-text": "^0.1.1" - } + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { @@ -8402,6 +9625,15 @@ "inherits": "^2.0.1" } }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, "run-queue": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", @@ -8412,9 +9644,9 @@ } }, "rxjs": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.0.tgz", - "integrity": "sha512-qBzf5uu6eOKiCZuAE0SgZ0/Qp+l54oeVxFfC2t+mJ2SFI6IB8gmMdJHs5DUMu5kqifqcCtsKS2XHjhZu6RKvAw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", "requires": { "tslib": "^1.9.0" } @@ -8440,80 +9672,34 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "sass": { + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.9.tgz", + "integrity": "sha512-FzU1X2V8DlnqabrL4u7OBwD2vcOzNMongEJEx3xMEhWY/v26FFR3aG0hyeu2T965sfR0E9ufJwmG+Qjz78vFPQ==", "dev": true, - "optional": true, "requires": { - "glob": "^7.0.0", - "lodash": "^4.0.0", - "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true, - "optional": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "optional": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - } + "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.0.3.tgz", - "integrity": "sha512-iaSFtQcGo4SSgDw5Aes5p4VTrA5jCGSA7sGmhPIcOloBlgI1VktM2MUrk2IHHjbNagckXlPz+HWq1vAAPrcYxA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", + "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", "dev": true, "requires": { - "clone-deep": "^2.0.1", + "clone-deep": "^4.0.1", "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", "neo-async": "^2.5.0", - "pify": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "saucelabs": { @@ -8532,38 +9718,16 @@ "dev": true }, "schema-utils": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.5.tgz", - "integrity": "sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", "ajv-keywords": "^3.1.0" } }, - "scss-tokenizer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", - "dev": true, - "optional": true, - "requires": { - "js-base64": "^2.1.8", - "source-map": "^0.4.2" - }, - "dependencies": { - "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", @@ -8594,18 +9758,18 @@ } }, "selfsigned": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", - "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "0.9.0" } }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "semver-dsl": { @@ -8615,21 +9779,37 @@ "dev": true, "requires": { "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "semver-intersect": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.3.1.tgz", - "integrity": "sha1-j6hKnhAovSOeRTDRo+GB5pjYhLo=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", "dev": true, "requires": { "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } } }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -8639,26 +9819,43 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "dependencies": { - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serialize-javascript": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", - "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", "dev": true }, "serve-index": { @@ -8674,18 +9871,59 @@ "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.17.1" } }, "set-blocking": { @@ -8701,9 +9939,9 @@ "dev": true }, "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { "extend-shallow": "^2.0.1", @@ -8730,9 +9968,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -8746,22 +9984,12 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -8785,25 +10013,16 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, - "silent-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/silent-error/-/silent-error-1.1.0.tgz", - "integrity": "sha1-IglwbxyFCp8dENDYQJGLRvJuG8k=", - "dev": true, - "requires": { - "debug": "^2.2.0" - } - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", "dev": true }, "snapdragon": { @@ -8822,6 +10041,15 @@ "use": "^3.1.0" }, "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", @@ -8839,6 +10067,18 @@ "requires": { "is-extendable": "^0.1.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -8913,153 +10153,124 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "socket.io": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", - "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "2.3.3", - "engine.io": "1.8.3", - "has-binary": "0.1.7", - "object-assign": "4.1.0", - "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.3", - "socket.io-parser": "2.3.1" + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "object-assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "socket.io-adapter": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-0.5.0.tgz", - "integrity": "sha1-y21LuL7IHhB4uZZ3+c7QBGBmu4s=", - "dev": true, - "requires": { - "debug": "2.3.3", - "socket.io-parser": "2.3.1" - }, - "dependencies": { - "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - } - } + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", + "integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=", + "dev": true }, "socket.io-client": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", - "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", "dev": true, "requires": { "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "2.3.3", - "engine.io-client": "1.8.3", - "has-binary": "0.1.7", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", + "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "2.3.1", + "socket.io-parser": "~3.2.0", "to-array": "0.1.4" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", - "integrity": "sha1-QMRT5n5uE8kB3ewxeviYbNqe/4w=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } }, "socket.io-parser": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-2.3.1.tgz", - "integrity": "sha1-3VMgJRA85Clpcya+/WQAX8/ltKA=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", "dev": true, "requires": { - "component-emitter": "1.1.2", - "debug": "2.2.0", - "isarray": "0.0.1", - "json3": "3.3.2" + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" }, "dependencies": { "component-emitter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.1.2.tgz", - "integrity": "sha1-KWWU8nU9qmOZbSrwjRWpURbJrsM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true }, "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "ms": "0.7.1" + "ms": "2.0.0" } }, "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", "dev": true }, "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -9075,23 +10286,32 @@ } }, "sockjs-client": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.4.tgz", - "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", + "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", "json3": "^3.3.2", - "url-parse": "^1.1.8" + "url-parse": "^1.4.3" }, "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -9099,17 +10319,66 @@ } } }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, "source-list-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", - "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "dev": true, + "requires": { + "async": "^2.5.0", + "loader-utils": "^1.1.0" + } }, "source-map-resolve": { "version": "0.5.2", @@ -9125,9 +10394,9 @@ } }, "source-map-support": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", - "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -9148,10 +10417,15 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==" + }, "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -9159,9 +10433,9 @@ } }, "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", "dev": true }, "spdx-expression-parse": { @@ -9175,38 +10449,58 @@ } }, "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "spdy": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", - "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", "dev": true, "requires": { - "debug": "^2.6.8", - "handle-thing": "^1.2.5", + "debug": "^4.1.0", + "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", - "safe-buffer": "^5.0.1", "select-hose": "^2.0.0", - "spdy-transport": "^2.0.18" + "spdy-transport": "^3.0.0" } }, "spdy-transport": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", - "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "^2.6.8", - "detect-node": "^2.0.3", + "debug": "^4.1.0", + "detect-node": "^2.0.4", "hpack.js": "^2.1.6", - "obuf": "^1.1.1", - "readable-stream": "^2.2.9", - "safe-buffer": "^5.0.1", - "wbuf": "^1.7.2" + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1" } }, "split-string": { @@ -9225,9 +10519,9 @@ "dev": true }, "sshpk": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", - "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -9242,12 +10536,12 @@ } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "static-extend": { @@ -9271,35 +10565,16 @@ } } }, - "stats-webpack-plugin": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/stats-webpack-plugin/-/stats-webpack-plugin-0.6.2.tgz", - "integrity": "sha1-LFlJtTHgf4eojm6k3PrFOqjHWis=", - "dev": true, - "requires": { - "lodash": "^4.17.4" - } - }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, - "stdout-stream": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", - "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, "stream-browserify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", - "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { "inherits": "~2.0.1", @@ -9307,9 +10582,9 @@ } }, "stream-each": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", - "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -9335,15 +10610,81 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" } }, "string_decoder": { @@ -9355,12 +10696,6 @@ "safe-buffer": "~5.1.0" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -9371,13 +10706,10 @@ } }, "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true }, "strip-eof": { "version": "1.0.0", @@ -9385,23 +10717,26 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, "style-loader": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.21.0.tgz", - "integrity": "sha512-T+UNsAcl3Yg+BsPKs1vd22Fr8sVT+CJMtzqc6LEw9bbJZb43lm9GoeIfUcDEefBSWC0BhYbcdupV1GtI4DGzxg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5" + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.4.1.tgz", + "integrity": "sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } } }, "stylus": { @@ -9455,9 +10790,9 @@ } }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -9470,21 +10805,79 @@ "dev": true }, "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "terser": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.4.tgz", + "integrity": "sha512-+ZwXJvdSwbd60jG0Illav0F06GDJF0R4ydZ21Q3wGAFKoBGyJGo34F63vzJHgvYxc1ukOtIjvwEvl9MkjzM6Pg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", "dev": true, - "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "through": { @@ -9494,37 +10887,37 @@ "dev": true }, "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "^2.1.5", + "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "thunky": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", - "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", + "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" } }, "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "~1.0.2" } }, "to-array": { @@ -9540,9 +10933,9 @@ "dev": true }, "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "to-object-path": { @@ -9578,27 +10971,27 @@ } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "dev": true, "requires": { + "psl": "^1.1.24", "punycode": "^1.4.1" }, "dependencies": { @@ -9611,15 +11004,9 @@ } }, "tree-kill": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", "dev": true }, "trim-right": { @@ -9628,102 +11015,31 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "true-case-path": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", - "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", - "dev": true, - "optional": true, - "requires": { - "glob": "^6.0.4" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "optional": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, "ts-node": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-5.0.1.tgz", - "integrity": "sha512-XK7QmDcNHVmZkVtkiwNDWiERRHPyU8nBqZB1+iv2UhOG0q3RQ9HsZ2CMqISlFbxjrYFGfG2mX7bW4dAyxBVzUw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", "dev": true, "requires": { "arrify": "^1.0.0", - "chalk": "^2.3.0", + "buffer-from": "^1.1.0", "diff": "^3.1.0", "make-error": "^1.1.1", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", + "source-map-support": "^0.5.6", "yn": "^2.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, - "tsickle": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.29.0.tgz", - "integrity": "sha512-JpID0Lv8/irRtPmqJJxb5fCwfZhjZeKmav9Zna7UjqVuJoSbI49Wue/c2PPybX1SbRrjl7bbI/JsCl0dSUJygA==", - "dev": true, - "requires": { - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "source-map": "^0.6.0", - "source-map-support": "^0.5.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "tslib": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", - "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tslint": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.9.1.tgz", - "integrity": "sha1-ElX4ej/1frCw4fDmEKi0dIBGya4=", + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.15.0.tgz", + "integrity": "sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", @@ -9732,31 +11048,27 @@ "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", - "js-yaml": "^3.7.0", + "js-yaml": "^3.13.0", "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", "resolve": "^1.3.2", "semver": "^5.3.0", "tslib": "^1.8.0", - "tsutils": "^2.12.1" + "tsutils": "^2.29.0" }, "dependencies": { - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, "tsutils": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", - "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -9781,26 +11093,22 @@ "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true + "dev": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -9810,18 +11118,19 @@ "dev": true }, "typescript": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", - "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", "dev": true }, "uglify-js": { - "version": "3.3.28", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.28.tgz", - "integrity": "sha512-68Rc/aA6cswiaQ5SrE979UJcXX+ADA1z33/ZsPd+fbAiVdjZ16OXdbtGO+rJUUBgK6qdf3SOPhQf3K/ybF5Miw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, + "optional": true, "requires": { - "commander": "~2.15.0", + "commander": "~2.20.0", "source-map": "~0.6.1" }, "dependencies": { @@ -9829,116 +11138,103 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "optional": true } } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", - "dev": true, - "optional": true + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true }, - "uglifyjs-webpack-plugin": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", - "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "requires": { - "cacache": "^10.0.4", - "find-cache-dir": "^1.0.0", - "schema-utils": "^0.4.5", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "uglify-es": "^3.3.4", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - } - } + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" } }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", "dev": true }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-filename": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", - "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { "unique-slug": "^2.0.0" } }, "unique-slug": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", - "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, "requires": { "imurmurhash": "^0.1.4" } }, + "universal-analytics": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", + "integrity": "sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw==", + "dev": true, + "requires": { + "debug": "^3.0.0", + "request": "^2.88.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -9986,22 +11282,15 @@ } }, "upath": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", - "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, "uri-js": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", - "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", - "dev": true, + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { "punycode": "^2.1.0" } @@ -10030,49 +11319,21 @@ } } }, - "url-join": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", - "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", - "dev": true - }, - "url-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.0.1.tgz", - "integrity": "sha512-rAonpHy7231fmweBKUFe0bYnlGDty77E+fm53NZdij7j/YOpyGzc7ttqG1nAXl3aRs0k41o0PC3TvGXQiw2Zvw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^0.4.3" - }, - "dependencies": { - "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", - "dev": true - } - } - }, "url-parse": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.1.tgz", - "integrity": "sha512-x95Td74QcvICAA0+qERaVkRpTGKyBHHYdwL2LXZm5t/gBtCB9KQSO/0zQgSTYEV1p0WcvSg79TLNPSvd5IDJMQ==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, "use": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", - "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "useragent": { "version": "2.3.0", @@ -10082,15 +11343,41 @@ "requires": { "lru-cache": "4.1.x", "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } } }, "util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "util-deprecate": { @@ -10099,6 +11386,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", @@ -10109,12 +11405,6 @@ "object.getownpropertydescriptors": "^2.0.3" } }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -10122,15 +11412,15 @@ "dev": true }, "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -10164,13 +11454,10 @@ } }, "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true }, "void-elements": { "version": "2.0.1", @@ -10187,6 +11474,690 @@ "chokidar": "^2.0.2", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "wbuf": { @@ -10198,94 +12169,45 @@ "minimalistic-assert": "^1.0.0" } }, - "webassemblyjs": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webassemblyjs/-/webassemblyjs-1.4.3.tgz", - "integrity": "sha512-4lOV1Lv6olz0PJkDGQEp82HempAn147e6BXijWDzz9g7/2nSebVP9GVg62Fz5ZAs55mxq13GA0XLyvY8XkyDjg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/validation": "1.4.3", - "@webassemblyjs/wasm-parser": "1.4.3", - "@webassemblyjs/wast-parser": "1.4.3", - "long": "^3.2.0" - } - }, "webdriver-js-extender": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz", - "integrity": "sha1-gcUzqeM9W/tZe05j4s2yW1R3dRU=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", "dev": true, "requires": { - "@types/selenium-webdriver": "^2.53.35", - "selenium-webdriver": "^2.53.2" - }, - "dependencies": { - "sax": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.6.1.tgz", - "integrity": "sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=", - "dev": true - }, - "selenium-webdriver": { - "version": "2.53.3", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz", - "integrity": "sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=", - "dev": true, - "requires": { - "adm-zip": "0.4.4", - "rimraf": "^2.2.8", - "tmp": "0.0.24", - "ws": "^1.0.1", - "xml2js": "0.4.4" - } - }, - "tmp": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", - "integrity": "sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=", - "dev": true - }, - "xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=", - "dev": true, - "requires": { - "sax": "0.6.x", - "xmlbuilder": ">=1.0.0" - } - } + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" } }, "webpack": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.8.3.tgz", - "integrity": "sha512-/hfAjBISycdK597lxONjKEFX7dSIU1PsYwC3XlXUXoykWBlv9QV5HnO+ql3HvrrgfBJ7WXdnjO9iGPR2aAc5sw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.4.3", - "@webassemblyjs/wasm-edit": "1.4.3", - "@webassemblyjs/wasm-parser": "1.4.3", - "acorn": "^5.0.0", - "acorn-dynamic-import": "^3.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^0.1.1", - "enhanced-resolve": "^4.0.0", - "eslint-scope": "^3.7.1", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^0.4.4", - "tapable": "^1.0.0", - "uglifyjs-webpack-plugin": "^1.2.4", - "watchpack": "^1.5.0", - "webpack-sources": "^1.0.1" + "version": "4.39.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.2.tgz", + "integrity": "sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" } }, "webpack-core": { @@ -10316,213 +12238,782 @@ } }, "webpack-dev-middleware": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz", - "integrity": "sha512-I6Mmy/QjWU/kXwCSFGaiOoL5YEQIVmbb0o45xMoCyQAg/mClqZVTcsX327sPfekDyJWpCxb+04whNyLOIxpJdQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", + "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", "dev": true, "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.1.0", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "url-join": "^4.0.0", - "webpack-log": "^1.0.1" + "memory-fs": "^0.4.1", + "mime": "^2.4.2", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" }, "dependencies": { "mime": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", - "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.4.tgz", - "integrity": "sha512-itcIUDFkHuj1/QQxzUFOEXXmxOj5bku2ScLEsOFPapnq2JRTm58gPdtnBphBJOKL2+M3p6+xygL64bI+3eyzzw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.8.0.tgz", + "integrity": "sha512-Hs8K9yI6pyMvGkaPTeTonhD6JXVsigXDApYk9JLW4M7viVBspQvb1WdAcWxqtmttxNW4zf2UFLsLNe0y87pIGQ==", "dev": true, "requires": { "ansi-html": "0.0.7", - "array-includes": "^3.0.3", "bonjour": "^3.5.0", - "chokidar": "^2.0.0", - "compression": "^1.5.2", - "connect-history-api-fallback": "^1.3.0", - "debug": "^3.1.0", - "del": "^3.0.0", - "express": "^4.16.2", - "html-entities": "^1.2.0", - "http-proxy-middleware": "~0.18.0", - "import-local": "^1.0.0", - "internal-ip": "1.2.0", + "chokidar": "^2.1.6", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "^0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", "ip": "^1.1.5", - "killable": "^1.0.0", - "loglevel": "^1.4.1", - "opn": "^5.1.0", - "portfinder": "^1.0.9", - "selfsigned": "^1.9.1", - "serve-index": "^1.7.2", + "is-absolute-url": "^3.0.0", + "killable": "^1.0.1", + "loglevel": "^1.6.3", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.21", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.4", + "semver": "^6.3.0", + "serve-index": "^1.9.1", "sockjs": "0.3.19", - "sockjs-client": "1.1.4", - "spdy": "^3.4.1", - "strip-ansi": "^3.0.0", - "supports-color": "^5.1.0", - "webpack-dev-middleware": "3.1.3", - "webpack-log": "^1.1.2", - "yargs": "11.0.0" + "sockjs-client": "1.3.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.0", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, + "optional": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.3.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, "dev": true, + "optional": true, "requires": { - "ansi-regex": "^3.0.0" + "string-width": "^1.0.2 || 2" } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true } } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "ms": "2.0.0" + "binary-extensions": "^1.0.0" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "kind-of": "^3.0.2" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "is-buffer": "^1.1.5" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } }, - "yargs": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", - "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.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", - "yargs-parser": "^9.0.2" + "has-flag": "^3.0.0" } }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "camelcase": "^4.1.0" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } }, "webpack-log": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", - "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "loglevelnext": "^1.0.1", - "uuid": "^3.1.0" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-merge": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.2.tgz", - "integrity": "sha512-/0QYwW/H1N/CdXYA2PNPVbsxO3u2Fpz34vs72xm03SRfg6bMNGfMJIQEpQjKRvkG2JvT6oRJFpDtSrwbX8Jzvw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "dev": true, "requires": { "lodash": "^4.17.5" } }, "webpack-sources": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", - "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", @@ -10538,21 +13029,22 @@ } }, "webpack-subresource-integrity": { - "version": "1.1.0-rc.4", - "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.4.tgz", - "integrity": "sha1-xcTj1pD50vZKlVDgeodn+Xlqpdg=", + "version": "1.1.0-rc.6", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz", + "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", "dev": true, "requires": { "webpack-core": "^0.6.8" } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0", + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -10578,43 +13070,35 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", - "dev": true, - "optional": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" } }, + "worker-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-3.2.0.tgz", + "integrity": "sha512-W5nRkw7+HlbsEt3qRP6MczwDDISjiRj2GYt9+bpe8A2La00TmJdwzG5bpdMXhRt1qcWmwAvl1TiKaHRa+XDS9Q==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, "wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", @@ -10623,6 +13107,28 @@ "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } } }, "wrappy": { @@ -10632,29 +13138,23 @@ "dev": true }, "ws": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", - "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" + "async-limiter": "~1.0.0" } }, - "wtf-8": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wtf-8/-/wtf-8-1.0.0.tgz", - "integrity": "sha1-OS2LotDxw00e4tYw8V0O+2jhBIo=", - "dev": true - }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", "dev": true, "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" }, "dependencies": { "sax": { @@ -10666,32 +13166,23 @@ } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "xmlhttprequest-ssl": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz", - "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0=", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", "dev": true }, "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, - "xxhashjs": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", - "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", - "dev": true, - "requires": { - "cuint": "^0.2.2" - } - }, "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", @@ -10699,41 +13190,39 @@ "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, - "optional": true, "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, - "optional": true, "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "optional": true - } + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, "yeast": { @@ -10749,9 +13238,9 @@ "dev": true }, "zone.js": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", - "integrity": "sha512-W9Nj+UmBJG251wkCacIkETgra4QgBo/vgoEkb4a2uoLzpQG7qF9nzwoLXWU5xj3Fg2mxGvEDh47mg24vXccYjA==" + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.9.1.tgz", + "integrity": "sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag==" } } } diff --git a/client/package.json b/client/package.json index 1627439..0ab6ca9 100644 --- a/client/package.json +++ b/client/package.json @@ -11,46 +11,48 @@ }, "private": true, "dependencies": { - "@angular/animations": "^6.0.5", - "@angular/cdk": "^6.2.1", - "@angular/common": "^6.0.3", - "@angular/compiler": "^6.0.3", - "@angular/core": "^6.0.3", - "@angular/forms": "^6.0.3", - "@angular/http": "^6.0.3", - "@angular/material": "^6.2.1", - "@angular/platform-browser": "^6.0.3", - "@angular/platform-browser-dynamic": "^6.0.3", - "@angular/router": "^6.0.3", - "@ngrx/effects": "^6.0.1", - "@ngrx/entity": "^6.0.1", - "@ngrx/store": "^6.0.1", - "core-js": "^2.5.4", + "@angular/animations": "~8.2.9", + "@angular/cdk": "^8.2.2", + "@angular/common": "~8.2.9", + "@angular/compiler": "~8.2.9", + "@angular/core": "~8.2.9", + "@angular/forms": "~8.2.9", + "@angular/http": "^7.2.15", + "@angular/material": "^8.2.2", + "@angular/platform-browser": "~8.2.9", + "@angular/platform-browser-dynamic": "~8.2.9", + "@angular/pwa": "^0.803.8", + "@angular/router": "~8.2.9", + "@angular/service-worker": "~8.2.9", + "@ngrx/effects": "^8.3.0", + "@ngrx/entity": "^8.3.0", + "@ngrx/store": "^8.3.0", "hammerjs": "^2.0.8", - "rxjs": "^6.0.0", - "zone.js": "^0.8.26" + "rxjs": "~6.4.0", + "tslib": "^1.10.0", + "zone.js": "~0.9.1" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.6.8", - "@angular/cli": "~6.0.8", - "@angular/compiler-cli": "^6.0.3", - "@angular/language-service": "^6.0.3", - "@ngrx/schematics": "^6.0.1", - "@ngrx/store-devtools": "^6.0.1", - "@types/jasmine": "~2.8.6", + "@angular-devkit/build-angular": "~0.803.7", + "@angular/cli": "~8.3.7", + "@angular/compiler-cli": "~8.2.9", + "@angular/language-service": "~8.2.9", + "@ngrx/schematics": "^8.3.0", + "@ngrx/store-devtools": "^8.3.0", + "@types/jasmine": "~3.3.8", "@types/jasminewd2": "~2.0.3", "@types/node": "~8.9.4", - "codelyzer": "~4.2.1", - "jasmine-core": "~2.99.1", + "codelyzer": "^5.0.0", + "jasmine-core": "~3.4.0", "jasmine-spec-reporter": "~4.2.1", - "karma": "~1.7.1", + "karma": "~4.1.0", "karma-chrome-launcher": "~2.2.0", - "karma-coverage-istanbul-reporter": "~2.0.0", - "karma-jasmine": "~1.1.1", - "karma-jasmine-html-reporter": "^0.2.2", - "protractor": "~5.3.0", - "ts-node": "~5.0.1", - "tslint": "~5.9.1", - "typescript": "~2.7.2" + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~2.0.1", + "karma-jasmine-html-reporter": "^1.4.0", + "protractor": "~5.4.0", + "ts-node": "~7.0.0", + "tslint": "~5.15.0", + "typescript": "~3.5.3" } } diff --git a/client/src/app/app-routing.module.ts b/client/src/app/app-routing.module.ts index f05f33b..33e2bd5 100644 --- a/client/src/app/app-routing.module.ts +++ b/client/src/app/app-routing.module.ts @@ -2,8 +2,7 @@ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; const routes: Routes = [ - { path: '', redirectTo: 'users', pathMatch: 'full' }, - { path: 'users', loadChildren: './users/users.module#UsersModule' }, + { path: '', loadChildren: './modules/users/users.module#UsersModule' }, ]; @NgModule({ diff --git a/client/src/app/app.component.spec.ts b/client/src/app/app.component.spec.ts index 31eb30a..caa6302 100644 --- a/client/src/app/app.component.spec.ts +++ b/client/src/app/app.component.spec.ts @@ -1,23 +1,22 @@ import { TestBed, async } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; - import { AppComponent } from './app.component'; describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ - RouterTestingModule, + RouterTestingModule ], declarations: [ - AppComponent, + AppComponent ], }).compileComponents(); })); - it('should create the app', async(() => { + it('should create the app', () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); - })); + }); }); diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index 6f5a0a5..965197e 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; @Component({ - selector: 'client-root', + selector: 'assp-root', template: ` `, diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index 94d5317..e75abc8 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -1,14 +1,21 @@ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; +import { HttpClientModule } from '@angular/common/http'; + +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { StoreModule } from '@ngrx/store'; import { reducers, metaReducers } from './reducers'; +import { EffectsModule } from '@ngrx/effects'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; +import { MaterialModule } from './modules/material/material.module'; + import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { environment } from '../environments/environment'; +import { ServiceWorkerModule } from '@angular/service-worker'; @NgModule({ declarations: [ @@ -17,8 +24,13 @@ import { environment } from '../environments/environment'; imports: [ BrowserModule, AppRoutingModule, + HttpClientModule, + BrowserAnimationsModule, + MaterialModule, StoreModule.forRoot(reducers, { metaReducers }), - !environment.production ? StoreDevtoolsModule.instrument() : [], + StoreDevtoolsModule.instrument({ maxAge: 25, logOnly: environment.production }), + EffectsModule.forRoot([]), + ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }), ], providers: [], bootstrap: [AppComponent] diff --git a/client/src/app/modules/material/material.module.ts b/client/src/app/modules/material/material.module.ts new file mode 100644 index 0000000..7b98d4d --- /dev/null +++ b/client/src/app/modules/material/material.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { LayoutModule } from '@angular/cdk/layout'; +import { + MatCardModule, + MatProgressSpinnerModule, +} from '@angular/material'; + +@NgModule({ + declarations: [], + imports: [ + CommonModule, + LayoutModule, + MatCardModule, + MatProgressSpinnerModule, + ], + exports: [ + LayoutModule, + MatCardModule, + MatProgressSpinnerModule, + ], +}) +export class MaterialModule { } diff --git a/client/src/app/modules/users/actions/user.actions.ts b/client/src/app/modules/users/actions/user.actions.ts new file mode 100644 index 0000000..bf2ca41 --- /dev/null +++ b/client/src/app/modules/users/actions/user.actions.ts @@ -0,0 +1,17 @@ +import { createAction, props } from '@ngrx/store'; + +import { UsersResponse, User } from '../models/user.model'; + +export const fetchUsers = createAction( + '[Users Page] Fetch Users', +); + +export const fetchUsersSuccess = createAction( + '[Users Page] Fetch Users Success', + props<{ payload: UsersResponse }>(), +); + +export const fetchUsersFailed = createAction( + '[Users Page] Fetch Users Failed', + props<{ error: any }>(), +); diff --git a/client/src/app/modules/users/components/users-list/users-list.component.html b/client/src/app/modules/users/components/users-list/users-list.component.html new file mode 100644 index 0000000..4b6770e --- /dev/null +++ b/client/src/app/modules/users/components/users-list/users-list.component.html @@ -0,0 +1,16 @@ + + + +
+ + + {{ user.name }} + + +

Age: {{ user.age }}

+

Email: {{ user.email }}

+ + +

diff --git a/client/src/app/users/components/users-list/users-list.component.scss b/client/src/app/modules/users/components/users-list/users-list.component.scss similarity index 54% rename from client/src/app/users/components/users-list/users-list.component.scss rename to client/src/app/modules/users/components/users-list/users-list.component.scss index 5f199fa..6a0e49b 100644 --- a/client/src/app/users/components/users-list/users-list.component.scss +++ b/client/src/app/modules/users/components/users-list/users-list.component.scss @@ -1,5 +1,4 @@ mat-card { - width: 300px; - margin: 10px; display: inline-block; + margin: 1%; } diff --git a/client/src/app/users/components/users-list/users-list.component.spec.ts b/client/src/app/modules/users/components/users-list/users-list.component.spec.ts similarity index 68% rename from client/src/app/users/components/users-list/users-list.component.spec.ts rename to client/src/app/modules/users/components/users-list/users-list.component.spec.ts index 23d8c11..e33e0aa 100644 --- a/client/src/app/users/components/users-list/users-list.component.spec.ts +++ b/client/src/app/modules/users/components/users-list/users-list.component.spec.ts @@ -1,14 +1,20 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { StoreModule } from '@ngrx/store'; import { UsersListComponent } from './users-list.component'; +import { reducers } from '../../reducers'; describe('UsersListComponent', () => { let component: UsersListComponent; let fixture: ComponentFixture; + beforeEach(async(() => { TestBed.configureTestingModule({ - declarations: [ UsersListComponent ] + declarations: [ UsersListComponent ], + imports: [ StoreModule.forRoot(reducers) ], + schemas: [ CUSTOM_ELEMENTS_SCHEMA ], }) .compileComponents(); })); diff --git a/client/src/app/modules/users/components/users-list/users-list.component.ts b/client/src/app/modules/users/components/users-list/users-list.component.ts new file mode 100644 index 0000000..3f23dcc --- /dev/null +++ b/client/src/app/modules/users/components/users-list/users-list.component.ts @@ -0,0 +1,41 @@ +import { Subject } from 'rxjs'; +import { Store, select } from '@ngrx/store'; +import { Component, OnInit, OnDestroy } from '@angular/core'; + +import * as UserActions from '../../actions/user.actions'; +import { User } from '../../models/user.model'; +import * as fromUsers from '../../reducers'; + +@Component({ + selector: 'assp-users-list', + templateUrl: './users-list.component.html', + styleUrls: ['./users-list.component.scss'] +}) +export class UsersListComponent implements OnInit, OnDestroy { + showSpinner = true; + allUsers: Array; + usersState$; + + constructor( + private store: Store, + ) { } + + ngOnInit() { + this.store.dispatch(UserActions.fetchUsers()); + + this.usersState$ = this.store.pipe(select(fromUsers.getUsers)) + .subscribe((state: any) => { + this.allUsers = state.users; + + // Stop spinner if there is any data. + if (this.allUsers && this.allUsers.length >= 1) { + this.showSpinner = false; + } + }); + } + + ngOnDestroy() { + this.usersState$.unsubscribe(); + } + +} diff --git a/client/src/app/modules/users/effects/user.effects.ts b/client/src/app/modules/users/effects/user.effects.ts new file mode 100644 index 0000000..f3b674c --- /dev/null +++ b/client/src/app/modules/users/effects/user.effects.ts @@ -0,0 +1,32 @@ +import { of } from 'rxjs'; +import { Injectable } from '@angular/core'; +import { map, catchError, exhaustMap, tap } from 'rxjs/operators'; +import { Actions, Effect, ofType, createEffect } from '@ngrx/effects'; + +import { + fetchUsers, fetchUsersSuccess, fetchUsersFailed, +} from '../actions/user.actions'; +import { UserService } from '../services/user.service'; + + +@Injectable() +export class UserEffects { + + loadAllusers$ = createEffect(() => + this.actions$.pipe( + ofType(fetchUsers), + exhaustMap(action => + this.userService.getUsers().pipe( + map(data => fetchUsersSuccess({payload: data})), + catchError(error => of(fetchUsersFailed({error}))) + ) + ) + ) + ); + + constructor( + private actions$: Actions, + private userService: UserService, + ) {} + +} diff --git a/client/src/app/users/models/user.model.ts b/client/src/app/modules/users/models/user.model.ts similarity index 78% rename from client/src/app/users/models/user.model.ts rename to client/src/app/modules/users/models/user.model.ts index 70586d7..ce4eb0d 100644 --- a/client/src/app/users/models/user.model.ts +++ b/client/src/app/modules/users/models/user.model.ts @@ -1,10 +1,10 @@ export interface User { + _id?: number; + name: string; age: string; - date_joined: number; - dirty_fields?: Array; email: string; - id: number; - name: string; + date_joined: number; + dirty_fields: Array; } export interface UsersResponse { diff --git a/client/src/app/modules/users/reducers/index.ts b/client/src/app/modules/users/reducers/index.ts new file mode 100644 index 0000000..6afc7d9 --- /dev/null +++ b/client/src/app/modules/users/reducers/index.ts @@ -0,0 +1,30 @@ +import { + ActionReducer, + ActionReducerMap, + createFeatureSelector, + createSelector, + MetaReducer, +} from '@ngrx/store'; +import { environment } from '../../../../environments/environment'; +import * as fromUser from './user.reducer'; + +export interface State { + users: fromUser.State; +} + +export const reducers: ActionReducerMap = { + users: fromUser.reducer, +}; + + +export const metaReducers: MetaReducer[] = !environment.production ? [] : []; + +/** + * Layout Reducers + */ +export const getUsrsState = createFeatureSelector('users'); + +export const getUsers = createSelector( + getUsrsState, + (state: fromUser.State) => state.users +); diff --git a/client/src/app/modules/users/reducers/user.reducer.ts b/client/src/app/modules/users/reducers/user.reducer.ts new file mode 100644 index 0000000..ca65529 --- /dev/null +++ b/client/src/app/modules/users/reducers/user.reducer.ts @@ -0,0 +1,29 @@ +import { Action, createReducer, on } from '@ngrx/store'; + +import { UsersResponse } from '../models/user.model'; +import * as UserActions from '../actions/user.actions'; + + +export type State = UsersResponse; + +export const initialState: State = { + _message: '', + users: [{ + _id: 1, + name: '', + age: '', + email: '', + date_joined: 12, + dirty_fields: [], + }] +}; + +const userReducer = createReducer( + initialState, + on(UserActions.fetchUsers, (state, action) => ({ ...state })), + on(UserActions.fetchUsersSuccess, (state, action) => action.payload ), +); + +export function reducer(state: State | undefined, action: Action) { + return userReducer(state, action); +} diff --git a/client/src/app/modules/users/services/user.service.spec.ts b/client/src/app/modules/users/services/user.service.spec.ts new file mode 100644 index 0000000..7ab2e6c --- /dev/null +++ b/client/src/app/modules/users/services/user.service.spec.ts @@ -0,0 +1,31 @@ +import { TestBed, getTestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +import { UserService } from './user.service'; + +describe('UserService', () => { + let injector: TestBed; + let service: UserService; + let httpMock: HttpTestingController; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [ + HttpClientTestingModule, + ], + providers: [ UserService ], + }); + + injector = getTestBed(); + service = injector.get(UserService); + httpMock = injector.get(HttpTestingController); + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/client/src/app/users/services/users.service.ts b/client/src/app/modules/users/services/user.service.ts similarity index 60% rename from client/src/app/users/services/users.service.ts rename to client/src/app/modules/users/services/user.service.ts index efb8c12..1f70d73 100644 --- a/client/src/app/users/services/users.service.ts +++ b/client/src/app/modules/users/services/user.service.ts @@ -1,21 +1,20 @@ -import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; +import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { UsersResponse } from '../models/user.model'; - -import { environment } from '../../../environments/environment'; +import { User, UsersResponse } from '../models/user.model'; +import { environment } from '../../../../environments/environment'; @Injectable({ providedIn: 'root' }) -export class UsersService { +export class UserService { constructor( private http: HttpClient, ) { } - getAllUsers(): Observable { + getUsers(): Observable { return this.http.get(`${environment.backend}/users`); } } diff --git a/client/src/app/users/users-routing.module.ts b/client/src/app/modules/users/users-routing.module.ts similarity index 85% rename from client/src/app/users/users-routing.module.ts rename to client/src/app/modules/users/users-routing.module.ts index 0c90462..1850654 100644 --- a/client/src/app/users/users-routing.module.ts +++ b/client/src/app/modules/users/users-routing.module.ts @@ -4,7 +4,10 @@ import { Routes, RouterModule } from '@angular/router'; import { UsersListComponent } from './components/users-list/users-list.component'; const routes: Routes = [ - { path: '', component: UsersListComponent, }, + { + path: '', + component: UsersListComponent, + }, ]; @NgModule({ diff --git a/client/src/app/modules/users/users.module.ts b/client/src/app/modules/users/users.module.ts new file mode 100644 index 0000000..fcea5fa --- /dev/null +++ b/client/src/app/modules/users/users.module.ts @@ -0,0 +1,38 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { StoreModule } from '@ngrx/store'; +import { EffectsModule } from '@ngrx/effects'; +import { StoreDevtoolsModule } from '@ngrx/store-devtools'; + +import { UsersRoutingModule } from './users-routing.module'; +import { reducers, metaReducers } from './reducers'; + +import { MaterialModule } from '../material/material.module'; + +import { UsersListComponent } from './components/users-list/users-list.component'; + +import { UserService } from './services/user.service'; + +import { UserEffects } from './effects/user.effects'; + +import { environment } from '../../../environments/environment'; + + +@NgModule({ + declarations: [ + UsersListComponent, + ], + imports: [ + CommonModule, + UsersRoutingModule, + MaterialModule, + StoreModule.forFeature('users', reducers, { metaReducers }), + StoreDevtoolsModule.instrument({ maxAge: 25, logOnly: environment.production }), + EffectsModule.forFeature([UserEffects]), + ], + providers: [ + UserService, + ], +}) +export class UsersModule { } diff --git a/client/src/app/reducers/index.ts b/client/src/app/reducers/index.ts index ae1424b..afd8571 100644 --- a/client/src/app/reducers/index.ts +++ b/client/src/app/reducers/index.ts @@ -6,20 +6,12 @@ import { MetaReducer } from '@ngrx/store'; import { environment } from '../../environments/environment'; -import * as fromUsers from '../users/reducers/users.reducer'; export interface State { - users: fromUsers.State; } export const reducers: ActionReducerMap = { - users: fromUsers.reducer, }; export const metaReducers: MetaReducer[] = !environment.production ? [] : []; - -/** - * Layout Reducers - */ -export const getUsersState = createFeatureSelector('users'); diff --git a/client/src/app/users/actions/users.actions.spec.ts b/client/src/app/users/actions/users.actions.spec.ts deleted file mode 100644 index e351a45..0000000 --- a/client/src/app/users/actions/users.actions.spec.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - UsersActionTypes, - LoadUsersAction, - LoadUsersSuccessAction, - LoadUsersFailedAction, -} from './users.actions'; - -import { User } from '../models/user.model'; - -describe('Load Users Actions', () => { - it('should create an action through LoadUsersAction', () => { - const action = new LoadUsersAction(); - - expect(action.type).toEqual(UsersActionTypes.LoadUsers); - }); - - it('should create an action through LoadAllMonitorsSuccessAction', () => { - const payload: User[] = [{ - - }]; - - const action = new LoadUsersSuccessAction(payload); - expect(action.type).toEqual(UsersActionTypes.LoadUsersSuccess, payload); - }); - - it('should create an action through LoadUsersFailedAction', () => { - const payload: any = 'Error'; - const action = new LoadUsersFailedAction(payload); - expect(action.type).toEqual(UsersActionTypes.LoadUsersFailed, payload); - }); -}); diff --git a/client/src/app/users/actions/users.actions.ts b/client/src/app/users/actions/users.actions.ts deleted file mode 100644 index 73f238b..0000000 --- a/client/src/app/users/actions/users.actions.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { Action } from '@ngrx/store'; - -import { User, UsersResponse } from '../models/user.model'; - -export enum UsersActionTypes { - LoadUsers = '[Users] Load All Users', - LoadUsersSuccess = '[Users] Load All Users Success', - LoadUsersFailed = '[Users] Load All Users Failed', -} - -export class LoadUsersAction implements Action { - readonly type = UsersActionTypes.LoadUsers; - - constructor() {} -} - -export class LoadUsersSuccessAction implements Action { - readonly type = UsersActionTypes.LoadUsersSuccess; - - constructor(public payload: UsersResponse) {} -} - -export class LoadUsersFailedAction implements Action { - readonly type = UsersActionTypes.LoadUsersFailed; - - constructor(public payload: any) {} -} - -export type UsersActions - = LoadUsersAction - | LoadUsersSuccessAction - | LoadUsersFailedAction; diff --git a/client/src/app/users/components/user/user.component.html b/client/src/app/users/components/user/user.component.html deleted file mode 100644 index dfc511b..0000000 --- a/client/src/app/users/components/user/user.component.html +++ /dev/null @@ -1,6 +0,0 @@ - -
- Name: {{ user.name }} - Age: {{ user.age }} - Email: {{ user.email }} -
diff --git a/client/src/app/users/components/user/user.component.scss b/client/src/app/users/components/user/user.component.scss deleted file mode 100644 index e69de29..0000000 diff --git a/client/src/app/users/components/user/user.component.spec.ts b/client/src/app/users/components/user/user.component.spec.ts deleted file mode 100644 index dd3b1d7..0000000 --- a/client/src/app/users/components/user/user.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { UserComponent } from './user.component'; - -describe('UserComponent', () => { - let component: UserComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ UserComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(UserComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/client/src/app/users/components/user/user.component.ts b/client/src/app/users/components/user/user.component.ts deleted file mode 100644 index c40084c..0000000 --- a/client/src/app/users/components/user/user.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, Input } from '@angular/core'; - -import { User } from '../../models/user.model'; - -@Component({ - selector: 'client-user', - templateUrl: './user.component.html', - styleUrls: ['./user.component.scss'] -}) -export class UserComponent { - @Input() user: User; - - constructor() { } - -} diff --git a/client/src/app/users/components/users-list/users-list.component.html b/client/src/app/users/components/users-list/users-list.component.html deleted file mode 100644 index ee84889..0000000 --- a/client/src/app/users/components/users-list/users-list.component.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/client/src/app/users/components/users-list/users-list.component.ts b/client/src/app/users/components/users-list/users-list.component.ts deleted file mode 100644 index 31d456e..0000000 --- a/client/src/app/users/components/users-list/users-list.component.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Observable } from 'rxjs'; -import { Store } from '@ngrx/store'; -import { Component, OnInit } from '@angular/core'; - -import * as fromRoot from '../../../reducers'; -import { User } from '../../models/user.model'; -import { LoadUsersAction } from '../../actions/users.actions'; - -@Component({ - selector: 'client-users-list', - templateUrl: './users-list.component.html', - styleUrls: ['./users-list.component.scss'] -}) -export class UsersListComponent implements OnInit { - public users$: Observable; - - constructor( - private store: Store, - ) { } - - ngOnInit() { - this.store.dispatch(new LoadUsersAction()); - this.users$ = this.store.select(fromRoot.getUsersState); - } - -} diff --git a/client/src/app/users/effects/users.effects.spec.ts b/client/src/app/users/effects/users.effects.spec.ts deleted file mode 100644 index 50333ad..0000000 --- a/client/src/app/users/effects/users.effects.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { TestBed, inject } from '@angular/core/testing'; -import { provideMockActions } from '@ngrx/effects/testing'; -import { Observable } from 'rxjs'; - -import { UsersEffects } from './users.effects'; - -describe('UsersService', () => { - let actions$: Observable; - let effects: UsersEffects; - - beforeEach(() => { - TestBed.configureTestingModule({ - providers: [ - UsersEffects, - provideMockActions(() => actions$) - ] - }); - - effects = TestBed.get(UsersEffects); - }); - - it('should be created', () => { - expect(effects).toBeTruthy(); - }); -}); diff --git a/client/src/app/users/effects/users.effects.ts b/client/src/app/users/effects/users.effects.ts deleted file mode 100644 index 672f4a1..0000000 --- a/client/src/app/users/effects/users.effects.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Action } from '@ngrx/store'; -import { of, Observable } from 'rxjs'; -import { Injectable } from '@angular/core'; -import { Actions, Effect, ofType } from '@ngrx/effects'; -import { switchMap, map, catchError } from 'rxjs/operators'; - -import { - UsersActions, - UsersActionTypes, - LoadUsersAction, - LoadUsersSuccessAction, - LoadUsersFailedAction, -} from '../actions/users.actions'; -import { UsersService } from '../services/users.service'; - -@Injectable() -export class UsersEffects { - - @Effect() - loadAllMonitors$: Observable = this.actions$.pipe( - ofType(UsersActionTypes.LoadUsers), - switchMap(_ => { - return this.usersService.getAllUsers() - .pipe( - map(data => new LoadUsersSuccessAction(data)), - catchError(err => of(new LoadUsersFailedAction(err))) - ); - }) - ); - - constructor( - private actions$: Actions, - private usersService: UsersService, - ) {} -} diff --git a/client/src/app/users/reducers/users.reducer.spec.ts b/client/src/app/users/reducers/users.reducer.spec.ts deleted file mode 100644 index c574802..0000000 --- a/client/src/app/users/reducers/users.reducer.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { reducer, initialState } from './users.reducer'; - -describe('Users Reducer', () => { - describe('unknown action', () => { - it('should return the initial state', () => { - const action = {} as any; - - const result = reducer(initialState, action); - - expect(result).toBe(initialState); - }); - }); -}); diff --git a/client/src/app/users/reducers/users.reducer.ts b/client/src/app/users/reducers/users.reducer.ts deleted file mode 100644 index 3b39410..0000000 --- a/client/src/app/users/reducers/users.reducer.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Action } from '@ngrx/store'; - -import { User } from '../models/user.model'; -import { UsersActions, UsersActionTypes } from '../actions/users.actions'; - -export type State = User[]; - -export const initialState: State = [{ - 'age': '', - 'date_joined': 0, - 'dirty_fields': [], - 'email': '', - 'id': 0, - 'name': '', -}]; - -export function reducer(state = initialState, action: UsersActions): State { - switch (action.type) { - - case UsersActionTypes.LoadUsers: - return state; - - case UsersActionTypes.LoadUsersSuccess: - return action.payload.users; - - default: - return state; - } -} diff --git a/client/src/app/users/services/users.service.spec.ts b/client/src/app/users/services/users.service.spec.ts deleted file mode 100644 index 1145f9a..0000000 --- a/client/src/app/users/services/users.service.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { TestBed, getTestBed } from '@angular/core/testing'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; - -import { UsersService } from './users.service'; -import { User } from '../models/user.model'; -import { environment } from '../../../environments/environment'; - - - -describe('UsersService', () => { - let injector: TestBed; - let service: UsersService; - let httpMock: HttpTestingController; - - beforeEach(() => { - TestBed.configureTestingModule({ - imports: [ HttpClientTestingModule ], - providers: [ UsersService ], - }); - }); - - afterEach(() => { - httpMock.verify(); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); - - it('should return an array of users list from getAllUsers', () => { - const usersResp: User[] = [{ - }]; - - service.getAllUsers().subscribe(resMonitors => { - expect(resMonitors).toEqual(usersResp); - }); - - const req = httpMock.expectOne(`${environment.backend}/users`); - expect(req.request.method).toBe('GET'); - req.flush(usersResp); - }); -}); diff --git a/client/src/app/users/users.module.spec.ts b/client/src/app/users/users.module.spec.ts deleted file mode 100644 index ed82f11..0000000 --- a/client/src/app/users/users.module.spec.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { UsersModule } from './users.module'; - -describe('UsersModule', () => { - let usersModule: UsersModule; - - beforeEach(() => { - usersModule = new UsersModule(); - }); - - it('should create an instance', () => { - expect(usersModule).toBeTruthy(); - }); -}); diff --git a/client/src/app/users/users.module.ts b/client/src/app/users/users.module.ts deleted file mode 100644 index 5ca96c1..0000000 --- a/client/src/app/users/users.module.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { NgModule } from '@angular/core'; -import { CommonModule } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; - -import { MatCardModule } from '@angular/material'; - -import { EffectsModule } from '@ngrx/effects'; - -import { UsersRoutingModule } from './users-routing.module'; - -import { UserComponent } from './components/user/user.component'; -import { UsersListComponent } from './components/users-list/users-list.component'; - -import { UsersEffects } from './effects/users.effects'; - -import { UsersService } from './services/users.service'; - -import { environment } from '../../environments/environment'; - -@NgModule({ - imports: [ - CommonModule, - HttpClientModule, - UsersRoutingModule, - MatCardModule, - EffectsModule.forRoot([ - UsersEffects, - ]) - ], - declarations: [ - UserComponent, - UsersListComponent, - ], - providers: [ - UsersService, - ] -}) -export class UsersModule { } diff --git a/client/src/assets/icons/icon-128x128.png b/client/src/assets/icons/icon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9241f0be40661db1eed29384231e76d33b6e7c GIT binary patch literal 1253 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 A1ONa4 literal 0 HcmV?d00001 diff --git a/client/src/assets/icons/icon-152x152.png b/client/src/assets/icons/icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..34a1a8d645872c776c9425de45c3fcfba12c271e GIT binary patch literal 1427 zcmV;E1#J3>P)0{{R3FC5Sl00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px#S5Qn;MNDaN)BrNc058)3FxCJt%K$IW1~u3KFxCJt z*8nrs05IMFFxCJu+yF7w05QV=FWmq!|NsBlCs6RIx%%hq)l6;YNo@Dg+Uk;~=yZ

X{-?>fGCXfYNSFwSa_5FdK zVWbmbiyjU>K0ZD^K0ZD^KL2TsQY8DMN~18(vn<;gTO#sXvhT>_UZ`aLlk6vfOgE>x z$T-hm!ES8PrsW=;^Kr6C!eqm8&oyA1v_kq*?gp^0oQ|86yBTb~R+yAK1#Fd8crAA# znB!KMDR(-UvsRcdcL>ZyD=d{e3TC$zlI3!r%+{YP;V#uJdT7g#Xqm;#0N{kF{1!}pE)7`+j3=Yr=A6bs)`+*fjoG~J)&x^s8 z_jj;s0P7~D{|#2dlPq?GcR}Ua z{+_|MsARG8yA+k{=P%eNDp~OG4wS2UoLa{Ulq`6lc*f+~J&)5nP_iJHz$Vx7307j0 zYyg5u$Q8r*0%Cw98-idFB-dsPRzs2%AXtJtFg3lhQHW%vZLn_oGdTw95XqufBuC^} zpqzrm$Z^33dMyITwR*jMs{qNumm@L#fi)2U)kti#;?W8&*b#JvZYHF1{36S zl>T3^PqJhK7)+ASQD$y?}F88 z9_@nlYJR5FA|6=i{)<^n7pz4J@Fer8w` zTCgqu^~JOcHmrGl7ucESt>yX3@;t&!4|~X?3%0KL#V*(z)}ssdQ1i3H+8(jKyI?0Z h@8jd+Hf^L(!7eV+I8=gXo5oJ1=hR0aT`iN0Qe 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 literal 0 HcmV?d00001 diff --git a/client/src/assets/icons/icon-512x512.png b/client/src/assets/icons/icon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..51ee297df1cbeb0354814ffe95afa6e4bc86ea23 GIT binary patch literal 5008 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 g0#)SEkt6>uKVW 0.5% -last 2 versions -Firefox ESR -not dead -# IE 9-11 \ No newline at end of file diff --git a/client/src/environments/environment.ts b/client/src/environments/environment.ts index bdad566..b79e1a1 100644 --- a/client/src/environments/environment.ts +++ b/client/src/environments/environment.ts @@ -1,5 +1,5 @@ // This file can be replaced during build by using the `fileReplacements` array. -// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. export const environment = { @@ -8,9 +8,10 @@ export const environment = { }; /* - * In development mode, to ignore zone related error stack frames such as - * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can - * import the following file, but please comment it out in production mode - * because it will have performance impact when throw error + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. */ // import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/client/src/favicon.ico b/client/src/favicon.ico index 8081c7ceaf2be08bf59010158c586170d9d2d517..997406ad22c29aae95893fb3d666c30258a09537 100644 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000}`90e12m8T*36WoeDLA&SD_hw{H^wM!cl_RWcVA!I+x87ee975; z@4kD^=bYPn&pmG@(+JZ`rqQEKxW<}RzhW}I!|ulN=fmjVi@x{p$cC`)5$a!)X&U+blKNvN5tg=uLvuLnuqRM;Yc*swiexsoh#XPNu{9F#c`G zQLe{yWA(Y6(;>y|-efAy11k<09(@Oo1B2@0`PtZSkqK&${ zgEY}`W@t{%?9u5rF?}Y7OL{338l*JY#P!%MVQY@oqnItpZ}?s z!r?*kwuR{A@jg2Chlf0^{q*>8n5Ir~YWf*wmsh7B5&EpHfd5@xVaj&gqsdui^spyL zB|kUoblGoO7G(MuKTfa9?pGH0@QP^b#!lM1yHWLh*2iq#`C1TdrnO-d#?Oh@XV2HK zKA{`eo{--^K&MW66Lgsktfvn#cCAc*(}qsfhrvOjMGLE?`dHVipu1J3Kgr%g?cNa8 z)pkmC8DGH~fG+dlrp(5^-QBeEvkOvv#q7MBVLtm2oD^$lJZx--_=K&Ttd=-krx(Bb zcEoKJda@S!%%@`P-##$>*u%T*mh+QjV@)Qa=Mk1?#zLk+M4tIt%}wagT{5J%!tXAE;r{@=bb%nNVxvI+C+$t?!VJ@0d@HIyMJTI{vEw0Ul ze(ha!e&qANbTL1ZneNl45t=#Ot??C0MHjjgY8%*mGisN|S6%g3;Hlx#fMNcL<87MW zZ>6moo1YD?P!fJ#Jb(4)_cc50X5n0KoDYfdPoL^iV`k&o{LPyaoqMqk92wVM#_O0l z09$(A-D+gVIlq4TA&{1T@BsUH`Bm=r#l$Z51J-U&F32+hfUP-iLo=jg7Xmy+WLq6_tWv&`wDlz#`&)Jp~iQf zZP)tu>}pIIJKuw+$&t}GQuqMd%Z>0?t%&BM&Wo^4P^Y z)c6h^f2R>X8*}q|bblAF?@;%?2>$y+cMQbN{X$)^R>vtNq_5AB|0N5U*d^T?X9{xQnJYeU{ zoZL#obI;~Pp95f1`%X3D$Mh*4^?O?IT~7HqlWguezmg?Ybq|7>qQ(@pPHbE9V?f|( z+0xo!#m@Np9PljsyxBY-UA*{U*la#8Wz2sO|48_-5t8%_!n?S$zlGe+NA%?vmxjS- zHE5O3ZarU=X}$7>;Okp(UWXJxI%G_J-@IH;%5#Rt$(WUX?6*Ux!IRd$dLP6+SmPn= z8zjm4jGjN772R{FGkXwcNv8GBcZI#@Y2m{RNF_w8(Z%^A*!bS*!}s6sh*NnURytky humW;*g7R+&|Ledvc- Client - + + - + + diff --git a/client/src/main.ts b/client/src/main.ts index 3a24a24..bd6358c 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -11,4 +11,4 @@ if (environment.production) { } platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.log(err)); + .catch(err => console.error(err)); diff --git a/client/src/manifest.webmanifest b/client/src/manifest.webmanifest new file mode 100644 index 0000000..29ec280 --- /dev/null +++ b/client/src/manifest.webmanifest @@ -0,0 +1,51 @@ +{ + "name": "client", + "short_name": "client", + "theme_color": "#1976d2", + "background_color": "#fafafa", + "display": "standalone", + "scope": "/", + "start_url": "/", + "icons": [ + { + "src": "assets/icons/icon-72x72.png", + "sizes": "72x72", + "type": "image/png" + }, + { + "src": "assets/icons/icon-96x96.png", + "sizes": "96x96", + "type": "image/png" + }, + { + "src": "assets/icons/icon-128x128.png", + "sizes": "128x128", + "type": "image/png" + }, + { + "src": "assets/icons/icon-144x144.png", + "sizes": "144x144", + "type": "image/png" + }, + { + "src": "assets/icons/icon-152x152.png", + "sizes": "152x152", + "type": "image/png" + }, + { + "src": "assets/icons/icon-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "assets/icons/icon-384x384.png", + "sizes": "384x384", + "type": "image/png" + }, + { + "src": "assets/icons/icon-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ] +} \ No newline at end of file diff --git a/client/src/polyfills.ts b/client/src/polyfills.ts index d310405..aa665d6 100644 --- a/client/src/polyfills.ts +++ b/client/src/polyfills.ts @@ -11,70 +11,53 @@ * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. * - * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html + * Learn more in https://angular.io/guide/browser-support */ /*************************************************************************************************** * BROWSER POLYFILLS */ -/** IE9, IE10 and IE11 requires all of the following polyfills. **/ -// import 'core-js/es6/symbol'; -// import 'core-js/es6/object'; -// import 'core-js/es6/function'; -// import 'core-js/es6/parse-int'; -// import 'core-js/es6/parse-float'; -// import 'core-js/es6/number'; -// import 'core-js/es6/math'; -// import 'core-js/es6/string'; -// import 'core-js/es6/date'; -// import 'core-js/es6/array'; -// import 'core-js/es6/regexp'; -// import 'core-js/es6/map'; -// import 'core-js/es6/weak-map'; -// import 'core-js/es6/set'; - /** IE10 and IE11 requires the following for NgClass support on SVG elements */ // import 'classlist.js'; // Run `npm install --save classlist.js`. -/** IE10 and IE11 requires the following for the Reflect API. */ -// import 'core-js/es6/reflect'; - - -/** Evergreen browsers require these. **/ -// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. -import 'core-js/es7/reflect'; - - /** * Web Animations `@angular/platform-browser/animations` * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - **/ + */ // import 'web-animations-js'; // Run `npm install --save web-animations-js`. /** * By default, zone.js will patch all possible macroTask and DomEvents * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * */ - // (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - // (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - // (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - - /* - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - */ -// (window as any).__Zone_enable_cross_context_check = true; - /*************************************************************************************************** * Zone JS is required by default for Angular itself. */ import 'zone.js/dist/zone'; // Included with Angular CLI. - /*************************************************************************************************** * APPLICATION IMPORTS */ diff --git a/client/src/styles.scss b/client/src/styles.scss index cb69dd3..f243461 100644 --- a/client/src/styles.scss +++ b/client/src/styles.scss @@ -1,7 +1,36 @@ -/* You can add global styles to this file, and also import other style files */ +@import "src/assp-theme.scss"; -body { - margin: 0; +html, body { + height: 100vh; padding: 0; + margin: 0; +} + +body { font-family: 'Roboto', sans-serif; + color: $textColor; +} + +a { + text-decoration: none; + color: $textColor; +} + +.warnErrorMessage { + background: $warn !important; + text-align: center; + + .emoji { + font-size: 100px; + margin: 0; + } +} + +mat-progress-spinner { + left: 50%; + transform: translate(-50%, -50%); +} + +mat-card-header { + white-space: nowrap; } diff --git a/client/src/tsconfig.app.json b/client/src/tsconfig.app.json deleted file mode 100644 index 722c370..0000000 --- a/client/src/tsconfig.app.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/app", - "module": "es2015", - "types": [] - }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] -} diff --git a/client/src/tsconfig.spec.json b/client/src/tsconfig.spec.json deleted file mode 100644 index 8f7cede..0000000 --- a/client/src/tsconfig.spec.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/spec", - "module": "commonjs", - "types": [ - "jasmine", - "node" - ] - }, - "files": [ - "test.ts", - "polyfills.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] -} diff --git a/client/src/tslint.json b/client/src/tslint.json deleted file mode 100644 index 546e376..0000000 --- a/client/src/tslint.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "extends": "../tslint.json", - "rules": { - "directive-selector": [ - true, - "attribute", - "client", - "camelCase" - ], - "component-selector": [ - true, - "element", - "client", - "kebab-case" - ] - } -} diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json new file mode 100644 index 0000000..565a11a --- /dev/null +++ b/client/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "src/test.ts", + "src/**/*.spec.ts" + ] +} diff --git a/client/tsconfig.json b/client/tsconfig.json index ef44e28..30956ae 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -5,16 +5,22 @@ "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, - "moduleResolution": "node", - "emitDecoratorMetadata": true, + "downlevelIteration": true, "experimentalDecorators": true, - "target": "es5", + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", "typeRoots": [ "node_modules/@types" ], "lib": [ - "es2017", + "es2018", "dom" ] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true } } diff --git a/client/tsconfig.spec.json b/client/tsconfig.spec.json new file mode 100644 index 0000000..6400fde --- /dev/null +++ b/client/tsconfig.spec.json @@ -0,0 +1,18 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/client/tslint.json b/client/tslint.json index 3ea984c..a3799b1 100644 --- a/client/tslint.json +++ b/client/tslint.json @@ -1,32 +1,32 @@ { - "rulesDirectory": [ - "node_modules/codelyzer" - ], + "extends": "tslint:recommended", "rules": { - "arrow-return-shorthand": true, - "callable-types": true, - "class-name": true, - "comment-format": [ - true, - "check-space" - ], - "curly": true, + "array-type": false, + "arrow-parens": false, "deprecation": { - "severity": "warn" + "severity": "warning" }, - "eofline": true, - "forin": true, - "import-blacklist": [ + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ true, - "rxjs/Rx" + "attribute", + "assp", + "camelCase" ], - "import-spacing": true, - "indent": [ + "component-selector": [ true, - "spaces" + "element", + "assp", + "kebab-case" ], - "interface-over-type-literal": true, - "label-position": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "interface-name": false, + "max-classes-per-file": false, "max-line-length": [ true, 140 @@ -43,8 +43,7 @@ ] } ], - "no-arg": true, - "no-bitwise": true, + "no-consecutive-blank-lines": false, "no-console": [ true, "debug", @@ -53,78 +52,41 @@ "timeEnd", "trace" ], - "no-construct": true, - "no-debugger": true, - "no-duplicate-super": true, "no-empty": false, - "no-empty-interface": true, - "no-eval": true, "no-inferrable-types": [ true, "ignore-params" ], - "no-misused-new": true, "no-non-null-assertion": true, - "no-shadowed-variable": true, - "no-string-literal": false, - "no-string-throw": true, + "no-redundant-jsdoc": true, "no-switch-case-fall-through": true, - "no-trailing-whitespace": true, - "no-unnecessary-initializer": true, - "no-unused-expression": true, - "no-use-before-declare": true, - "no-var-keyword": true, - "object-literal-sort-keys": false, - "one-line": [ + "no-var-requires": false, + "object-literal-key-quotes": [ true, - "check-open-brace", - "check-catch", - "check-else", - "check-whitespace" + "as-needed" ], - "prefer-const": true, + "object-literal-sort-keys": false, + "ordered-imports": false, "quotemark": [ true, "single" ], - "radix": true, - "semicolon": [ - true, - "always" - ], - "triple-equals": [ - true, - "allow-null-check" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - } - ], - "unified-signatures": true, - "variable-name": false, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-operator", - "check-separator", - "check-type" - ], - "no-output-on-prefix": true, - "use-input-property-decorator": true, - "use-output-property-decorator": true, - "use-host-property-decorator": true, + "trailing-comma": false, + "no-conflicting-lifecycle": true, + "no-empty-interface": false, + "no-host-metadata-property": true, "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, "no-output-rename": true, - "use-life-cycle-interface": true, - "use-pipe-transform-interface": true, - "component-class-suffix": true, - "directive-class-suffix": true - } + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] } diff --git a/server/Pipfile b/server/Pipfile index 63c3827..74b724c 100644 --- a/server/Pipfile +++ b/server/Pipfile @@ -1,23 +1,17 @@ [[source]] - url = "https://pypi.python.org/simple" verify_ssl = true name = "pypi" - [packages] - sanic = "*" aiopg = "*" peewee-async = "*" peewee = "*" sanic-cors = "*" - +python-dotenv = "*" [dev-packages] - - [requires] - -python_version = "3.6" +python_version = "3.7" diff --git a/server/Pipfile.lock b/server/Pipfile.lock new file mode 100644 index 0000000..80c6579 --- /dev/null +++ b/server/Pipfile.lock @@ -0,0 +1,283 @@ +{ + "_meta": { + "hash": { + "sha256": "88e741cd7e601b79b35cc345eb8ee144925cab3f8ffc296542a5cd0488e02e96" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "aiofiles": { + "hashes": [ + "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee", + "sha256:1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d" + ], + "version": "==0.4.0" + }, + "aiopg": { + "hashes": [ + "sha256:32da3c9c73c248c715883fbb0876d66015d9fb6b4946058eb9fd40e86cfff9b4", + "sha256:5da7763028b735ebc4c2980ba39ef1ce4f48df1fc05900e036674edd50f0727c" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "certifi": { + "hashes": [ + "sha256:e4f3620cfea4f83eedc95b24abd9cd56f3c4b146dd0177e83a21b4eb49e21e50", + "sha256:fd7c7c74727ddcf00e9acd26bba8da604ffec95bf1c2144e67aff7a8b50e6cef" + ], + "version": "==2019.9.11" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, + "h11": { + "hashes": [ + "sha256:acca6a44cb52a32ab442b1779adf0875c443c689e9e028f8d831a3769f9c5208", + "sha256:f2b1ca39bfed357d1f19ac732913d5f9faa54a5062eca7d2ec3a916cfb7ae4c7" + ], + "version": "==0.8.1" + }, + "h2": { + "hashes": [ + "sha256:ac377fcf586314ef3177bfd90c12c7826ab0840edeb03f0f24f511858326049e", + "sha256:b8a32bd282594424c0ac55845377eea13fa54fe4a8db012f3a198ed923dc3ab4" + ], + "version": "==3.1.1" + }, + "hpack": { + "hashes": [ + "sha256:0edd79eda27a53ba5be2dfabf3b15780928a0dff6eb0c60a3d6767720e970c89", + "sha256:8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2" + ], + "version": "==3.0.0" + }, + "httpcore": { + "hashes": [ + "sha256:96f910b528d47b683242ec207050c7bbaa99cd1b9a07f78ea80cf61e55556b58" + ], + "version": "==0.3.0" + }, + "httptools": { + "hashes": [ + "sha256:e00cbd7ba01ff748e494248183abc6e153f49181169d8a3d41bb49132ca01dfc" + ], + "version": "==0.0.13" + }, + "hyperframe": { + "hashes": [ + "sha256:5187962cb16dcc078f23cb5a4b110098d546c3f41ff2d4038a9896893bbd0b40", + "sha256:a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f" + ], + "version": "==5.2.0" + }, + "idna": { + "hashes": [ + "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", + "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" + ], + "version": "==2.8" + }, + "multidict": { + "hashes": [ + "sha256:024b8129695a952ebd93373e45b5d341dbb87c17ce49637b34000093f243dd4f", + "sha256:041e9442b11409be5e4fc8b6a97e4bcead758ab1e11768d1e69160bdde18acc3", + "sha256:045b4dd0e5f6121e6f314d81759abd2c257db4634260abcfe0d3f7083c4908ef", + "sha256:047c0a04e382ef8bd74b0de01407e8d8632d7d1b4db6f2561106af812a68741b", + "sha256:068167c2d7bbeebd359665ac4fff756be5ffac9cda02375b5c5a7c4777038e73", + "sha256:148ff60e0fffa2f5fad2eb25aae7bef23d8f3b8bdaf947a65cdbe84a978092bc", + "sha256:1d1c77013a259971a72ddaa83b9f42c80a93ff12df6a4723be99d858fa30bee3", + "sha256:1d48bc124a6b7a55006d97917f695effa9725d05abe8ee78fd60d6588b8344cd", + "sha256:31dfa2fc323097f8ad7acd41aa38d7c614dd1960ac6681745b6da124093dc351", + "sha256:34f82db7f80c49f38b032c5abb605c458bac997a6c3142e0d6c130be6fb2b941", + "sha256:3d5dd8e5998fb4ace04789d1d008e2bb532de501218519d70bb672c4c5a2fc5d", + "sha256:4a6ae52bd3ee41ee0f3acf4c60ceb3f44e0e3bc52ab7da1c2b2aa6703363a3d1", + "sha256:4b02a3b2a2f01d0490dd39321c74273fed0568568ea0e7ea23e02bd1fb10a10b", + "sha256:4b843f8e1dd6a3195679d9838eb4670222e8b8d01bc36c9894d6c3538316fa0a", + "sha256:5de53a28f40ef3c4fd57aeab6b590c2c663de87a5af76136ced519923d3efbb3", + "sha256:61b2b33ede821b94fa99ce0b09c9ece049c7067a33b279f343adfe35108a4ea7", + "sha256:6a3a9b0f45fd75dc05d8e93dc21b18fc1670135ec9544d1ad4acbcf6b86781d0", + "sha256:76ad8e4c69dadbb31bad17c16baee61c0d1a4a73bed2590b741b2e1a46d3edd0", + "sha256:7ba19b777dc00194d1b473180d4ca89a054dd18de27d0ee2e42a103ec9b7d014", + "sha256:7c1b7eab7a49aa96f3db1f716f0113a8a2e93c7375dd3d5d21c4941f1405c9c5", + "sha256:7fc0eee3046041387cbace9314926aa48b681202f8897f8bff3809967a049036", + "sha256:8ccd1c5fff1aa1427100ce188557fc31f1e0a383ad8ec42c559aabd4ff08802d", + "sha256:8e08dd76de80539d613654915a2f5196dbccc67448df291e69a88712ea21e24a", + "sha256:c18498c50c59263841862ea0501da9f2b3659c00db54abfbf823a80787fde8ce", + "sha256:c49db89d602c24928e68c0d510f4fcf8989d77defd01c973d6cbe27e684833b1", + "sha256:ce20044d0317649ddbb4e54dab3c1bcc7483c78c27d3f58ab3d0c7e6bc60d26a", + "sha256:d1071414dd06ca2eafa90c85a079169bfeb0e5f57fd0b45d44c092546fcd6fd9", + "sha256:d3be11ac43ab1a3e979dac80843b42226d5d3cccd3986f2e03152720a4297cd7", + "sha256:db603a1c235d110c860d5f39988ebc8218ee028f07a7cbc056ba6424372ca31b" + ], + "version": "==4.5.2" + }, + "peewee": { + "hashes": [ + "sha256:2342067f48a779e35956a44cd547df883dda35153daa9fe994d970585aaec281" + ], + "index": "pypi", + "version": "==2.10.2" + }, + "peewee-async": { + "hashes": [ + "sha256:1376774637b6f5cfb9192a06380a8e987fed206e0e229bbadd50da6a4578557b", + "sha256:ab64a2a376033ce5621406b33735cb064659af05f5c2570af0fba08f6eab6282" + ], + "index": "pypi", + "version": "==0.5.12" + }, + "psycopg2-binary": { + "hashes": [ + "sha256:080c72714784989474f97be9ab0ddf7b2ad2984527e77f2909fcd04d4df53809", + "sha256:110457be80b63ff4915febb06faa7be002b93a76e5ba19bf3f27636a2ef58598", + "sha256:171352a03b22fc099f15103959b52ee77d9a27e028895d7e5fde127aa8e3bac5", + "sha256:19d013e7b0817087517a4b3cab39c084d78898369e5c46258aab7be4f233d6a1", + "sha256:249b6b21ae4eb0f7b8423b330aa80fab5f821b9ffc3f7561a5e2fd6bb142cf5d", + "sha256:2ac0731d2d84b05c7bb39e85b7e123c3a0acd4cda631d8d542802c88deb9e87e", + "sha256:2b6d561193f0dc3f50acfb22dd52ea8c8dfbc64bcafe3938b5f209cc17cb6f00", + "sha256:2bd23e242e954214944481124755cbefe7c2cf563b1a54cd8d196d502f2578bf", + "sha256:3e1239242ca60b3725e65ab2f13765fc199b03af9eaf1b5572f0e97bdcee5b43", + "sha256:3eb70bb697abbe86b1d2b1316370c02ba320bfd1e9e35cf3b9566a855ea8e4e5", + "sha256:51a2fc7e94b98bd1bb5d4570936f24fc2b0541b63eccadf8fdea266db8ad2f70", + "sha256:52f1bdafdc764b7447e393ed39bb263eccb12bfda25a4ac06d82e3a9056251f6", + "sha256:5b3581319a3951f1e866f4f6c5e42023db0fae0284273b82e97dfd32c51985cd", + "sha256:63c1b66e3b2a3a336288e4bcec499e0dc310cd1dceaed1c46fa7419764c68877", + "sha256:8123a99f24ecee469e5c1339427bcdb2a33920a18bb5c0d58b7c13f3b0298ba3", + "sha256:85e699fcabe7f817c0f0a412d4e7c6627e00c412b418da7666ff353f38e30f67", + "sha256:8dbff4557bbef963697583366400822387cccf794ccb001f1f2307ed21854c68", + "sha256:908d21d08d6b81f1b7e056bbf40b2f77f8c499ab29e64ec5113052819ef1c89b", + "sha256:af39d0237b17d0a5a5f638e9dffb34013ce2b1d41441fd30283e42b22d16858a", + "sha256:af51bb9f055a3f4af0187149a8f60c9d516cf7d5565b3dac53358796a8fb2a5b", + "sha256:b2ecac57eb49e461e86c092761e6b8e1fd9654dbaaddf71a076dcc869f7014e2", + "sha256:cd37cc170678a4609becb26b53a2bc1edea65177be70c48dd7b39a1149cabd6e", + "sha256:d17e3054b17e1a6cb8c1140f76310f6ede811e75b7a9d461922d2c72973f583e", + "sha256:d305313c5a9695f40c46294d4315ed3a07c7d2b55e48a9010dad7db7a66c8b7f", + "sha256:dd0ef0eb1f7dd18a3f4187226e226a7284bda6af5671937a221766e6ef1ee88f", + "sha256:e1adff53b56db9905db48a972fb89370ad5736e0450b96f91bcf99cadd96cfd7", + "sha256:f0d43828003c82dbc9269de87aa449e9896077a71954fbbb10a614c017e65737", + "sha256:f78e8b487de4d92640105c1389e5b90be3496b1d75c90a666edd8737cc2dbab7" + ], + "version": "==2.8.3" + }, + "python-dotenv": { + "hashes": [ + "sha256:debd928b49dbc2bf68040566f55cdb3252458036464806f4094487244e2a4093", + "sha256:f157d71d5fec9d4bd5f51c82746b6344dffa680ee85217c123f4a0c8117c4544" + ], + "index": "pypi", + "version": "==0.10.3" + }, + "requests": { + "hashes": [ + "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", + "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" + ], + "version": "==2.22.0" + }, + "requests-async": { + "hashes": [ + "sha256:8731420451383196ecf2fd96082bfc8ae5103ada90aba185888499d7784dde6f" + ], + "version": "==0.5.0" + }, + "rfc3986": { + "hashes": [ + "sha256:0344d0bd428126ce554e7ca2b61787b6a28d2bbd19fc70ed2dd85efe31176405", + "sha256:df4eba676077cefb86450c8f60121b9ae04b94f65f85b69f3f731af0516b7b18" + ], + "version": "==1.3.2" + }, + "sanic": { + "hashes": [ + "sha256:254587b7e7658e4ec1aa928b110620617d79eca917e4370bcf2b4ed9b6c6382c", + "sha256:5bd3314fd5dc8cafef7a1aff69ec7547c404d82b90a7b78796d81cb138a3bc0e" + ], + "index": "pypi", + "version": "==19.6.3" + }, + "sanic-cors": { + "hashes": [ + "sha256:28f7a87304fd69024e141294f60bff3066cb11eac4aae8c5a80a6b3f8069698e", + "sha256:4a93f62ded2a9e91370e159c9791039aadc68593149cf903bddaf470b6e98d4a" + ], + "index": "pypi", + "version": "==0.9.9.post3" + }, + "sanic-plugins-framework": { + "hashes": [ + "sha256:7bfa4d4e2b7e0ff487b2297d3e8b8697f6bc49b0c2c3967289716d30cb44d881", + "sha256:9b1f8f3fa8dcbcc0397adafe919665cce10b82cc41d543ee2f317ac31513a78d" + ], + "version": "==0.8.2" + }, + "ujson": { + "hashes": [ + "sha256:f66073e5506e91d204ab0c614a148d5aa938bdbf104751be66f8ad7a222f5f86" + ], + "markers": "sys_platform != 'win32' and implementation_name == 'cpython'", + "version": "==1.35" + }, + "urllib3": { + "hashes": [ + "sha256:3de946ffbed6e6746608990594d08faac602528ac7015ac28d33cee6a45b7398", + "sha256:9a107b99a5393caf59c7aa3c1249c16e6879447533d0887f4336dde834c7be86" + ], + "version": "==1.25.6" + }, + "uvloop": { + "hashes": [ + "sha256:0deb6c97c5807c792dd9024bab90e6ca49e981862103cb2ea37b430c1ca0a267", + "sha256:155b34d513655e753d07f499a7e811970e2d397f240dfcbec0b32a9587159c99", + "sha256:1df3ddfa280206e9999ae1c777a20836eb895bcec6dc9fae2cbb6eecfafb099e", + "sha256:5b19361c8767e1dc61f6367f948d4f3dc5504b9f2eba488641b3d26ec14498ba", + "sha256:942cd07035510b149d6160796f4e972137130ae953871b6a98c2cf5d5ab68c2e", + "sha256:c63b6c0bf33144c604dd72f7eecf2d3a3ac7405c503c67bd98128cf306efe18a", + "sha256:e698a20a3b4ccb380d207f9d491d4085d7c38d364f6a0bae98684a1612a9607a" + ], + "markers": "sys_platform != 'win32' and implementation_name == 'cpython'", + "version": "==0.13.0" + }, + "websockets": { + "hashes": [ + "sha256:04b42a1b57096ffa5627d6a78ea1ff7fad3bc2c0331ffc17bc32a4024da7fea0", + "sha256:08e3c3e0535befa4f0c4443824496c03ecc25062debbcf895874f8a0b4c97c9f", + "sha256:10d89d4326045bf5e15e83e9867c85d686b612822e4d8f149cf4840aab5f46e0", + "sha256:232fac8a1978fc1dead4b1c2fa27c7756750fb393eb4ac52f6bc87ba7242b2fa", + "sha256:4bf4c8097440eff22bc78ec76fe2a865a6e658b6977a504679aaf08f02c121da", + "sha256:51642ea3a00772d1e48fb0c492f0d3ae3b6474f34d20eca005a83f8c9c06c561", + "sha256:55d86102282a636e195dad68aaaf85b81d0bef449d7e2ef2ff79ac450bb25d53", + "sha256:564d2675682bd497b59907d2205031acbf7d3fadf8c763b689b9ede20300b215", + "sha256:5d13bf5197a92149dc0badcc2b699267ff65a867029f465accfca8abab95f412", + "sha256:5eda665f6789edb9b57b57a159b9c55482cbe5b046d7db458948370554b16439", + "sha256:5edb2524d4032be4564c65dc4f9d01e79fe8fad5f966e5b552f4e5164fef0885", + "sha256:79691794288bc51e2a3b8de2bc0272ca8355d0b8503077ea57c0716e840ebaef", + "sha256:7fcc8681e9981b9b511cdee7c580d5b005f3bb86b65bde2188e04a29f1d63317", + "sha256:8e447e05ec88b1b408a4c9cde85aa6f4b04f06aa874b9f0b8e8319faf51b1fee", + "sha256:90ea6b3e7787620bb295a4ae050d2811c807d65b1486749414f78cfd6fb61489", + "sha256:9e13239952694b8b831088431d15f771beace10edfcf9ef230cefea14f18508f", + "sha256:d40f081187f7b54d7a99d8a5c782eaa4edc335a057aa54c85059272ed826dc09", + "sha256:e1df1a58ed2468c7b7ce9a2f9752a32ad08eac2bcd56318625c3647c2cd2da6f", + "sha256:e98d0cec437097f09c7834a11c69d79fe6241729b23f656cfc227e93294fc242", + "sha256:f8d59627702d2ff27cb495ca1abdea8bd8d581de425c56e93bff6517134e0a9b", + "sha256:fc30cdf2e949a2225b012a7911d1d031df3d23e99b7eda7dfc982dc4a860dae9" + ], + "version": "==7.0" + } + }, + "develop": {} +} diff --git a/server/README.md b/server/README.md index ec4d118..3778807 100644 --- a/server/README.md +++ b/server/README.md @@ -12,17 +12,21 @@ The server (backend) side of the project written [Python](https://www.python.org 1. Create a file called `.env` at the root of the project and write the configurations of the server there. Here is an example of the `.env` file: ``` -DB_URI = 'mongodb://localhost:27017/assp' -JWT = 'ASSP' +DB_URI = 'postgres://nirgalon:@localhost:5432/assp' +DB_NAME = 'assp' +DB_USER = 'nirgalon' +DB_PASSWORD = 'nirgalon' +DB_PORT = '5432' +HOST = '0.0.0.0' PORT = '8000' LOG_LEVEL = 'info' ENV = 'development' ``` 2. Create a virtual environment with `pipenv install` at the root of the project. 3. Get in to the virtual environment with `pipenv shell`. -4. Run the server with the `.env` file `ENV_VARS=.env python main.py` +4. Run the server with the `.env` file `python main.py` 5. Hit [http://localhost:8000](http://localhost:8000) with Postman. ## Tests -Not Yet.. +To run all tests `python -m unittest` diff --git a/server/api/users/model.py b/server/api/users/model.py index 448a1f6..55ea262 100644 --- a/server/api/users/model.py +++ b/server/api/users/model.py @@ -1,9 +1,18 @@ +from os import getenv from datetime import date +from playhouse.db_url import connect +from dotenv import load_dotenv, find_dotenv from peewee import Model, CharField, TextField, DateField +load_dotenv(find_dotenv()) +psql_db = connect(getenv('DB_URI')) + class User(Model): name = CharField(max_length=40) age = TextField(default=0) email = CharField(unique=True, null=False) date_joined = DateField(default=date.today()) + + class Meta: + database = psql_db diff --git a/server/api/users/tests.py b/server/api/users/tests.py new file mode 100644 index 0000000..c0a8793 --- /dev/null +++ b/server/api/users/tests.py @@ -0,0 +1,8 @@ +from main import app + + +def test_new_user(): + request, response = app.test_client.get('/users') + print("request", request) + print("response", response) + assert response.status == 404 diff --git a/server/main.py b/server/main.py index 1d2207a..3bea4b7 100644 --- a/server/main.py +++ b/server/main.py @@ -1,15 +1,22 @@ +from os import getenv +from dotenv import load_dotenv, find_dotenv from sanic import Sanic from sanic.response import json from sanic_cors import CORS from api.users.routes import users_routes -from util.middlewares import handle_request, handle_response +from util.config import connect_to_db +from util.seed import seed_db -# Start the app and load environment variables. +load_dotenv(find_dotenv()) + +# Start the app. app = Sanic(load_env=True) -app.config.from_envvar('ENV_VARS') CORS(app) +# Connect to the database and seed it. +connect_to_db() +seed_db() # root route @app.route('/') @@ -19,9 +26,5 @@ async def root(request): # Register all blueprints. app.blueprint(users_routes) -# Register all middlewares. -app.register_middleware(handle_request, 'request') -app.register_middleware(handle_response, 'response') - if __name__ == '__main__': - app.run(host='0.0.0.0', port=8000) + app.run(host=getenv('HOST'), port=getenv('PORT')) diff --git a/server/requirements.txt b/server/requirements.txt new file mode 100644 index 0000000..4251d80 --- /dev/null +++ b/server/requirements.txt @@ -0,0 +1,25 @@ +aiofiles==0.4.0 +aiopg==1.0.0 +certifi==2019.9.11 +chardet==3.0.4 +h11==0.8.1 +h2==3.1.1 +hpack==3.0.0 +httpcore==0.3.0 +httptools==0.0.13 +hyperframe==5.2.0 +idna==2.8 +multidict==4.5.2 +peewee==2.10.2 +peewee-async==0.5.12 +psycopg2-binary==2.8.3 +requests==2.22.0 +requests-async==0.5.0 +rfc3986==1.3.2 +sanic==19.6.3 +Sanic-Cors==0.9.9.post3 +Sanic-Plugins-Framework==0.8.2 +ujson==1.35 +urllib3==1.25.6 +uvloop==0.13.0 +websockets==7.0 diff --git a/server/util/config.py b/server/util/config.py new file mode 100644 index 0000000..31b1232 --- /dev/null +++ b/server/util/config.py @@ -0,0 +1,14 @@ +from os import getenv +from peewee import PostgresqlDatabase + + +def connect_to_db(): + global psql_db + psql_db = PostgresqlDatabase( + database=getenv('DB_NAME'), + host=getenv('HOST'), + port=getenv('DB_PORT'), + user=getenv('DB_USER'), + password=getenv('DB_PASSWORD'), + ) + psql_db.connect() diff --git a/server/util/middlewares.py b/server/util/middlewares.py deleted file mode 100644 index 0ab18ca..0000000 --- a/server/util/middlewares.py +++ /dev/null @@ -1,25 +0,0 @@ -from peewee import PostgresqlDatabase, OperationalError - -from api.users.model import User - - -async def handle_request(request): - global psql_db - psql_db = PostgresqlDatabase( - database='assp', - host='localhost', - user='nirgalon', - password='' - ) - psql_db.connect() - - # Create tables. - try: - psql_db.create_tables([User]) - except OperationalError as e: - print(e) - - -async def handle_response(request, response): - if not psql_db.is_closed(): - psql_db.close() diff --git a/server/util/seed.py b/server/util/seed.py new file mode 100644 index 0000000..b8e4458 --- /dev/null +++ b/server/util/seed.py @@ -0,0 +1,21 @@ +from os import getenv +from peewee import OperationalError +from playhouse.db_url import connect + +from api.users.model import User + +psql_db = connect(getenv('DB_URI')) + + +def seed_db(): + ''' + Create all the models tables, and seed them with some dummy data. + ''' + # Create the tables. + try: + psql_db.create_tables([User], True) + except OperationalError as e: + print("cannot create postgres tables", e) + + # Create dummy data. + User.create(name="nir", age="29", email="nir@example.com") From 7bf3089e62aae9df248902a1ef197fd9cd3c4198 Mon Sep 17 00:00:00 2001 From: Nir Galon Date: Thu, 24 Oct 2019 16:03:24 +0300 Subject: [PATCH 34/35] Move to kubernetes (#100) * Cleanup * Add cloudbuild.yaml file for angular client app * Add server Dockerfile and kubernetes files * Change readme --- .gitignore | 1 - README.md | 90 +++++------ .../angular-django-seed-project.png | Bin .../angular-django-seed-project.psd | Bin art/client-trigger.jpg | Bin 0 -> 79022 bytes art/cloud_dns.jpg | Bin 0 -> 52591 bytes art/server-trigger.jpg | Bin 0 -> 77881 bytes client/cloudbuild.yaml | 24 +++ docker-compose.yml | 153 ------------------ server/.flake8 | 2 + server/Dockerfile | 13 ++ server/cloudbuild.yaml | 24 +++ server/kubernetes/helm-permissions.yaml | 19 +++ server/kubernetes/server.yaml | 104 ++++++++++++ 14 files changed, 225 insertions(+), 205 deletions(-) rename angular-django-seed-project.png => art/angular-django-seed-project.png (100%) rename angular-django-seed-project.psd => art/angular-django-seed-project.psd (100%) create mode 100644 art/client-trigger.jpg create mode 100644 art/cloud_dns.jpg create mode 100644 art/server-trigger.jpg create mode 100644 client/cloudbuild.yaml delete mode 100644 docker-compose.yml create mode 100644 server/.flake8 create mode 100644 server/Dockerfile create mode 100644 server/cloudbuild.yaml create mode 100644 server/kubernetes/helm-permissions.yaml create mode 100644 server/kubernetes/server.yaml diff --git a/.gitignore b/.gitignore index 39caaf9..506182b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ - # Created by https://www.gitignore.io/api/python,django,node,sass,virtualenv,jetbrains ### Python ### diff --git a/README.md b/README.md index eb1688e..4f098ce 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + [![license][license-image]][license-url] [![GitHub release][github-image]][github-url] [![Build Status][travis-image]][travis-url] [![codecov][codecov-image]][codecov-url] [![Dependency Status][dependencyci-image]][dependencyci-url] [![Codacy Badge][codacy-image]][codacy-url] [![Maintenance][maintenance-image]][maintenance-url] [![Donate][donate-image]][donate-url] @@ -6,64 +6,52 @@ This repo is a production ready seed project. The app shows a list of users. ## Structure -* The `client` service is a build of the `client` directory. It contain an [Angular](https://angular.io/) app, built with [Angular-Cli](https://github.com/angular/angular-cli), [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, have service worker, and `AOT` compiled. The app shows the users from the Django api. -* The `server` service is a build of the `server` directory. It contain a simple [Django](https://www.djangoproject.com/) app that expose an `api` of Django `users` with [Django REST framework](http://www.django-rest-framework.org/). The Python serve through a [gunicorn](http://gunicorn.org/) server installed in the container. -* There is a `postgres` service for the Django database. The `database` directory contains the automatic backup script. -* There is an `nginx` service to serve static files (the client app). -* There is an `haproxy` service to get all the HTTP requests and do load balancing between the containers in the services. -* There are a separate containers for the [ELK Stack](https://www.elastic.co/products) for logging. The `server` and the `client` logs sent to logstash, and saved in elasticsearch. There is also a kibana instance to check and analyze all the logs. -* There is a `visualizer` container to visualize where is each container is located at (on which server). - -All the parts are in a separate [Docker](https://www.docker.com/) containers and we use [Docker Swarm](https://docs.docker.com/engine/swarm/) to manage them. - -## Pre Requirements - -1. install [docker](https://www.docker.com/). - -## Installation - -Automatic installation of the project with docker. - -0. If you work on `win` or `mac` please comment the lines of the `database -> volumes` in `docker-compose.yml`, this share volume with `linux` system only. -1. In `client` directory run `docker build -t client .` to build the Docker image. -2. In `server` directory run `docker build -t server .` to build the Docker image. -3. To create a swarm `docker swarm init`. -4. Download all docker images: - * `docker pull dockercloud/haproxy` - * `docker pull postgres` - * `docker pull dockersamples/visualizer:stable` - * `docker pull elasticsearch:5.4.3` - * `docker pull kibana:5.4.3` - * `docker pull logstash:5.4.3` -5. Run `docker stack deploy --compose-file=docker-compose.yml prod` -6. Open the browser at [http://localhost](http://localhost) to see your Angular (client) app. -7. Open the browser at [http://localhost:8000](http://localhost:8000) to see your Django (server) app. -8. Open the browser at [http://localhost:8080](http://localhost:8080) to see the visualizer. -9. Open the browser at [http://localhost:5601](http://localhost:5601) to see Kibana and check your logs. - -**If you want to install the project manually, go to the `/client` or `/server` directories and read the `README` file.** +* The `client` contain an [Angular](https://angular.io/) app, built with [Angular-Cli](https://github.com/angular/angular-cli), and [ngrx](https://github.com/ngrx) to handle state, [Angular Material](https://github.com/angular/material2) as a design library, and have service worker, and `AOT` compiled. The app shows the users from the Sanic api. +* The `server` contain a simple [Sanic](https://sanic.readthedocs.io) app that expose an `api` of `users`. The Python serve through a [gunicorn](http://gunicorn.org/) server installed in the container. +* There is a `postgres` service for the database. The `database` directory contains the automatic backup script. +* All the logs are going to `stdout` and can be collected through any service. +* There are built in test that configured to run on `travis-ci`, and a code coverage analysis via `codecov`. + +The `client` app is built via the cloud build CI on GCP and deployed to the GCP `storage`. +The `server` app is built via the cloud build CI as a docker image and deployed to a `GKE cluster` on GCP (managed by Kubernetes). +The PostgreSQL `database` is built via the cloud build CI as a docker image and deployed to a `GKE cluster` on GCP (managed by Kubernetes). + +## Production Installation + +Deploy the `client` app: +1. Create a storage bucket with the name of the Domain you have. +2. Create a cloud build trigger with the parameters in the [screenshot](art/client-trigger.jpg) (change the `_REGION_NAME` to the location of the bucket you created in the previous step). +3. Now you can deploy your `client` app by creating a new tag in the `v0.0.1/prod/prod` format and push it to github (`git push --tags`). + +Deploy the `server` app: +1. Create a `GKE` cluster on GCP. +2. Create a cloud build trigger with the parameters in the [screenshot](art/servier-trigger.jpg) (change the `_REGION_NAME` to the location of the `GKE` cluster you created in step 1). +3. Connect to the `GKE` cluster using `gcloud container clusters get-credentials prod` and then create a `tiler` using the commands: + 1. `kubectl create serviceaccount --namespace kube-system tiller` + 2. `kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller` + 3. `kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'` + 4. `helm init --service-account tiller --upgrade` +4. Then change the `helm` permissions by navigate to `server/kubernetes` in the command line and then write `kubectl apply -f helm-permissions.yaml`. +5. Now you can deploy your `server` app by create a new tag in the `v0.0.1/prod/prod` format and push it to github (`git push --tags`). + +Create a Cloud DNS record: +1. Create a Cloud DNS record on GCP. In this record you should add an `A` record to the kubernetes cluster (the server) and place there your load balancer ip address you get in the "Deploy the `server` app", and a `CNAME` record to our Storage bucket (client app) [screenshot](art/cloud_dns.jpg). ## Our Stack * [Angular](https://angular.io/) -* [Django](https://www.djangoproject.com/) -* [PostgreSQL](http://www.postgresql.org/) +* [Sanic](https://www.djangoproject.com/) +* [PostgreSQL](https://sanic.readthedocs.io) * [Docker](https://www.docker.com/) **Tools we use** - * [Angular Material](https://material.angular.io/) + * [Angular Material](https://material.angular.io) * [ngrx](https://github.com/ngrx) - * [Django REST framework](http://www.django-rest-framework.org/) - * [django-admin-honeypot](http://django-admin-honeypot.readthedocs.io/en/latest/) - * [ELK Stack](https://www.elastic.co/products) - * [Docker Swarm](https://docs.docker.com/engine/swarm/) - -## Django Admin - - * When install the project with docker, there is an `entrypoint.sh` script that runs in the `server` container. It'll migrate the database and create a new super user with a username `admin` and a password `pass`. - * We use [django-admin-honeypot](https://github.com/dmpayton/django-admin-honeypot) to fake the default Django admin login screen to log and notify admins of attempted unauthorized access. So the real Django admin login screen will be under `/secret-admin`. - * We also use [django-flat-responsive](https://github.com/elky/django-flat-responsive) to make the Django admin screens responsive to mobile. + * [Peewee](http://docs.peewee-orm.com) + * [Kubernetes](https://kubernetes.io) + * [Travis-CI](https://travis-ci.org) + * [Codecov](https://codecov.io) ## Tests @@ -135,7 +123,7 @@ Just fork and do a pull request (; [dependencyci-url]: https://dependencyci.com/github/nirgn975/Angular-Django-Seed-Project [codacy-image]: https://api.codacy.com/project/badge/Grade/cdf4939e98804872b377a4120a4f4571 [codacy-url]: https://www.codacy.com/app/nirgn975/Angular-Django-Seed-Project?utm_source=github.com&utm_medium=referral&utm_content=nirgn975/Angular-Django-Seed-Project&utm_campaign=Badge_Grade -[maintenance-image]: https://img.shields.io/maintenance/yes/2017.svg +[maintenance-image]: https://img.shields.io/maintenance/yes/2019.svg [maintenance-url]: https://github.com/nirgn975 [donate-image]: https://img.shields.io/badge/PayPal-Donate-lightgrey.svg [donate-url]: https://www.paypal.me/nirgn/2 diff --git a/angular-django-seed-project.png b/art/angular-django-seed-project.png similarity index 100% rename from angular-django-seed-project.png rename to art/angular-django-seed-project.png diff --git a/angular-django-seed-project.psd b/art/angular-django-seed-project.psd similarity index 100% rename from angular-django-seed-project.psd rename to art/angular-django-seed-project.psd diff --git a/art/client-trigger.jpg b/art/client-trigger.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6efc594973fd27880aa7207260d48c2de834335 GIT binary patch literal 79022 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 Q|5e(2$en-03|qth3wB#JqyPW_ literal 0 HcmV?d00001 diff --git a/art/cloud_dns.jpg b/art/cloud_dns.jpg new file mode 100644 index 0000000000000000000000000000000000000000..617f2a0f7a143a0e48fd70ca3a230270a809e78e GIT binary patch literal 52591 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 /dev/null - interval: 30s - retries: 1 - - logstash: - image: logstash:5.4.3 - command: sh -c "logstash -e 'input { tcp { port => 5959 codec => json } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ \"elasticsearch\" ] } }'" - ports: - - "5959:5959/tcp" - - "12201:12201/udp" - networks: - - example_cluster - deploy: - mode: replicated - replicas: 1 - -volumes: - esdata: - driver: local - -networks: - example_cluster: - driver: overlay diff --git a/server/.flake8 b/server/.flake8 new file mode 100644 index 0000000..6deafc2 --- /dev/null +++ b/server/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 120 diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 0000000..08bc45f --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.7-slim +MAINTAINER Nir Galon +ENV SANIC_REQUEST_TIMEOUT 500 +ENV SANIC_RESPONSE_TIMEOUT 500 + +RUN apt-get update && apt-get install -y --allow-unauthenticated + +ADD . /code +RUN pip install -r /code/requirements.txt +WORKDIR /code + +EXPOSE 8000 +CMD ["python", "-m", "sanic", "main.app", "--host=0.0.0.0", "--port=8000", "--workers=1"] diff --git a/server/cloudbuild.yaml b/server/cloudbuild.yaml new file mode 100644 index 0000000..027dc1b --- /dev/null +++ b/server/cloudbuild.yaml @@ -0,0 +1,24 @@ +steps: +- name: 'gcr.io/cloud-builders/docker' + args: ['build', '-t', 'gcr.io/$PROJECT_ID/raptor:$SHORT_SHA', '.'] +- name: 'gcr.io/cloud-builders/docker' + args: ['push', 'gcr.io/$PROJECT_ID/raptor:$SHORT_SHA'] +- name: gcr.io/cloud-builders/wget + args: ['-O', 'sigil.tgz', 'https://github.com/gliderlabs/sigil/releases/download/v0.4.0/sigil_0.4.0_Linux_x86_64.tgz'] +- name: 'gcr.io/cloud-builders/gcloud' + entrypoint: 'bash' + args: + - '-c' + - | + export APP_VERSION + export NAMESPACE + export CLUSTER_NAME + IFS=/ read -r APP_VERSION CLUSTER_NAME NAMESPACE <<< "$TAG_NAME" + gcloud components install kubectl + gcloud container clusters get-credentials $_CLUSTER_NAME --zone $_ZONE_NAME + export TAG_NAME=$TAG_NAME + export PROJECT_ID=$PROJECT_ID + export ENVIRONMENT=$_ENVIRONMENT + export SHORT_SHA=$SHORT_SHA + tar zxvf sigil.tgz + ./sigil -p -f kubernetes/server.yaml | kubectl apply -f - diff --git a/server/kubernetes/helm-permissions.yaml b/server/kubernetes/helm-permissions.yaml new file mode 100644 index 0000000..867f315 --- /dev/null +++ b/server/kubernetes/helm-permissions.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: tiller + namespace: kube-system +--- +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: tiller + namespace: kube-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: + - kind: ServiceAccount + name: tiller + namespace: kube-system diff --git a/server/kubernetes/server.yaml b/server/kubernetes/server.yaml new file mode 100644 index 0000000..1a91f02 --- /dev/null +++ b/server/kubernetes/server.yaml @@ -0,0 +1,104 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: $NAMESPACE + labels: + name: $NAMESPACE +--- +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: server + namespace: $NAMESPACE + labels: + app: server +spec: + replicas: 1 + revisionHistoryLimit: 0 + selector: + matchLabels: + app: server + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 0 + maxUnavailable: 1 + template: + metadata: + labels: + app: server + version: $SHORT_SHA + spec: + containers: + - name: server + image: 'gcr.io/$PROJECT_ID/server:$SHORT_SHA' + ports: + - containerPort: 8000 + env: + - name: SANIC_REQUEST_TIMEOUT + value: "500" + - name: SANIC_RESPONSE_TIMEOUT + value: "500" + - name: SANIC_KEEP_ALIVE_TIMEOUT + value: "500" + - name: DB_URI + value: "postgres://nirgalon:@localhost:5432/assp" + - name: DB_URI + value: "postgres://nirgalon:@localhost:5432/assp" + - name: DB_NAME + value: "assp" + - name: DB_USER + value: "postgres" + - name: DB_PASSWORD + value: "postgres" + - name: DB_PORT + value: "postgres" + - name: HOST + value: "0.0.0.0" + - name: PORT + value: "8000" + - name: LOG_LEVEL + value: "info" + - name: ENV + value: "production" + livenessProbe: + httpGet: + path: / + port: 8000 + initialDelaySeconds: 30 +--- +apiVersion: v1 +kind: Service +metadata: + name: server-service + namespace: $NAMESPACE + labels: + name: server-service +spec: + ports: + - port: 80 + targetPort: 8000 + protocol: TCP + name: http + selector: + app: server + type: ClusterIP +--- +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: server-ingress + namespace: $NAMESPACE + annotations: + # Annotations for Nginx ingress controller: + nginx.ingress.kubernetes.io/ssl-redirect: "false" + nginx.ingress.kubernetes.io/rewrite-target: / +spec: + rules: + - host: $NAMESPACE.api.$CLUSTER_NAME.theraptr.io + http: + paths: + - path: /server + backend: + serviceName: server-service + servicePort: 80 From c6e0e049127816efb1e49d82cf38ddae53bb968c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 01:37:16 +0000 Subject: [PATCH 35/35] Bump eventsource from 1.0.7 to 1.1.1 in /client Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.0.7 to 1.1.1. - [Release notes](https://github.com/EventSource/eventsource/releases) - [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md) - [Commits](https://github.com/EventSource/eventsource/compare/v1.0.7...v1.1.1) --- updated-dependencies: - dependency-name: eventsource dependency-type: indirect ... Signed-off-by: dependabot[bot] --- client/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/package-lock.json b/client/package-lock.json index fc66932..b7f1eac 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -4672,9 +4672,9 @@ "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.1.tgz", + "integrity": "sha512-qV5ZC0h7jYIAOhArFJgSfdyz6rALJyb270714o7ZtNnw2WSJ+eexhKtE0O8LYPRsHZHf2osHKZBxGPvm3kPkCA==", "dev": true, "requires": { "original": "^1.0.0"