From b86ec1641b2f7dec3e6b282abefcb4f5389d1422 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 20 Mar 2018 10:44:56 +0300 Subject: [PATCH 001/108] AMP/task1/features: angular-starter-kit --- angular-starter/.dockerignore | 39 + angular-starter/.editorconfig | 16 + angular-starter/.gitattributes | 1 + angular-starter/.github/CONTRIBUTING.md | 11 + angular-starter/.github/ISSUE_TEMPLATE.md | 36 + .../.github/PULL_REQUEST_TEMPLATE.md | 13 + angular-starter/.gitignore | 79 + angular-starter/.nvmrc | 1 + angular-starter/.travis.yml | 30 + angular-starter/.vscode/launch.json | 27 + angular-starter/.vscode/settings.json | 3 + angular-starter/Dockerfile | 39 + angular-starter/LICENSE | 21 + angular-starter/README.md | 508 + angular-starter/config/build-utils.js | 131 + angular-starter/config/config.common.json | 4 + angular-starter/config/config.dev.json | 10 + angular-starter/config/config.prod.json | 11 + angular-starter/config/empty.js | 11 + angular-starter/config/github-deploy/index.js | 95 + angular-starter/config/head-config.common.js | 53 + angular-starter/config/helpers.js | 31 + .../config/html-elements-plugin/index.js | 113 + angular-starter/config/karma.conf.js | 174 + angular-starter/config/nginx-custom.conf | 19 + angular-starter/config/protractor.conf.js | 53 + angular-starter/config/resource-override.js | 0 angular-starter/config/spec-bundle.js | 63 + angular-starter/config/webpack.common.js | 329 + angular-starter/config/webpack.dev.js | 185 + .../config/webpack.github-deploy.js | 80 + angular-starter/config/webpack.prod.js | 211 + angular-starter/config/webpack.test.js | 265 + angular-starter/docker-compose.yml | 14 + angular-starter/firebase.json | 16 + angular-starter/karma.conf.js | 8 + angular-starter/netlify.toml | 3 + angular-starter/package-lock.json | 18271 ++++++++++++++++ angular-starter/package.json | 181 + angular-starter/protractor.conf.js | 8 + angular-starter/sonar-project.properties | 18 + .../+child-barrel/child-barrel.component.ts | 25 + .../+child-barrel/child-barrel.module.ts | 26 + .../+child-barrel/child-barrel.routes.ts | 5 + .../src/app/+barrel/+child-barrel/index.ts | 1 + .../src/app/+barrel/barrel.component.ts | 31 + .../src/app/+barrel/barrel.module.ts | 26 + .../src/app/+barrel/barrel.routes.ts | 8 + angular-starter/src/app/+barrel/index.ts | 1 + .../+child-detail/child-detail.component.ts | 25 + .../+child-detail/child-detail.module.ts | 26 + .../+child-detail/child-detail.routes.ts | 5 + .../src/app/+detail/+child-detail/index.ts | 1 + .../src/app/+detail/detail.component.ts | 31 + .../src/app/+detail/detail.module.ts | 26 + .../src/app/+detail/detail.routes.ts | 8 + angular-starter/src/app/+detail/index.ts | 1 + .../app/+dev-module/dev-module.component.ts | 15 + .../src/app/+dev-module/dev-module.module.ts | 24 + .../src/app/+dev-module/dev-module.routes.ts | 5 + angular-starter/src/app/+dev-module/index.ts | 1 + .../src/app/about/about.component.spec.ts | 41 + .../src/app/about/about.component.ts | 68 + angular-starter/src/app/about/index.ts | 1 + angular-starter/src/app/app.component.css | 8 + angular-starter/src/app/app.component.spec.ts | 66 + angular-starter/src/app/app.component.ts | 85 + angular-starter/src/app/app.e2e.ts | 34 + angular-starter/src/app/app.module.ts | 78 + angular-starter/src/app/app.resolver.ts | 17 + angular-starter/src/app/app.routes.ts | 13 + angular-starter/src/app/app.service.ts | 46 + .../src/app/home/home.component.css | 1 + .../src/app/home/home.component.html | 37 + .../src/app/home/home.component.spec.ts | 75 + .../src/app/home/home.component.ts | 57 + angular-starter/src/app/home/home.e2e.ts | 26 + angular-starter/src/app/home/index.ts | 1 + angular-starter/src/app/home/title/index.ts | 1 + .../src/app/home/title/title.service.spec.ts | 35 + .../src/app/home/title/title.service.ts | 18 + angular-starter/src/app/home/x-large/index.ts | 1 + .../home/x-large/x-large.directive.spec.ts | 50 + .../src/app/home/x-large/x-large.directive.ts | 28 + angular-starter/src/app/index.ts | 4 + angular-starter/src/app/no-content/index.ts | 1 + .../app/no-content/no-content.component.ts | 13 + angular-starter/src/assets/css/.gitkeep | 1 + angular-starter/src/assets/data.json | 3 + angular-starter/src/assets/humans.txt | 17 + .../src/assets/icon/android-icon-144x144.png | Bin 0 -> 8433 bytes .../src/assets/icon/android-icon-192x192.png | Bin 0 -> 9714 bytes .../src/assets/icon/android-icon-36x36.png | Bin 0 -> 2302 bytes .../src/assets/icon/android-icon-48x48.png | Bin 0 -> 2925 bytes .../src/assets/icon/android-icon-72x72.png | Bin 0 -> 4234 bytes .../src/assets/icon/android-icon-96x96.png | Bin 0 -> 5597 bytes .../src/assets/icon/apple-icon-114x114.png | Bin 0 -> 6552 bytes .../src/assets/icon/apple-icon-120x120.png | Bin 0 -> 6924 bytes .../src/assets/icon/apple-icon-144x144.png | Bin 0 -> 8433 bytes .../src/assets/icon/apple-icon-152x152.png | Bin 0 -> 8994 bytes .../src/assets/icon/apple-icon-180x180.png | Bin 0 -> 10999 bytes .../src/assets/icon/apple-icon-57x57.png | Bin 0 -> 3404 bytes .../src/assets/icon/apple-icon-60x60.png | Bin 0 -> 3564 bytes .../src/assets/icon/apple-icon-72x72.png | Bin 0 -> 4234 bytes .../src/assets/icon/apple-icon-76x76.png | Bin 0 -> 4463 bytes .../assets/icon/apple-icon-precomposed.png | Bin 0 -> 10290 bytes .../src/assets/icon/apple-icon.png | Bin 0 -> 10290 bytes .../src/assets/icon/browserconfig.xml | 2 + .../src/assets/icon/favicon-16x16.png | Bin 0 -> 1523 bytes .../src/assets/icon/favicon-32x32.png | Bin 0 -> 2066 bytes .../src/assets/icon/favicon-96x96.png | Bin 0 -> 5597 bytes angular-starter/src/assets/icon/favicon.ico | Bin 0 -> 1150 bytes .../src/assets/icon/ms-icon-144x144.png | Bin 0 -> 8433 bytes .../src/assets/icon/ms-icon-150x150.png | Bin 0 -> 8878 bytes .../src/assets/icon/ms-icon-310x310.png | Bin 0 -> 24136 bytes .../src/assets/icon/ms-icon-70x70.png | Bin 0 -> 4124 bytes angular-starter/src/assets/img/angular.png | Bin 0 -> 18982 bytes angular-starter/src/assets/img/tipe.png | Bin 0 -> 45881 bytes angular-starter/src/assets/manifest.json | 35 + .../src/assets/mock-data/mock-data.json | 3 + angular-starter/src/assets/robots.txt | 3 + angular-starter/src/assets/service-worker.js | 1 + angular-starter/src/custom-typings.d.ts | 141 + .../src/environments/environment.e2e.prod.ts | 26 + .../src/environments/environment.prod.ts | 26 + .../src/environments/environment.ts | 36 + angular-starter/src/environments/model.ts | 8 + angular-starter/src/index.html | 55 + angular-starter/src/main.browser.ts | 40 + angular-starter/src/meta/humans.txt | 17 + angular-starter/src/meta/robots.txt | 3 + angular-starter/src/polyfills.browser.ts | 79 + angular-starter/src/styles/_variables.scss | 1 + angular-starter/src/styles/headings.css | 3 + angular-starter/src/styles/styles.scss | 19 + angular-starter/tsconfig.json | 46 + angular-starter/tsconfig.webpack.json | 43 + angular-starter/tslint.json | 62 + angular-starter/typedoc.json | 15 + angular-starter/webpack.config.js | 21 + angular-starter/yarn.lock | 8910 ++++++++ 141 files changed, 31893 insertions(+) create mode 100644 angular-starter/.dockerignore create mode 100644 angular-starter/.editorconfig create mode 100644 angular-starter/.gitattributes create mode 100644 angular-starter/.github/CONTRIBUTING.md create mode 100644 angular-starter/.github/ISSUE_TEMPLATE.md create mode 100644 angular-starter/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 angular-starter/.gitignore create mode 100644 angular-starter/.nvmrc create mode 100644 angular-starter/.travis.yml create mode 100644 angular-starter/.vscode/launch.json create mode 100644 angular-starter/.vscode/settings.json create mode 100644 angular-starter/Dockerfile create mode 100644 angular-starter/LICENSE create mode 100644 angular-starter/README.md create mode 100644 angular-starter/config/build-utils.js create mode 100644 angular-starter/config/config.common.json create mode 100644 angular-starter/config/config.dev.json create mode 100644 angular-starter/config/config.prod.json create mode 100644 angular-starter/config/empty.js create mode 100644 angular-starter/config/github-deploy/index.js create mode 100644 angular-starter/config/head-config.common.js create mode 100644 angular-starter/config/helpers.js create mode 100644 angular-starter/config/html-elements-plugin/index.js create mode 100644 angular-starter/config/karma.conf.js create mode 100644 angular-starter/config/nginx-custom.conf create mode 100644 angular-starter/config/protractor.conf.js create mode 100644 angular-starter/config/resource-override.js create mode 100644 angular-starter/config/spec-bundle.js create mode 100644 angular-starter/config/webpack.common.js create mode 100644 angular-starter/config/webpack.dev.js create mode 100644 angular-starter/config/webpack.github-deploy.js create mode 100644 angular-starter/config/webpack.prod.js create mode 100644 angular-starter/config/webpack.test.js create mode 100644 angular-starter/docker-compose.yml create mode 100644 angular-starter/firebase.json create mode 100644 angular-starter/karma.conf.js create mode 100644 angular-starter/netlify.toml create mode 100644 angular-starter/package-lock.json create mode 100644 angular-starter/package.json create mode 100644 angular-starter/protractor.conf.js create mode 100644 angular-starter/sonar-project.properties create mode 100644 angular-starter/src/app/+barrel/+child-barrel/child-barrel.component.ts create mode 100644 angular-starter/src/app/+barrel/+child-barrel/child-barrel.module.ts create mode 100644 angular-starter/src/app/+barrel/+child-barrel/child-barrel.routes.ts create mode 100644 angular-starter/src/app/+barrel/+child-barrel/index.ts create mode 100644 angular-starter/src/app/+barrel/barrel.component.ts create mode 100644 angular-starter/src/app/+barrel/barrel.module.ts create mode 100644 angular-starter/src/app/+barrel/barrel.routes.ts create mode 100644 angular-starter/src/app/+barrel/index.ts create mode 100644 angular-starter/src/app/+detail/+child-detail/child-detail.component.ts create mode 100644 angular-starter/src/app/+detail/+child-detail/child-detail.module.ts create mode 100644 angular-starter/src/app/+detail/+child-detail/child-detail.routes.ts create mode 100644 angular-starter/src/app/+detail/+child-detail/index.ts create mode 100644 angular-starter/src/app/+detail/detail.component.ts create mode 100644 angular-starter/src/app/+detail/detail.module.ts create mode 100644 angular-starter/src/app/+detail/detail.routes.ts create mode 100644 angular-starter/src/app/+detail/index.ts create mode 100644 angular-starter/src/app/+dev-module/dev-module.component.ts create mode 100644 angular-starter/src/app/+dev-module/dev-module.module.ts create mode 100644 angular-starter/src/app/+dev-module/dev-module.routes.ts create mode 100644 angular-starter/src/app/+dev-module/index.ts create mode 100644 angular-starter/src/app/about/about.component.spec.ts create mode 100644 angular-starter/src/app/about/about.component.ts create mode 100644 angular-starter/src/app/about/index.ts create mode 100644 angular-starter/src/app/app.component.css create mode 100644 angular-starter/src/app/app.component.spec.ts create mode 100644 angular-starter/src/app/app.component.ts create mode 100644 angular-starter/src/app/app.e2e.ts create mode 100644 angular-starter/src/app/app.module.ts create mode 100644 angular-starter/src/app/app.resolver.ts create mode 100644 angular-starter/src/app/app.routes.ts create mode 100644 angular-starter/src/app/app.service.ts create mode 100644 angular-starter/src/app/home/home.component.css create mode 100644 angular-starter/src/app/home/home.component.html create mode 100644 angular-starter/src/app/home/home.component.spec.ts create mode 100644 angular-starter/src/app/home/home.component.ts create mode 100644 angular-starter/src/app/home/home.e2e.ts create mode 100644 angular-starter/src/app/home/index.ts create mode 100644 angular-starter/src/app/home/title/index.ts create mode 100644 angular-starter/src/app/home/title/title.service.spec.ts create mode 100644 angular-starter/src/app/home/title/title.service.ts create mode 100644 angular-starter/src/app/home/x-large/index.ts create mode 100644 angular-starter/src/app/home/x-large/x-large.directive.spec.ts create mode 100644 angular-starter/src/app/home/x-large/x-large.directive.ts create mode 100644 angular-starter/src/app/index.ts create mode 100644 angular-starter/src/app/no-content/index.ts create mode 100644 angular-starter/src/app/no-content/no-content.component.ts create mode 100644 angular-starter/src/assets/css/.gitkeep create mode 100644 angular-starter/src/assets/data.json create mode 100644 angular-starter/src/assets/humans.txt create mode 100644 angular-starter/src/assets/icon/android-icon-144x144.png create mode 100644 angular-starter/src/assets/icon/android-icon-192x192.png create mode 100644 angular-starter/src/assets/icon/android-icon-36x36.png create mode 100644 angular-starter/src/assets/icon/android-icon-48x48.png create mode 100644 angular-starter/src/assets/icon/android-icon-72x72.png create mode 100644 angular-starter/src/assets/icon/android-icon-96x96.png create mode 100644 angular-starter/src/assets/icon/apple-icon-114x114.png create mode 100644 angular-starter/src/assets/icon/apple-icon-120x120.png create mode 100644 angular-starter/src/assets/icon/apple-icon-144x144.png create mode 100644 angular-starter/src/assets/icon/apple-icon-152x152.png create mode 100644 angular-starter/src/assets/icon/apple-icon-180x180.png create mode 100644 angular-starter/src/assets/icon/apple-icon-57x57.png create mode 100644 angular-starter/src/assets/icon/apple-icon-60x60.png create mode 100644 angular-starter/src/assets/icon/apple-icon-72x72.png create mode 100644 angular-starter/src/assets/icon/apple-icon-76x76.png create mode 100644 angular-starter/src/assets/icon/apple-icon-precomposed.png create mode 100644 angular-starter/src/assets/icon/apple-icon.png create mode 100644 angular-starter/src/assets/icon/browserconfig.xml create mode 100644 angular-starter/src/assets/icon/favicon-16x16.png create mode 100644 angular-starter/src/assets/icon/favicon-32x32.png create mode 100644 angular-starter/src/assets/icon/favicon-96x96.png create mode 100644 angular-starter/src/assets/icon/favicon.ico create mode 100644 angular-starter/src/assets/icon/ms-icon-144x144.png create mode 100644 angular-starter/src/assets/icon/ms-icon-150x150.png create mode 100644 angular-starter/src/assets/icon/ms-icon-310x310.png create mode 100644 angular-starter/src/assets/icon/ms-icon-70x70.png create mode 100644 angular-starter/src/assets/img/angular.png create mode 100644 angular-starter/src/assets/img/tipe.png create mode 100644 angular-starter/src/assets/manifest.json create mode 100644 angular-starter/src/assets/mock-data/mock-data.json create mode 100644 angular-starter/src/assets/robots.txt create mode 100644 angular-starter/src/assets/service-worker.js create mode 100644 angular-starter/src/custom-typings.d.ts create mode 100644 angular-starter/src/environments/environment.e2e.prod.ts create mode 100644 angular-starter/src/environments/environment.prod.ts create mode 100644 angular-starter/src/environments/environment.ts create mode 100644 angular-starter/src/environments/model.ts create mode 100644 angular-starter/src/index.html create mode 100644 angular-starter/src/main.browser.ts create mode 100644 angular-starter/src/meta/humans.txt create mode 100644 angular-starter/src/meta/robots.txt create mode 100644 angular-starter/src/polyfills.browser.ts create mode 100644 angular-starter/src/styles/_variables.scss create mode 100644 angular-starter/src/styles/headings.css create mode 100644 angular-starter/src/styles/styles.scss create mode 100644 angular-starter/tsconfig.json create mode 100644 angular-starter/tsconfig.webpack.json create mode 100644 angular-starter/tslint.json create mode 100644 angular-starter/typedoc.json create mode 100644 angular-starter/webpack.config.js create mode 100644 angular-starter/yarn.lock diff --git a/angular-starter/.dockerignore b/angular-starter/.dockerignore new file mode 100644 index 0000000..24f1eaa --- /dev/null +++ b/angular-starter/.dockerignore @@ -0,0 +1,39 @@ +.git +.github +.vscode +coverage + +# OS generated files # +.DS_Store +ehthumbs.db +Icon? +Thumbs.db + +# Node Files # +node_modules +npm-debug.log +npm-debug.log.* + +# Typing # +src/typings/tsd +typings +tsd_typings + +# Dist # +dist +.awcache +.webpack.json +compiled +dll + +# IDE # +.idea +*.swp + + +# Angular # +*.ngfactory.ts +*.css.shim.ts +*.ngsummary.json +*.shim.ngstyle.ts + diff --git a/angular-starter/.editorconfig b/angular-starter/.editorconfig new file mode 100644 index 0000000..5729271 --- /dev/null +++ b/angular-starter/.editorconfig @@ -0,0 +1,16 @@ +# tipe.io +# http://editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/angular-starter/.gitattributes b/angular-starter/.gitattributes new file mode 100644 index 0000000..70e53ee --- /dev/null +++ b/angular-starter/.gitattributes @@ -0,0 +1 @@ +yarn.lock -diff diff --git a/angular-starter/.github/CONTRIBUTING.md b/angular-starter/.github/CONTRIBUTING.md new file mode 100644 index 0000000..7e46253 --- /dev/null +++ b/angular-starter/.github/CONTRIBUTING.md @@ -0,0 +1,11 @@ +## Read and contribute to the Wiki + +Make sure you read the [Wiki](https://github.com/gdi2290/angular-starter/wiki). + +## Submitting Pull Requests + +If you're changing the structure of the repository please create an issue first. + +## Submitting bug reports + +Make sure you are on latest changes and that you ran this command `npm run clean:install` after updating your local repository. If you can, please provide more information about your environment such as browser, operating system, node version, and npm version. diff --git a/angular-starter/.github/ISSUE_TEMPLATE.md b/angular-starter/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..3f34f89 --- /dev/null +++ b/angular-starter/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,36 @@ +**Note: for support questions, please use one of these channels:** [Chat: AngularClass.slack](http://angularclass.com/member-join/) or [Twitter: @TipeIO](https://twitter.com/TipeIO) + +* **I'm submitting a ...** +[ ] bug report +[ ] feature request +[ ] question about the decisions made in the repository + +* **Do you want to request a *feature* or report a *bug*?** + + + +* **What is the current behavior?** + + + +* **If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem** via +https://plnkr.co or similar (you can use this template as a starting point: http://plnkr.co/edit/tpl:AvJOMERrnz94ekVua0u5). + + + +* **What is the expected behavior?** + + + +* **What is the motivation / use case for changing the behavior?** + + + +* **Please tell us about your environment:** + +- Angular version: 4.x.x +- Browser: [all | Chrome XX | Firefox XX | IE XX | Safari XX | Mobile Chrome XX | Android X.X Web Browser | iOS XX Safari | iOS XX UIWebView | iOS XX WKWebView ] + + + +* **Other information** (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, gitter, etc) diff --git a/angular-starter/.github/PULL_REQUEST_TEMPLATE.md b/angular-starter/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..caae6b1 --- /dev/null +++ b/angular-starter/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +* **What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...) + + + +* **What is the current behavior?** (You can also link to an open issue here) + + + +* **What is the new behavior (if this is a feature change)?** + + + +* **Other information**: diff --git a/angular-starter/.gitignore b/angular-starter/.gitignore new file mode 100644 index 0000000..4622bb0 --- /dev/null +++ b/angular-starter/.gitignore @@ -0,0 +1,79 @@ +# tipe.io + +# Logs +logs +*.log + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# SonarQube sonar-scanner temp directory +.scannerwork + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Users Environment Variables +.lock-wscript + +# OS generated files # +.DS_Store +ehthumbs.db +Icon? +Thumbs.db + +# Node Files # +/node_modules/ +/bower_components/ +npm-debug.log +/npm-debug.log.* + +# Coverage # +/coverage/ + +# Generic Unit Sonar Reports # +/reports/ + +# Typing # +/src/typings/tsd/ +/typings/ +/tsd_typings/ + +# Dist # +/dist +/public/__build__/ +/src/*/__build__/ +/__build__/** +/public/dist/ +/src/*/dist/ +/dist/** +/.awcache +.webpack.json +/compiled/ +dll/ + +# Doc # +/doc/ +/documentation/ + +# IDE # +.idea/ +*.swp + + +# Angular # +*.ngfactory.ts +*.css.shim.ts +*.ngsummary.json +*.shim.ngstyle.ts diff --git a/angular-starter/.nvmrc b/angular-starter/.nvmrc new file mode 100644 index 0000000..b009dfb --- /dev/null +++ b/angular-starter/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/angular-starter/.travis.yml b/angular-starter/.travis.yml new file mode 100644 index 0000000..49c6a52 --- /dev/null +++ b/angular-starter/.travis.yml @@ -0,0 +1,30 @@ +sudo: false +dist: trusty +language: node_js + +cache: + directories: + - node_modules + +addons: + chrome: stable + +node_js: + - "6" + - "7" + - "8" + +matrix: + fast_finish: true + +before_install: + - npm install npm@5 -g + - npm cache verify + - npm prune + - npm update + +install: + - npm install + +script: + - npm run ci:travis diff --git a/angular-starter/.vscode/launch.json b/angular-starter/.vscode/launch.json new file mode 100644 index 0000000..9fe889a --- /dev/null +++ b/angular-starter/.vscode/launch.json @@ -0,0 +1,27 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Launch Chrome against localhost, with sourcemaps", + "type": "chrome", + "request": "launch", + "url": "http://localhost:3000/*", + "runtimeArgs": [ + "--disable-web-security", + "--user-data-dir", + "--remote-debugging-port=9222" + ], + "sourceMaps": true, + "webRoot": "${workspaceRoot}" + }, + { + "name": "Attach to Chrome, with sourcemaps", + "type": "chrome", + "request": "attach", + "url": "http://localhost:3000/*", + "port": 9222, + "sourceMaps": true, + "webRoot": "${workspaceRoot}" + } + ] +} diff --git a/angular-starter/.vscode/settings.json b/angular-starter/.vscode/settings.json new file mode 100644 index 0000000..edce536 --- /dev/null +++ b/angular-starter/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib/" +} diff --git a/angular-starter/Dockerfile b/angular-starter/Dockerfile new file mode 100644 index 0000000..f74a52d --- /dev/null +++ b/angular-starter/Dockerfile @@ -0,0 +1,39 @@ +# Usage: +# +# Build image: +# docker build -t angular-starter . +# +# Run image (on localhost:8080): +# docker run --name angular-starter -p 8080:80 angular-starter +# +# Run image as virtual host (read more: https://github.com/jwilder/nginx-proxy): +# docker run -e VIRTUAL_HOST=angular-starter.your-domain.com --name angular-starter angular-starter + +# Stage 1, based on Node.js, to build and compile Angular + +FROM node:8.9.4-alpine as builder + +COPY package.json ./ + +## Storing node modules on a separate layer will prevent unnecessary npm installs at each build +RUN npm i && mkdir /ng-app && mv ./node_modules ./ng-app + +WORKDIR /ng-app + +COPY . . + +RUN npm run build:aot:prod + +# Stage 2, based on Nginx, to have only the compiled app, ready for production with Nginx + +FROM nginx:1.13.9-alpine + +COPY ./config/nginx-custom.conf /etc/nginx/conf.d/default.conf + +## Remove default nginx website +RUN rm -rf /usr/share/nginx/html/* + +## From ‘builder’ stage copy over the artifacts in dist folder to default nginx public folder +COPY --from=builder /ng-app/dist /usr/share/nginx/html + +CMD ["nginx", "-g", "daemon off;"] diff --git a/angular-starter/LICENSE b/angular-starter/LICENSE new file mode 100644 index 0000000..3c39f2b --- /dev/null +++ b/angular-starter/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2018 PatrickJS, Tipe Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/angular-starter/README.md b/angular-starter/README.md new file mode 100644 index 0000000..0b90d0e --- /dev/null +++ b/angular-starter/README.md @@ -0,0 +1,508 @@ +

+ + Tipe + +

+ +___ + +[![taylor swift](https://img.shields.io/badge/secured%20by-taylor%20swift-brightgreen.svg)](https://twitter.com/SwiftOnSecurity) +[![volkswagen status](https://auchenberg.github.io/volkswagen/volkswargen_ci.svg?v=1)](https://github.com/auchenberg/volkswagen) +[![Build Status](https://travis-ci.org/gdi2290/angular-starter.svg?branch=master)](https://travis-ci.org/gdi2290/angular-starter) +[![GitHub version](https://badge.fury.io/gh/gdi2290%2Fangular-starter.svg)](https://badge.fury.io/gh/gdi2290%2Fangular-starter) +[![Dependency Status](https://david-dm.org/gdi2290/angular-starter.svg)](https://david-dm.org/gdi2290/angular-starter) +[![Stack Share](http://img.shields.io/badge/tech-stack-0690fa.svg?style=flat)](http://stackshare.io/gdi2290/angular-starter) + +

+ + Angular Starter + +

+ +# Angular Webpack Starter [![Join the chat at https://gitter.im/angularclass/angular2-webpack-starter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angularclass/angular2-webpack-starter?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + + +> An Angular starter kit featuring [Angular 5](https://angular.io), [Ahead of Time Compile](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html), [Router](https://angular.io/docs/ts/latest/guide/router.html), [Forms](https://angular.io/docs/ts/latest/guide/forms.html), +[Http](https://angular.io/docs/ts/latest/guide/server-communication.html), +[Services](https://gist.github.com/gdi2290/634101fec1671ee12b3e#_follow_@AngularClass_on_twitter), +[Tests](https://angular.io/docs/ts/latest/guide/testing.html), [E2E](https://angular.github.io/protractor/#/faq#what-s-the-difference-between-karma-and-protractor-when-do-i-use-which-)), [Karma](https://karma-runner.github.io/), [Protractor](https://angular.github.io/protractor/), [Jasmine](https://github.com/jasmine/jasmine), [Istanbul](https://github.com/gotwarlost/istanbul), [TypeScript](http://www.typescriptlang.org/), [@types](https://www.npmjs.com/~types), [TsLint](http://palantir.github.io/tslint/), [Codelyzer](https://github.com/mgechev/codelyzer), [Hot Module Replacement](https://webpack.github.io/docs/hot-module-replacement-with-webpack.html), and [Webpack](http://webpack.github.io/) by [Tipe](https://tipe.io). + +> If you're looking for Angular 1.x please use [NG6-starter](https://github.com/gdi2290/NG6-starter) +> If you're looking to learn about Webpack and ES6 Build Tools check out [ES6-build-tools](https://github.com/AngularClass/ES6-build-tools) +> If you're looking to learn TypeScript see [TypeStrong/learn-typescript](https://github.com/TypeStrong/learn-typescript) +> If you're looking for something easier to get started with then see the angular-seed that I also maintain [gdi2290/angular-seed](https://github.com/gdi2290/angular-seed) + +This seed repo serves as an Angular starter for anyone looking to get up and running with Angular and TypeScript fast. Using a [Webpack 3](https://webpack.js.org) for building our files and assisting with boilerplate. We're also using Protractor for our end-to-end story and Karma for our unit tests. +* Best practices in file and application organization for Angular. +* Ready to go build system using Webpack for working with TypeScript. +* Angular examples that are ready to go when experimenting with Angular. +* A great Angular seed repo for anyone who wants to start their project. +* Ahead of Time (AoT) compile for rapid page loads of your production builds. +* Tree shaking to automatically remove unused code from your production bundle. +* [Webpack DLLs](https://robertknight.github.io/posts/webpack-dll-plugins/) dramatically speed your development builds. +* Testing Angular code with Jasmine and Karma. +* Coverage with Istanbul and Karma +* End-to-end Angular app testing using Protractor. +* Type manager with @types +* Hot Module Replacement with Webpack and [@gdi2290/hmr](https://github.com/gdi2290/angular-hmr) and [@gdi2290/hmr-loader](https://github.com/gdi2290/angular-hmr-loader) + +### Quick start +**Make sure you have Node version >= 6.0 and NPM >= 3** +> Clone/Download the repo then edit `app.component.ts` inside [`/src/app/app.component.ts`](/src/app/app.component.ts) + +```bash +# clone our repo +# --depth 1 removes all but one .git commit history +git clone --depth 1 https://github.com/gdi2290/angular-starter.git + +# change directory to our repo +cd angular-starter + +# install the repo with npm +npm install + +# start the server +npm start + +# use Hot Module Replacement +npm run server:dev:hmr + +# if you're in China use cnpm +# https://github.com/cnpm/cnpm +``` +go to [http://0.0.0.0:3000](http://0.0.0.0:3000) or [http://localhost:3000](http://localhost:3000) in your browser + +# Table of Contents +* [File Structure](#file-structure) +* [Getting Started](#getting-started) + * [Dependencies](#dependencies) + * [Installing](#installing) + * [Running the app](#running-the-app) +* [Configuration](#configuration) +* [AoT Don'ts](#aot-donts) +* [External Stylesheets](#external-stylesheets) +* [Contributing](#contributing) +* [TypeScript](#typescript) +* [@Types](#types) +* [Frequently asked questions](#frequently-asked-questions) +* [Support, Questions, or Feedback](#support-questions-or-feedback) +* [Deployment](#deployment) +* [License](#license) + + +## File Structure +We use the component approach in our starter. This is the new standard for developing Angular apps and a great way to ensure maintainable code by encapsulation of our behavior logic. A component is basically a self contained app usually in a single file or a folder with each concern as a file: style, template, specs, e2e, and component class. Here's how it looks: +``` +angular-starter/ + ├──config/ * our configuration + | ├──helpers.js * helper functions for our configuration files + | ├──spec-bundle.js * ignore this magic that sets up our Angular testing environment + | ├──karma.conf.js * karma config for our unit tests + | ├──protractor.conf.js * protractor config for our end-to-end tests + │ ├──webpack.dev.js * our development webpack config + │ ├──webpack.prod.js * our production webpack config + │ └──webpack.test.js * our testing webpack config + │ + ├──src/ * our source files that will be compiled to javascript + | ├──main.browser.ts * our entry file for our browser environment + │ │ + | ├──index.html * Index.html: where we generate our index page + │ │ + | ├──polyfills.ts * our polyfills file + │ │ + │ ├──app/ * WebApp: folder + │ │ ├──app.component.spec.ts * a simple test of components in app.component.ts + │ │ ├──app.e2e.ts * a simple end-to-end test for / + │ │ └──app.component.ts * a simple version of our App component components + │ │ + │ └──assets/ * static assets are served here + │ ├──icon/ * our list of icons from www.favicon-generator.org + │ ├──service-worker.js * ignore this. Web App service worker that's not complete yet + │ ├──robots.txt * for search engines to crawl your website + │ └──humans.txt * for humans to know who the developers are + │ + │ + ├──tslint.json * typescript lint config + ├──typedoc.json * typescript documentation generator + ├──tsconfig.json * typescript config used outside webpack + ├──tsconfig.webpack.json * config that webpack uses for typescript + ├──package.json * what npm uses to manage its dependencies + └──webpack.config.js * webpack main configuration file + +``` + +# Getting Started +## Dependencies +What you need to run this app: +* `node` and `npm` (`brew install node`) +* Ensure you're running the latest versions Node `v6.x.x`+ (or `v7.x.x`) and NPM `3.x.x`+ + +> If you have `nvm` installed, which is highly recommended (`brew install nvm`) you can do a `nvm install --lts && nvm use` in `$` to run with the latest Node LTS. You can also have this `zsh` done for you [automatically](https://github.com/creationix/nvm#calling-nvm-use-automatically-in-a-directory-with-a-nvmrc-file) + +Once you have those, you should install these globals with `npm install --global`: +* `webpack` (`npm install --global webpack`) +* `webpack-dev-server` (`npm install --global webpack-dev-server`) +* `karma` (`npm install --global karma-cli`) +* `protractor` (`npm install --global protractor`) +* `typescript` (`npm install --global typescript`) +* `tslint` (`npm install --global tslint@4.5.1`) + +## Installing +* `fork` this repo +* `clone` your fork +* `npm install webpack-dev-server rimraf webpack -g` to install required global dependencies +* `npm install` to install all dependencies or `yarn` +* `npm run server` to start the dev server in another tab + +## Running the app +After you have installed all dependencies you can now run the app. Run `npm run server` to start a local server using `webpack-dev-server` which will watch, build (in-memory), and reload for you. The port will be displayed to you as `http://0.0.0.0:3000` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3000/`). + +### server +```bash +# development +npm run server +# production +npm run build:prod +npm run server:prod +``` + +## Other commands + +### build files +```bash +# development +npm run build:dev +# production (jit) +npm run build:prod +# AoT +npm run build:aot +``` + +### hot module replacement +```bash +npm run server:dev:hmr +``` + +### watch and build files +```bash +npm run watch +``` + +### run unit tests +```bash +npm run test +``` + +### watch and run our tests +```bash +npm run watch:test +``` + +### run end-to-end tests +```bash +# update Webdriver (optional, done automatically by postinstall script) +npm run webdriver:update +# this will start a test server and launch Protractor +npm run e2e +``` + +### continuous integration (run unit tests and e2e tests together) +```bash +# this will test both your JIT and AoT builds +npm run ci +``` + +### run Protractor's elementExplorer (for end-to-end) +```bash +npm run e2e:live +``` + +### build Docker +```bash +npm run build:docker +``` + +# Configuration +Configuration files live in `config/` we are currently using webpack, karma, and protractor for different stages of your application + +# AoT Don'ts +The following are some things that will make AoT compile fail. + +- Don’t use require statements for your templates or styles, use styleUrls and templateUrls, the angular2-template-loader plugin will change it to require at build time. +- Don’t use default exports. +- Don’t use `form.controls.controlName`, use `form.get(‘controlName’)` +- Don’t use `control.errors?.someError`, use `control.hasError(‘someError’)` +- Don’t use functions in your providers, routes or declarations, export a function and then reference that function name +- @Inputs, @Outputs, View or Content Child(ren), Hostbindings, and any field you use from the template or annotate for Angular should be public + +For more detailed guide on AoT's Do's and Don'ts refer to https://github.com/rangle/angular-2-aot-sandbox + +# External Stylesheets +Any stylesheets (Sass or CSS) placed in the `src/styles` directory and imported into your project will automatically be compiled into an external `.css` and embedded in your production builds. + +For example to use Bootstrap as an external stylesheet: +1) Create a `styles.scss` file (name doesn't matter) in the `src/styles` directory. +2) `npm install` the version of Boostrap you want. +3) In `styles.scss` add `@import '~bootstrap/scss/bootstrap.scss';` +4) In `src/app/app.module.ts` add underneath the other import statements: `import '../styles/styles.scss';` + +# Contributing +You can include more examples as components but they must introduce a new concept such as `Home` component (separate folders), and Todo (services). I'll accept pretty much everything so feel free to open a Pull-Request + +# TypeScript +> To take full advantage of TypeScript with autocomplete you would have to install it globally and use an editor with the correct TypeScript plugins. + +## Use latest TypeScript compiler +TypeScript 2.7.x includes everything you need. Make sure to upgrade, even if you installed TypeScript previously. + +``` +npm install --global typescript +``` + +## Use a TypeScript-aware editor +We have good experience using these editors: + +* [Visual Studio Code](https://code.visualstudio.com/) +* [Webstorm 10](https://www.jetbrains.com/webstorm/download/) +* [Atom](https://atom.io/) with [TypeScript plugin](https://atom.io/packages/atom-typescript) +* [Sublime Text](http://www.sublimetext.com/3) with [Typescript-Sublime-Plugin](https://github.com/Microsoft/Typescript-Sublime-plugin#installation) + +### Visual Studio Code + Debugger for Chrome +> Install [Debugger for Chrome](https://marketplace.visualstudio.com/items?itemName=msjsdiag.debugger-for-chrome) and see docs for instructions to launch Chrome + +The included `.vscode` automatically connects to the webpack development server on port `3000`. + +# Types +> When you include a module that doesn't include Type Definitions inside of the module you can include external Type Definitions with @types + +i.e, to have youtube api support, run this command in terminal: +```shell +npm i @types/youtube @types/gapi @types/gapi.youtube +``` +In some cases where your code editor doesn't support Typescript 2 yet or these types weren't listed in ```tsconfig.json```, add these to **"src/custom-typings.d.ts"** to make peace with the compile check: +```es6 +import '@types/gapi.youtube'; +import '@types/gapi'; +import '@types/youtube'; +``` + +## Custom Type Definitions +When including 3rd party modules you also need to include the type definition for the module +if they don't provide one within the module. You can try to install it with @types + +``` +npm install @types/node +npm install @types/lodash +``` + +If you can't find the type definition in the registry we can make an ambient definition in +this file for now. For example + +```typescript +declare module "my-module" { + export function doesSomething(value: string): string; +} +``` + + +If you're prototyping and you will fix the types later you can also declare it as type any + +```typescript +declare var assert: any; +declare var _: any; +declare var $: any; +``` + +If you're importing a module that uses Node.js modules which are CommonJS you need to import as + +```typescript +import * as _ from 'lodash'; +``` + + +# Frequently asked questions +* What's the current browser support for Angular? + * Please view the updated list of [browser support for Angular](https://github.com/gdi2290/awesome-angular#current-browser-support-for-angular) +* Why is my service, aka provider, is not injecting parameter correctly? + * Please use `@Injectable()` for your service for typescript to correctly attach the metadata (this is a TypeScript problem) +* Where do I write my tests? + * You can write your tests next to your component files. See [`/src/app/home/home.component.spec.ts`](/src/app/home/home.component.spec.ts) +* How do I start the app when I get `EACCES` and `EADDRINUSE` errors? + * The `EADDRINUSE` error means the port `3000` is currently being used and `EACCES` is lack of permission for webpack to build files to `./dist/` +* How to use `sass` for css? + * * `loaders: ['raw-loader','sass-loader']` and `@Component({ styleUrls: ['./filename.scss'] })` see Wiki page [How to include SCSS in components](https://github.com/gdi2290/angular-starter/wiki/How-to-include-SCSS-in-components), or issue [#136](https://github.com/gdi2290/angular-starter/issues/136) for more information. +* How do I test a Service? + * See issue [#130](https://github.com/gdi2290/angular-starter/issues/130#issuecomment-158872648) +* How do I add `vscode-chrome-debug` support? + * The VS Code chrome debug extension support can be done via `launch.json` see issue [#144](https://github.com/gdi2290/angular-starter/issues/144#issuecomment-164063790) +* How do I make the repo work in a virtual machine? + * You need to use `0.0.0.0` so revert these changes [#205](https://github.com/gdi2290/angular-starter/pull/205/files) +* What are the naming conventions for Angular? + * please see issue [#185](https://github.com/gdi2290/angular-starter/issues/185) and PR [196](https://github.com/gdi2290/angular-starter/pull/196) +* How do I include bootstrap or jQuery? + * please see issue [#215](https://github.com/gdi2290/angular-starter/issues/215) and [#214](https://github.com/gdi2290/angular-starter/issues/214#event-511768416) +* How do I async load a component? + * see wiki [How-do-I-async-load-a-component-with-AsyncRoute](https://github.com/gdi2290/angular-starter/wiki/How-do-I-async-load-a-component-with-AsyncRoute) +* Error: Cannot find module 'tapable' + * Remove `node_modules/` and run `npm cache clean` then `npm install` +* How do I turn on Hot Module Replacement + * Run `npm run server:dev:hmr` +* `RangeError: Maximum call stack size exceeded` + * This is a problem with minifying Angular and it's recent JIT templates. If you set `mangle` to `false` then you should be good. +* Why is the size of my app larger in development? + * We are using inline source-maps and hot module replacement which will increase the bundle size. +* If you're in China + * check out https://github.com/cnpm/cnpm +* node-pre-gyp ERR in npm install (Windows) + * often happens when you're behind proxy and proxy wasn't configured in the npm as it tries to download binary package from the github and if it fails to do so, it will try to compile node-sass from the source codes + * install Python x86 version 2.x and on windows see issue [#626](https://github.com/gdi2290/angular-starter/issues/626) +* `Error:Error: Parse tsconfig error [{"messageText":"Unknown compiler option 'lib'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'strictNullChecks'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'baseUrl'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'paths'.","category":1,"code":5023},{"messageText":"Unknown compiler option 'types'.","category":1,"code":5023}]` + * remove `node_modules/typescript` and run `npm install typescript@beta`. This repo now uses ts 2.0 +* "There are multiple modules with names that only differ in casing" + * change `c:\[path to angular-starter]` to `C:\[path to angular-starter]` see [926#issuecomment-245223547](https://github.com/gdi2290/angular-starter/issues/926#issuecomment-245223547) + +# Support, Questions, or Feedback +> Contact us anytime for anything about this repo or Angular + +* [Twitter: @TipeIO](https://twitter.com/TipeIO) +* [Gitter: AngularClass/angular2-webpack-starter](https://gitter.im/angularclass/angular2-webpack-starter) + +# Deployment + +## Docker + +To run project you only need host machine with **operating system** with installed **git** (to clone this repo) +and [docker](https://www.docker.com/) and thats all - any other software is not needed +(other software like node.js etc. will be automatically downloaded and installed inside docker container during build step based on dockerfile). + +### Install docker + +#### MacOS: + +`brew cask install docker` + +And run docker by Mac bottom menu> launchpad > docker (on first run docker will ask you about password) + +#### Ubuntu: + +``` +sudo apt-get update +sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D +sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main' +sudo apt-get update +apt-cache policy docker-engine +sudo apt-get install -y docker-engine +sudo systemctl status docker # test: should be ‘active’ +``` +And add your user to docker group (to avoid `sudo` before using `docker` command in future): +``` +sudo usermod -aG docker $(whoami) +``` +and logout and login again. + +### Build image + +Because *node.js* is big memory consumer you need 1-2GB RAM or virtual memory to build docker image +(it was successfully tested on machine with 512MB RAM + 2GB virtual memory - building process take 7min) + +Go to main project folder. To build image type: + +`docker build -t angular-starter .` + +The **angular-starter** name used in above commands is only example image name. +To remove intermediate images created by docker on build process, type: + +`docker rmi -f $(docker images -f "dangling=true" -q)` + +### Run image + +To run created docker image on [localhost:8080](localhost:8080) type (parameter `-p 8080:80` is host:container port mapping) + +`docker run --name angular-starter -p 8080:80 angular-starter &` + +And that's all, you can open browser and go to [localhost:8080](localhost:8080). + +### Build and Run image using docker-compose + +To create and run docker image on [localhost:8080](localhost:8080) as part of large project you may use **docker-compose**. Type + +`docker-compose up` + +And that's all, you can open browser and go to [localhost:8080](localhost:8080). + + +### Run image on sub-domain + +If you want to run image as virtual-host on sub-domain you must setup [proxy](https://github.com/jwilder/nginx-proxy). You should install proxy and set sub-domain in this way: + + ``` + docker run -d -p 80:80 --name nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy:alpine + ``` + + And in your `/etc/hosts` file (linux) add line: `127.0.0.1 angular-starter.your-domain.com` or in yor hosting add + folowing DNS record (wildchar `*` is handy because when you add new sub-domain in future, you don't need to touch/add any DNS record) + + ``` + Type: CNAME + Hostname: *.your-domain.com + Direct to: your-domain.com + TTL(sec): 43200 + ``` + +And now you are ready to run image on subdomain by: + +``` +docker run -e VIRTUAL_HOST=angular-starter.your-domain.com --name angular-starter angular-starter & +``` + +### Login into docker container + +`docker exec -t -i angular-starter /bin/bash` + +## Netlify + +You can quickly create a free site to get started using this +starter kit in production on [Netlify](https://www.netlify.com/): + +[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/AngularClass/angular-starter) + +### Optional Integration with SonarQube (for continous code quality) +Assuming you have SonarQube 5.5.6 (LTS) installed +* Setup SonarQube with the [Sonar Typescript plugin](https://github.com/Pablissimo/SonarTsPlugin#installation) and the Generic Test Coverage plugin https://docs.sonarqube.org/display/PLUG/Generic+Test+Coverage +* Install sonar-scanner globally +```bash +npm install --global sonar-scanner +``` +* Install the [Karma plugin for sonarqube](https://www.npmjs.com/package/karma-sonarqube-unit-reporter) as a dev dependency +```bash +npm install karma-sonarqube-unit-reporter --save-dev +``` +* Sonar Host URL configuration: +Update [`sonar-project.properties`](sonar-project.properties) file for the property `sonar.host.url` to point to your SonarQube server. By default this assumes that the SonarQube server is running locally using the default port +``` +sonar.host.url= +``` +* Run the unit tests with sonar reporter enabled +```bash +npm run test:sonar +``` +* The test results collected in the results folder in the sonar compatible format +* Push results to SonarCube +```bash +sonar-scanner +``` +* If working with SonarQube 6.x it supports [Generic Test Data](https://docs.sonarqube.org/display/SONAR/Generic+Test+Data) +* Modify the [karma.conf.js](config/karma.config.js) to set the appropriate version of the sonarQube +```es6 +sonarQubeUnitReporter: { + sonarQubeVersion: '6.x', +} +``` +___ + +enjoy — [**PatrickJS**](https://twitter.com/gdi2290) + +___ + +# License + [MIT](/LICENSE) diff --git a/angular-starter/config/build-utils.js b/angular-starter/config/build-utils.js new file mode 100644 index 0000000..6e94e92 --- /dev/null +++ b/angular-starter/config/build-utils.js @@ -0,0 +1,131 @@ +const ts = require('typescript'); +const path = require('path'); +const fs = require('fs'); +const helpers = require('./helpers'); + +const APP_COMMON_CONFIG = require('./config.common.json'); + +const DEFAULT_METADATA = { + title: APP_COMMON_CONFIG.title, + description: APP_COMMON_CONFIG.description, + baseUrl: '/', + isDevServer: helpers.isWebpackDevServer(), + HMR: helpers.hasProcessFlag('hot'), + AOT: process.env.BUILD_AOT || helpers.hasNpmFlag('aot'), + E2E: !!process.env.BUILD_E2E, + WATCH: helpers.hasProcessFlag('watch'), + tsConfigPath: 'tsconfig.webpack.json', + + /** + * This suffix is added to the environment.ts file, if not set the default environment file is loaded (development) + * To disable environment files set this to null + */ + envFileSuffix: '' +}; + +function supportES2015(tsConfigPath) { + if (!supportES2015.hasOwnProperty('supportES2015')) { + const tsTarget = readTsConfig(tsConfigPath).options.target; + supportES2015['supportES2015'] = tsTarget !== ts.ScriptTarget.ES3 && tsTarget !== ts.ScriptTarget.ES5; + } + return supportES2015['supportES2015']; +} + +function readTsConfig(tsConfigPath) { + const configResult = ts.readConfigFile(tsConfigPath, ts.sys.readFile); + return ts.parseJsonConfigFileContent(configResult.config, ts.sys, + path.dirname(tsConfigPath), undefined, tsConfigPath); +} + +function getEnvFile(suffix) { + if (suffix && suffix[0] !== '.') { + suffix = '.' + suffix; + } + + if (suffix === null) { + return; + } + + let fileName = helpers.root(`src/environments/environment${suffix}.ts`); + if (fs.existsSync(fileName)) { + return fileName; + } else if (fs.existsSync(fileName = helpers.root('src/environments/environment.ts'))) { + console.warn(`Could not find environment file with suffix ${suffix}, loading default environment file`); + return fileName; + } else { + throw new Error('Environment file not found.') + } +} + +/** + * Read the tsconfig to determine if we should prefer ES2015 modules. + * Load rxjs path aliases. + * https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md#build-and-treeshaking + * @param supportES2015 Set to true when the output of typescript is >= ES6 + */ +function rxjsAlias(supportES2015) { + try { + const rxjsPathMappingImport = supportES2015 ? 'rxjs/_esm2015/path-mapping' : 'rxjs/_esm5/path-mapping'; + const rxPaths = require(rxjsPathMappingImport); + return rxPaths(helpers.root('node_modules')); + } catch (e) { + return {}; + } +} + +function ngcWebpackSetup(prod, metadata) { + if (!metadata) { + metadata = DEFAULT_METADATA; + } + + const buildOptimizer = prod && metadata.AOT; + const sourceMap = true; // TODO: apply based on tsconfig value? + const ngcWebpackPluginOptions = { + skipCodeGeneration: !metadata.AOT, + sourceMap + }; + + const environment = getEnvFile(metadata.envFileSuffix); + if (environment) { + ngcWebpackPluginOptions.hostReplacementPaths = { + [helpers.root('src/environments/environment.ts')]: environment + } + } + + if (!prod && metadata.WATCH) { + // Force commonjs module format for TS on dev watch builds. + ngcWebpackPluginOptions.compilerOptions = { + module: 'commonjs' + }; + } + + const buildOptimizerLoader = { + loader: '@angular-devkit/build-optimizer/webpack-loader', + options: { + sourceMap + } + }; + + const loaders = [ + { + test: /(?:\.ngfactory\.js|\.ngstyle\.js|\.ts)$/, + use: buildOptimizer ? [ buildOptimizerLoader, '@ngtools/webpack' ] : [ '@ngtools/webpack' ] + }, + ...buildOptimizer + ? [ { test: /\.js$/, use: [ buildOptimizerLoader ] } ] + : [] + ]; + + return { + loaders, + plugin: ngcWebpackPluginOptions + }; +} + + +exports.DEFAULT_METADATA = DEFAULT_METADATA; +exports.supportES2015 = supportES2015; +exports.readTsConfig = readTsConfig; +exports.getEnvFile = getEnvFile; +exports.rxjsAlias = rxjsAlias; +exports.ngcWebpackSetup = ngcWebpackSetup; diff --git a/angular-starter/config/config.common.json b/angular-starter/config/config.common.json new file mode 100644 index 0000000..5ab0d19 --- /dev/null +++ b/angular-starter/config/config.common.json @@ -0,0 +1,4 @@ +{ + "title": "Angular Starter by @gdi2290 from @TipeIO", + "description": "An Angular starter kit featuring Angular 5, Ahead of Time Compile, Router, Forms, Http, Services, Tests, E2E), Karma, Protractor, Jasmine, Istanbul, TypeScript, @types, TsLint, Codelyzer, Hot Module Replacement, and Webpack by Tipe.io" +} diff --git a/angular-starter/config/config.dev.json b/angular-starter/config/config.dev.json new file mode 100644 index 0000000..2f8218e --- /dev/null +++ b/angular-starter/config/config.dev.json @@ -0,0 +1,10 @@ +{ + "firebase": { + "apiKey": "", + "authDomain": "XXXXXX.firebaseapp.com", + "databaseURL": "https://XXXXXX.firebaseio.com", + "projectId": "XXXXXX", + "storageBucket": "XXXXXX.appspot.com", + "messagingSenderId": "000000000000" + } +} diff --git a/angular-starter/config/config.prod.json b/angular-starter/config/config.prod.json new file mode 100644 index 0000000..1ac6fc2 --- /dev/null +++ b/angular-starter/config/config.prod.json @@ -0,0 +1,11 @@ +{ + "firebase": { + "apiKey": "", + "authDomain": "XXXXXX.firebaseapp.com", + "databaseURL": "https://XXXXXX.firebaseio.com", + "projectId": "XXXXXX", + "storageBucket": "XXXXXX.appspot.com", + "messagingSenderId": "000000000000" + }, + "gtmKey" : "GTM-XXXXXXX" +} diff --git a/angular-starter/config/empty.js b/angular-starter/config/empty.js new file mode 100644 index 0000000..6bc5423 --- /dev/null +++ b/angular-starter/config/empty.js @@ -0,0 +1,11 @@ +module.exports = { + hmrModule: function(ngmodule) { + return ngmodule; + }, + NgProbeToken: {}, + HmrState: function() {}, + _createConditionalRootRenderer: function(rootRenderer, extraTokens, coreTokens) { + return rootRenderer; + }, + __platform_browser_private__: {} +}; diff --git a/angular-starter/config/github-deploy/index.js b/angular-starter/config/github-deploy/index.js new file mode 100644 index 0000000..0367f71 --- /dev/null +++ b/angular-starter/config/github-deploy/index.js @@ -0,0 +1,95 @@ +const execSync = require('child_process').execSync; +/** + * Used to merge webpack configs. + */ +const webpackMerge = require('webpack-merge'); // used to merge webpack configs +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const helpers = require('../helpers'); + +const REPO_NAME_RE = /Push {2}URL: ((git@github\.com:)|(https:\/\/github\.com\/)).+\/(.+)\.git/; + +function getWebpackConfigModule(options) { + if (options.githubDev) { + return require('../webpack.dev.js'); + } else if (options.githubProd) { + return require('../webpack.prod.js'); + } else { + throw new Error('Invalid compile option.'); + } +} + +function getRepoName(remoteName) { + remoteName = remoteName || 'origin'; + + var stdout = execSync('git remote show ' + remoteName), + match = REPO_NAME_RE.exec(stdout); + + if (!match) { + throw new Error('Could not find a repository on remote ' + remoteName); + } else { + return match[4]; + } +} + +function stripTrailing(str, char) { + + if (str[0] === char) { + str = str.substr(1); + } + + if (str.substr(-1) === char) { + str = str.substr(0, str.length - 1); + } + + return str; +} + +/** + * Given a string remove trailing slashes and adds 1 slash at the end of the string. + * + * Example: + * safeUrl('/value/') + * // 'value/' + * + * @param url + * @returns {string} + */ +function safeUrl(url) { + const stripped = stripTrailing(url || '', '/'); + return stripped ? stripped + '/' : ''; +} + +function replaceHtmlWebpackPlugin(plugins, ghRepoName) { + for (var i=0; i tags for 'apple-touch-icon' (AKA Web Clips). + */ + { rel: 'apple-touch-icon', sizes: '57x57', href: '/assets/icon/apple-icon-57x57.png' }, + { rel: 'apple-touch-icon', sizes: '60x60', href: '/assets/icon/apple-icon-60x60.png' }, + { rel: 'apple-touch-icon', sizes: '72x72', href: '/assets/icon/apple-icon-72x72.png' }, + { rel: 'apple-touch-icon', sizes: '76x76', href: '/assets/icon/apple-icon-76x76.png' }, + { rel: 'apple-touch-icon', sizes: '114x114', href: '/assets/icon/apple-icon-114x114.png' }, + { rel: 'apple-touch-icon', sizes: '120x120', href: '/assets/icon/apple-icon-120x120.png' }, + { rel: 'apple-touch-icon', sizes: '144x144', href: '/assets/icon/apple-icon-144x144.png' }, + { rel: 'apple-touch-icon', sizes: '152x152', href: '/assets/icon/apple-icon-152x152.png' }, + { rel: 'apple-touch-icon', sizes: '180x180', href: '/assets/icon/apple-icon-180x180.png' }, + + /** + * tags for android web app icons + */ + { rel: 'icon', type: 'image/png', sizes: '192x192', href: '/assets/icon/android-icon-192x192.png' }, + + /** + * tags for favicons + */ + { rel: 'icon', type: 'image/png', sizes: '32x32', href: '/assets/icon/favicon-32x32.png' }, + { rel: 'icon', type: 'image/png', sizes: '96x96', href: '/assets/icon/favicon-96x96.png' }, + { rel: 'icon', type: 'image/png', sizes: '16x16', href: '/assets/icon/favicon-16x16.png' }, + + /** + * tags for a Web App Manifest + */ + { rel: 'manifest', href: '/assets/manifest.json' } + ], + meta: [ + { name: 'msapplication-TileColor', content: '#00bcd4' }, + { name: 'msapplication-TileImage', content: '/assets/icon/ms-icon-144x144.png', '=content': true }, + { name: 'theme-color', content: '#00bcd4' } + ] +}; diff --git a/angular-starter/config/helpers.js b/angular-starter/config/helpers.js new file mode 100644 index 0000000..aae072e --- /dev/null +++ b/angular-starter/config/helpers.js @@ -0,0 +1,31 @@ +/** + * @author: tipe.io + */ +const path = require('path'); + +const EVENT = process.env.npm_lifecycle_event || ''; + +/** + * Helper functions. + */ +var ROOT = path.resolve(__dirname, '..'); + +function hasProcessFlag(flag) { + return process.argv.join('').indexOf(flag) > -1; +} + +function hasNpmFlag(flag) { + return EVENT.includes(flag); +} + +function isWebpackDevServer() { + return process.argv[1] && !! (/webpack-dev-server/.exec(process.argv[1])); +} + + +var root = path.join.bind(path, ROOT); + +exports.hasProcessFlag = hasProcessFlag; +exports.hasNpmFlag = hasNpmFlag; +exports.isWebpackDevServer = isWebpackDevServer; +exports.root = root; diff --git a/angular-starter/config/html-elements-plugin/index.js b/angular-starter/config/html-elements-plugin/index.js new file mode 100644 index 0000000..78d010d --- /dev/null +++ b/angular-starter/config/html-elements-plugin/index.js @@ -0,0 +1,113 @@ +function HtmlElementsPlugin(locations) { + this.locations = locations; +} + +HtmlElementsPlugin.prototype.apply = function(compiler) { + var self = this; + compiler.plugin('compilation', function(compilation) { + compilation.options.htmlElements = compilation.options.htmlElements || {}; + + compilation.plugin('html-webpack-plugin-before-html-generation', function(htmlPluginData, callback) { + const locations = self.locations; + + if (locations) { + const publicPath = htmlPluginData.assets.publicPath; + + Object.getOwnPropertyNames(locations).forEach(function(loc) { + compilation.options.htmlElements[loc] = getHtmlElementString(locations[loc], publicPath); + }); + } + + + callback(null, htmlPluginData); + }); + }); + +}; + +const RE_ENDS_WITH_BS = /\/$/; + +/** + * Create an HTML tag with attributes from a map. + * + * Example: + * createTag('link', { rel: "manifest", href: "/assets/manifest.json" }) + * // + * @param tagName The name of the tag + * @param attrMap A Map of attribute names (keys) and their values. + * @param publicPath a path to add to eh start of static asset url + * @returns {string} + */ +function createTag(tagName, attrMap, publicPath) { + publicPath = publicPath || ''; + + /** + * Add trailing slash if we have a publicPath and it doesn't have one. + */ + if (publicPath && !RE_ENDS_WITH_BS.test(publicPath)) { + publicPath += '/'; + } + + const attributes = Object.getOwnPropertyNames(attrMap) + .filter(function(name) { return name[0] !== '='; } ) + .map(function(name) { + var value = attrMap[name]; + + if (publicPath) { + /** + * Check if we have explicit instruction, use it if so (e.g: =herf: false) + * if no instruction, use public path if it's href attribute. + */ + const usePublicPath = attrMap.hasOwnProperty('=' + name) ? !!attrMap['=' + name] : name === 'href'; + + if (usePublicPath) { + /** + * Remove a starting trailing slash if the value has one so we wont have // + */ + value = publicPath + (value[0] === '/' ? value.substr(1) : value); + } + } + + return `${name}="${value}"`; + }); + + const closingTag = tagName === 'script' ? '' : ''; + + return `<${tagName} ${attributes.join(' ')}>${closingTag}`; +} + +/** + * Returns a string representing all html elements defined in a data source. + * + * Example: + * + * const ds = { + * link: [ + * { rel: "apple-touch-icon", sizes: "57x57", href: "/assets/icon/apple-icon-57x57.png" } + * ], + * meta: [ + * { name: "msapplication-TileColor", content: "#00bcd4" } + * ] + * } + * + * getHeadTags(ds); + * // "" + * "" + * + * @returns {string} + */ +function getHtmlElementString(dataSource, publicPath) { + return Object.getOwnPropertyNames(dataSource) + .map(function(name) { + if (Array.isArray(dataSource[name])) { + return dataSource[name].map(function(attrs) { return createTag(name, attrs, publicPath); } ); + } else { + return [ createTag(name, dataSource[name], publicPath) ]; + } + }) + .reduce(function(arr, curr) { + return arr.concat(curr); + }, []) + .join('\n\t'); +} +module.exports = HtmlElementsPlugin; diff --git a/angular-starter/config/karma.conf.js b/angular-starter/config/karma.conf.js new file mode 100644 index 0000000..719e847 --- /dev/null +++ b/angular-starter/config/karma.conf.js @@ -0,0 +1,174 @@ +/** + * @author: tipe.io + */ + +module.exports = function (config) { + const testWebpackConfig = require('./webpack.test.js')({ env: 'test' }); + + const configuration = { + + /** + * Base path that will be used to resolve all patterns (e.g. files, exclude). + */ + basePath: '', + + /** + * Frameworks to use + * + * available frameworks: https://npmjs.org/browse/keyword/karma-adapter + */ + frameworks: ['jasmine'], + + /** + * List of files to exclude. + */ + exclude: [], + + client: { + captureConsole: false + }, + + /** + * List of files / patterns to load in the browser + * + * we are building the test environment in ./spec-bundle.js + */ + files: [ + { pattern: './config/spec-bundle.js', watched: false }, + { pattern: './src/assets/**/*', watched: false, included: false, served: true, nocache: false } + ], + + /** + * By default all assets are served at http://localhost:[PORT]/base/ + */ + proxies: { + "/assets/": "/base/src/assets/" + }, + + /** + * Preprocess matching files before serving them to the browser + * available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + */ + preprocessors: { './config/spec-bundle.js': ['coverage', 'webpack', 'sourcemap'] }, + + /** + * Webpack Config at ./webpack.test.js + */ + webpack: testWebpackConfig, + + coverageReporter: { + type: 'in-memory' + }, + + remapCoverageReporter: { + 'text-summary': null, + json: './coverage/coverage.json', + html: './coverage/html' + }, + + /** + * Webpack please don't spam the console when running in karma! + */ + webpackMiddleware: { + /** + * webpack-dev-middleware configuration + * i.e. + */ + logLevel: 'warn', + /** + * and use stats to turn off verbose output + */ + stats: { + /** + * options i.e. + */ + chunks: false + } + }, + + /** + * Test results reporter to use + * + * possible values: 'dots', 'progress' + * available reporters: https://npmjs.org/browse/keyword/karma-reporter + */ + reporters: ['mocha', 'coverage', 'remap-coverage'], + + /** + * Web server port. + */ + port: 9876, + + /** + * enable / disable colors in the output (reporters and logs) + */ + colors: true, + + /** + * Level of logging + * possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + */ + logLevel: config.LOG_WARN, + + /** + * enable / disable watching file and executing tests whenever any file changes + */ + autoWatch: false, + + /** + * start these browsers + * available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + */ + browsers: [ + 'Chrome', + 'ChromeTravisCi' + ], + + customLaunchers: { + ChromeTravisCi: { + base: 'ChromeHeadless', + flags: ['--no-sandbox', '--disable-gpu'] + } + }, + + /** + * Continuous Integration mode + * if true, Karma captures browsers, runs the tests and exits + */ + singleRun: true, + /** + * For slower machines you may need to have a longer browser + * wait time . Uncomment the line below if required. + */ + // browserNoActivityTimeout: 30000 + + }; + + // Optional Sonar Qube Reporter + if (process.env.SONAR_QUBE) { + + // SonarQube reporter plugin configuration + configuration.sonarQubeUnitReporter = { + sonarQubeVersion: '5.x', + outputFile: 'reports/ut_report.xml', + overrideTestDescription: true, + testPath: 'src/app', + testFilePattern: '.spec.ts', + useBrowserName: false + }; + + // Additional lcov format required for + // sonarqube + configuration.remapCoverageReporter.lcovonly = './coverage/coverage.lcov'; + + configuration.reporters.push('sonarqubeUnit'); + } + + if (process.env.TRAVIS) { + configuration.browsers = [ + 'ChromeTravisCi' + ]; + } + + config.set(configuration); +}; diff --git a/angular-starter/config/nginx-custom.conf b/angular-starter/config/nginx-custom.conf new file mode 100644 index 0000000..8e1dbe5 --- /dev/null +++ b/angular-starter/config/nginx-custom.conf @@ -0,0 +1,19 @@ +server { + listen 80; + + gzip on; + gzip_http_version 1.1; + gzip_disable "MSIE [1-6]\."; + gzip_min_length 1100; + gzip_vary on; + gzip_proxied expired no-cache no-store private auth; + gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript; + gzip_comp_level 5; + + root /usr/share/nginx/html; + + location / { + index index.html index.htm; + try_files $uri $uri/ /index.html =404; + } +} diff --git a/angular-starter/config/protractor.conf.js b/angular-starter/config/protractor.conf.js new file mode 100644 index 0000000..e3cf3f9 --- /dev/null +++ b/angular-starter/config/protractor.conf.js @@ -0,0 +1,53 @@ +/** + * @author: tipe.io + */ + +require('ts-node/register'); +var helpers = require('./helpers'); + +exports.config = { + baseUrl: 'http://localhost:3000/', + + /** + * Use `npm run e2e` + */ + specs: [ + helpers.root('src/**/**.e2e.ts'), + helpers.root('src/**/*.e2e.ts') + ], + exclude: [], + + framework: 'jasmine', + + allScriptsTimeout: 11000, + + jasmineNodeOpts: { + showTiming: true, + showColors: true, + isVerbose: false, + includeStackTrace: false, + defaultTimeoutInterval: 40000 + }, + + directConnect: true, + capabilities: { + browserName: 'chrome', + chromeOptions: { + args: [ "--headless", "--disable-gpu", "--window-size=800x600", "--no-sandbox" ] + } + }, + + onPrepare: function() { + browser.ignoreSynchronization = true; + }, + + /** + * Angular 2 configuration + * + * useAllAngular2AppRoots: tells Protractor to wait for any angular2 apps on the page instead of just the one matching + * `rootEl` + */ + useAllAngular2AppRoots: true, + + SELENIUM_PROMISE_MANAGER: false, +}; diff --git a/angular-starter/config/resource-override.js b/angular-starter/config/resource-override.js new file mode 100644 index 0000000..e69de29 diff --git a/angular-starter/config/spec-bundle.js b/angular-starter/config/spec-bundle.js new file mode 100644 index 0000000..9e86b53 --- /dev/null +++ b/angular-starter/config/spec-bundle.js @@ -0,0 +1,63 @@ +/** + * @author: tipe.io + */ + +/** + * When testing with webpack and ES6, we have to do some extra + * things to get testing to work right. Because we are gonna write tests + * in ES6 too, we have to compile those as well. That's handled in + * karma.conf.js with the karma-webpack plugin. This is the entry + * file for webpack test. Just like webpack will create a bundle.js + * file for our client, when we run test, it will compile and bundle them + * all here! Crazy huh. So we need to do some setup + */ +Error.stackTraceLimit = Infinity; + +require('core-js/es6'); +require('core-js/es7/reflect'); + +require('zone.js/dist/zone'); +require('zone.js/dist/long-stack-trace-zone'); +require('zone.js/dist/proxy'); // since zone.js 0.6.15 +require('zone.js/dist/sync-test'); +require('zone.js/dist/jasmine-patch'); // put here since zone.js 0.6.14 +require('zone.js/dist/async-test'); +require('zone.js/dist/fake-async-test'); + +/** + * RxJS + */ +require('rxjs/Rx'); + +var testing = require('@angular/core/testing'); +var browser = require('@angular/platform-browser-dynamic/testing'); + +testing.TestBed.initTestEnvironment( + browser.BrowserDynamicTestingModule, + browser.platformBrowserDynamicTesting() +); + +/** + * Ok, this is kinda crazy. We can use the context method on + * require that webpack created in order to tell webpack + * what files we actually want to require or import. + * Below, context will be a function/object with file names as keys. + * Using that regex we are saying look in ../src then find + * any file that ends with spec.ts and get its path. By passing in true + * we say do this recursively + */ +var testContext = require.context('../src', true, /\.spec\.ts/); + +/** + * Get all the files, for each file, call the context function + * that will require the file and load it up here. Context will + * loop and require those spec files here + */ +function requireAll(requireContext) { + return requireContext.keys().map(requireContext); +} + +/** + * Requires and returns all modules that match + */ +var modules = requireAll(testContext); diff --git a/angular-starter/config/webpack.common.js b/angular-starter/config/webpack.common.js new file mode 100644 index 0000000..04b4a24 --- /dev/null +++ b/angular-starter/config/webpack.common.js @@ -0,0 +1,329 @@ +/** + * @author: tipe.io + */ + +const helpers = require('./helpers'); + +/** + * Webpack Plugins + * + * problem with copy-webpack-plugin + */ +const DefinePlugin = require('webpack/lib/DefinePlugin'); +const CommonsChunkPlugin = require('webpack/lib/optimize/CommonsChunkPlugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); +const HtmlElementsPlugin = require('./html-elements-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const InlineManifestWebpackPlugin = require('inline-manifest-webpack-plugin'); +const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); +const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); +const ngcWebpack = require('ngc-webpack'); + +const buildUtils = require('./build-utils'); + +/** + * Webpack configuration + * + * See: https://webpack.js.org/configuration/ + */ +module.exports = function (options) { + const isProd = options.env === 'production'; + const APP_CONFIG = require(process.env.ANGULAR_CONF_FILE || (isProd ? './config.prod.json' : './config.dev.json')); + + const METADATA = Object.assign({}, buildUtils.DEFAULT_METADATA,options.metadata || {}); + const GTM_API_KEY = process.env.GTM_API_KEY || APP_CONFIG.gtmKey; + + const ngcWebpackConfig = buildUtils.ngcWebpackSetup(isProd, METADATA); + const supportES2015 = buildUtils.supportES2015(METADATA.tsConfigPath); + + const entry = { + polyfills: './src/polyfills.browser.ts', + main: './src/main.browser.ts' + }; + + Object.assign(ngcWebpackConfig.plugin, { + tsConfigPath: METADATA.tsConfigPath, + mainPath: entry.main + }); + + return { + /** + * The entry point for the bundle + * Our Angular.js app + * + * See: https://webpack.js.org/configuration/entry-context/#entry + */ + entry: entry, + + /** + * Options affecting the resolving of modules. + * + * See: https://webpack.js.org/configuration/resolve/ + */ + resolve: { + mainFields: [ ...(supportES2015 ? ['es2015'] : []), 'browser', 'module', 'main' ], + + /** + * An array of extensions that should be used to resolve modules. + * + * See: https://webpack.js.org/configuration/resolve/#resolve-extensions + */ + extensions: ['.ts', '.js', '.json'], + + /** + * An array of directory names to be resolved to the current directory + */ + modules: [helpers.root('src'), helpers.root('node_modules')], + + /** + * Add support for lettable operators. + * + * For existing codebase a refactor is required. + * All rxjs operator imports (e.g. `import 'rxjs/add/operator/map'` or `import { map } from `rxjs/operator/map'` + * must change to `import { map } from 'rxjs/operators'` (note that all operators are now under that import. + * Additionally some operators have changed to to JS keyword constraints (do => tap, catch => catchError) + * + * Remember to use the `pipe()` method to chain operators, this functinoally makes lettable operators similar to + * the old operators usage paradigm. + * + * For more details see: + * https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md#build-and-treeshaking + * + * If you are not planning on refactoring your codebase (or not planning on using imports from `rxjs/operators` + * comment out this line. + * + * BE AWARE that not using lettable operators will probably result in significant payload added to your bundle. + */ + alias: buildUtils.rxjsAlias(supportES2015) + }, + + /** + * Options affecting the normal modules. + * + * See: https://webpack.js.org/configuration/module/ + */ + module: { + + rules: [ + ...ngcWebpackConfig.loaders, + + /** + * To string and css loader support for *.css files (from Angular components) + * Returns file content as string + * + */ + { + test: /\.css$/, + use: ['to-string-loader', 'css-loader'], + exclude: [helpers.root('src', 'styles')] + }, + + /** + * To string and sass loader support for *.scss files (from Angular components) + * Returns compiled css content as string + * + */ + { + test: /\.scss$/, + use: ['to-string-loader', 'css-loader', 'sass-loader'], + exclude: [helpers.root('src', 'styles')] + }, + + /** + * Raw loader support for *.html + * Returns file content as string + * + * See: https://github.com/webpack/raw-loader + */ + { + test: /\.html$/, + use: 'raw-loader', + exclude: [helpers.root('src/index.html')] + }, + + /** + * File loader for supporting images, for example, in CSS files. + */ + { + test: /\.(jpg|png|gif)$/, + use: 'file-loader' + }, + + /* File loader for supporting fonts, for example, in CSS files. + */ + { + test: /\.(eot|woff2?|svg|ttf)([\?]?.*)$/, + use: 'file-loader' + } + + ], + + }, + + /** + * Add additional plugins to the compiler. + * + * See: https://webpack.js.org/configuration/plugins/ + */ + plugins: [ + /** + * Plugin: DefinePlugin + * Description: Define free variables. + * Useful for having development builds with debug logging or adding global constants. + * + * Environment helpers + * + * See: https://webpack.js.org/plugins/define-plugin/ + */ + // NOTE: when adding more properties make sure you include them in custom-typings.d.ts + new DefinePlugin({ + 'ENV': JSON.stringify(METADATA.ENV), + 'HMR': METADATA.HMR, + 'AOT': METADATA.AOT, + 'process.env.ENV': JSON.stringify(METADATA.ENV), + 'process.env.NODE_ENV': JSON.stringify(METADATA.ENV), + 'process.env.HMR': METADATA.HMR, + // 'FIREBASE_CONFIG': JSON.stringify(APP_CONFIG.firebase), + }), + + /** + * Plugin: CommonsChunkPlugin + * Description: Shares common code between the pages. + * It identifies common modules and put them into a commons chunk. + * + * See: https://webpack.js.org/plugins/commons-chunk-plugin/ + * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app + */ + new CommonsChunkPlugin({ + name: 'polyfills', + chunks: ['polyfills'] + }), + + new CommonsChunkPlugin({ + minChunks: Infinity, + name: 'inline' + }), + new CommonsChunkPlugin({ + name: 'main', + async: 'common', + children: true, + minChunks: 2 + }), + + + /** + * Plugin: CopyWebpackPlugin + * Description: Copy files and directories in webpack. + * + * Copies project static assets. + * + * See: https://www.npmjs.com/package/copy-webpack-plugin + */ + new CopyWebpackPlugin([ + { from: 'src/assets', to: 'assets' }, + { from: 'src/meta'} + ], + isProd ? { ignore: [ 'mock-data/**/*' ] } : undefined + ), + + /* + * Plugin: HtmlWebpackPlugin + * Description: Simplifies creation of HTML files to serve your webpack bundles. + * This is especially useful for webpack bundles that include a hash in the filename + * which changes every compilation. + * + * See: https://github.com/ampedandwired/html-webpack-plugin + */ + new HtmlWebpackPlugin({ + template: 'src/index.html', + title: METADATA.title, + chunksSortMode: function (a, b) { + const entryPoints = ["inline","polyfills","sw-register","styles","vendor","main"]; + return entryPoints.indexOf(a.names[0]) - entryPoints.indexOf(b.names[0]); + }, + metadata: METADATA, + gtmKey: GTM_API_KEY, + inject: 'body', + xhtml: true, + minify: isProd ? { + caseSensitive: true, + collapseWhitespace: true, + keepClosingSlash: true + } : false + }), + + /** + * Plugin: ScriptExtHtmlWebpackPlugin + * Description: Enhances html-webpack-plugin functionality + * with different deployment options for your scripts including: + * + * See: https://github.com/numical/script-ext-html-webpack-plugin + */ + new ScriptExtHtmlWebpackPlugin({ + sync: /inline|polyfills|vendor/, + defaultAttribute: 'async', + preload: [/polyfills|vendor|main/], + prefetch: [/chunk/] + }), + + /** + * Plugin: HtmlElementsPlugin + * Description: Generate html tags based on javascript maps. + * + * If a publicPath is set in the webpack output configuration, it will be automatically added to + * href attributes, you can disable that by adding a "=href": false property. + * You can also enable it to other attribute by settings "=attName": true. + * + * The configuration supplied is map between a location (key) and an element definition object (value) + * The location (key) is then exported to the template under then htmlElements property in webpack configuration. + * + * Example: + * Adding this plugin configuration + * new HtmlElementsPlugin({ + * headTags: { ... } + * }) + * + * Means we can use it in the template like this: + * <%= webpackConfig.htmlElements.headTags %> + * + * Dependencies: HtmlWebpackPlugin + */ + new HtmlElementsPlugin({ + headTags: require('./head-config.common') + }), + + /** + * Plugin LoaderOptionsPlugin (experimental) + * + * See: https://gist.github.com/sokra/27b24881210b56bbaff7 + */ + new LoaderOptionsPlugin({}), + + new ngcWebpack.NgcWebpackPlugin(ngcWebpackConfig.plugin), + + /** + * Plugin: InlineManifestWebpackPlugin + * Inline Webpack's manifest.js in index.html + * + * https://github.com/szrenwei/inline-manifest-webpack-plugin + */ + new InlineManifestWebpackPlugin(), + ], + + /** + * Include polyfills or mocks for various node stuff + * Description: Node configuration + * + * See: https://webpack.js.org/configuration/node/ + */ + node: { + global: true, + crypto: 'empty', + process: true, + module: false, + clearImmediate: false, + setImmediate: false + } + + }; +}; diff --git a/angular-starter/config/webpack.dev.js b/angular-starter/config/webpack.dev.js new file mode 100644 index 0000000..0dd3ea8 --- /dev/null +++ b/angular-starter/config/webpack.dev.js @@ -0,0 +1,185 @@ +/** + * @author: tipe.io + */ + +const helpers = require('./helpers'); +const buildUtils = require('./build-utils'); +const webpackMerge = require('webpack-merge'); // used to merge webpack configs +const commonConfig = require('./webpack.common.js'); // the settings that are common to prod and dev + +/** + * Webpack Plugins + */ +const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); +const NamedModulesPlugin = require('webpack/lib/NamedModulesPlugin'); +const EvalSourceMapDevToolPlugin = require('webpack/lib/EvalSourceMapDevToolPlugin'); + + +/** + * Webpack configuration + * + * See: https://webpack.js.org/configuration/ + */ +module.exports = function (options) { + const ENV = process.env.ENV = process.env.NODE_ENV = 'development'; + const HOST = process.env.HOST || 'localhost'; + const PORT = process.env.PORT || 3000; + + const METADATA = Object.assign({}, buildUtils.DEFAULT_METADATA, { + host: HOST, + port: PORT, + ENV: ENV, + HMR: helpers.hasProcessFlag('hot'), + PUBLIC: process.env.PUBLIC_DEV || HOST + ':' + PORT + }); + + return webpackMerge(commonConfig({ env: ENV, metadata: METADATA }), { + /** + * Options affecting the output of the compilation. + * + * See: https://webpack.js.org/configuration/output/ + */ + output: { + + /** + * The output directory as absolute path (required). + * + * See: https://webpack.js.org/configuration/output/#output-path + */ + path: helpers.root('dist'), + + /** + * Specifies the name of each output file on disk. + * IMPORTANT: You must not specify an absolute path here! + * + * See: https://webpack.js.org/configuration/output/#output-filename + */ + filename: '[name].bundle.js', + + /** + * The filename of the SourceMaps for the JavaScript files. + * They are inside the output.path directory. + * + * See: https://webpack.js.org/configuration/output/#output-sourcemapfilename + */ + sourceMapFilename: '[file].map', + + /** The filename of non-entry chunks as relative path + * inside the output.path directory. + * + * See: https://webpack.js.org/configuration/output/#output-chunkfilename + */ + chunkFilename: '[id].chunk.js', + + library: 'ac_[name]', + libraryTarget: 'var', + }, + + module: { + + rules: [ + + /** + * Css loader support for *.css files (styles directory only) + * Loads external css styles into the DOM, supports HMR + * + */ + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + include: [helpers.root('src', 'styles')] + }, + + /** + * Sass loader support for *.scss files (styles directory only) + * Loads external sass styles into the DOM, supports HMR + * + */ + { + test: /\.scss$/, + use: ['style-loader', 'css-loader', 'sass-loader'], + include: [helpers.root('src', 'styles')] + }, + + ] + + }, + + plugins: [ + new EvalSourceMapDevToolPlugin({ + moduleFilenameTemplate: '[resource-path]', + sourceRoot: 'webpack:///' + }), + + /** + * Plugin: NamedModulesPlugin (experimental) + * Description: Uses file names as module name. + * + * See: https://github.com/webpack/webpack/commit/a04ffb928365b19feb75087c63f13cadfc08e1eb + */ + new NamedModulesPlugin(), + + /** + * Plugin LoaderOptionsPlugin (experimental) + * + * See: https://gist.github.com/sokra/27b24881210b56bbaff7 + */ + new LoaderOptionsPlugin({ + debug: true, + options: { } + }), + + // TODO: HMR + ], + + /** + * Webpack Development Server configuration + * Description: The webpack-dev-server is a little node.js Express server. + * The server emits information about the compilation state to the client, + * which reacts to those events. + * + * See: https://webpack.js.org/configuration/dev-server/ + */ + devServer: { + port: METADATA.port, + host: METADATA.host, + hot: METADATA.HMR, + public: METADATA.PUBLIC, + historyApiFallback: true, + watchOptions: { + // if you're using Docker you may need this + // aggregateTimeout: 300, + // poll: 1000, + ignored: /node_modules/ + }, + /** + * Here you can access the Express app object and add your own custom middleware to it. + * + * See: https://webpack.js.org/configuration/dev-server/ + */ + setup: function(app) { + // For example, to define custom handlers for some paths: + // app.get('/some/path', function(req, res) { + // res.json({ custom: 'response' }); + // }); + } + }, + + /** + * Include polyfills or mocks for various node stuff + * Description: Node configuration + * + * See: https://webpack.js.org/configuration/node/ + */ + node: { + global: true, + crypto: 'empty', + process: true, + module: false, + clearImmediate: false, + setImmediate: false, + fs: 'empty' + } + + }); +}; diff --git a/angular-starter/config/webpack.github-deploy.js b/angular-starter/config/webpack.github-deploy.js new file mode 100644 index 0000000..0ac764c --- /dev/null +++ b/angular-starter/config/webpack.github-deploy.js @@ -0,0 +1,80 @@ +/** + * @author: tipe.io + */ +const fs = require('fs'); +const path = require('path'); +const helpers = require('./helpers'); +const ghDeploy = require('./github-deploy'); +const webpackMerge = require('webpack-merge'); // used to merge webpack configs + +/** + * Webpack Constants + */ +const GIT_REMOTE_NAME = 'origin'; +const COMMIT_MESSAGE = 'Updates'; +const GH_REPO_NAME = ghDeploy.getRepoName(GIT_REMOTE_NAME); + +module.exports = function (options) { + const webpackConfigFactory = ghDeploy.getWebpackConfigModule(options); // the settings that are common to prod and dev + const webpackConfig = webpackConfigFactory(options); + + /** + * Replace the instance of HtmlWebpackPlugin with an updated one. + */ + ghDeploy.replaceHtmlWebpackPlugin(webpackConfig.plugins, GH_REPO_NAME); + + return webpackMerge(webpackConfig, { + output: { + /** + * The public path is set to the REPO name. + * + * `HtmlElementsPlugin` will add it to all resources url's created by it. + * `HtmlWebpackPlugin` will add it to all webpack bundels/chunks. + * + * In theory publicPath shouldn't be used since the browser should automatically prefix the + * `baseUrl` into all URLs, however this is not the case when the URL is absolute (start with /) + * + * It's important to prefix & suffix the repo name with a slash (/). + * Prefixing so every resource will be absolute (otherwise it will be url.com/repoName/repoName... + * Suffixing since chunks will not do it automatically (testes against about page) + */ + publicPath: '/' + GH_REPO_NAME + '/' + ghDeploy.safeUrl(webpackConfig.output.publicPath) + }, + + plugins: [ + function() { + this.plugin('done', function(stats) { + console.log('Starting deployment to GitHub.'); + + const logger = function (msg) { + console.log(msg); + }; + + const options = { + logger: logger, + remote: GIT_REMOTE_NAME, + message: COMMIT_MESSAGE, + dotfiles: true // for .nojekyll + }; + /** + * Since GitHub moved to Jekyll 3.3, their server ignores the "node_modules" and "vendors" folder by default. + * but, as of now, it also ignores "vendors*" files. + * This means vendor.bundle.js or vendor.[chunk].bundle.js will return 404. + * this is the fix for now. + */ + fs.writeFileSync(path.join(webpackConfig.output.path, '.nojekyll'), ''); + + const ghpages = require('gh-pages'); + ghpages.publish(webpackConfig.output.path, options, function(err) { + if (err) { + console.log('GitHub deployment done. STATUS: ERROR.'); + throw err; + } else { + console.log('GitHub deployment done. STATUS: SUCCESS.'); + } + }); + }); + } + ] + }); +}; diff --git a/angular-starter/config/webpack.prod.js b/angular-starter/config/webpack.prod.js new file mode 100644 index 0000000..930044c --- /dev/null +++ b/angular-starter/config/webpack.prod.js @@ -0,0 +1,211 @@ +/** + * @author: tipe.io + */ +const helpers = require('./helpers'); +const buildUtils = require('./build-utils'); + +/** + * Used to merge webpack configs +*/ +const webpackMerge = require('webpack-merge'); +/** + * The settings that are common to prod and dev +*/ +const commonConfig = require('./webpack.common.js'); + +/** + * Webpack Plugins + */ +const SourceMapDevToolPlugin = require('webpack/lib/SourceMapDevToolPlugin'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const HashedModuleIdsPlugin = require('webpack/lib/HashedModuleIdsPlugin') +const PurifyPlugin = require('@angular-devkit/build-optimizer').PurifyPlugin; +const ModuleConcatenationPlugin = require('webpack/lib/optimize/ModuleConcatenationPlugin'); +const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); + + + +function getUglifyOptions (supportES2015) { + const uglifyCompressOptions = { + pure_getters: true, /* buildOptimizer */ + // PURE comments work best with 3 passes. + // See https://github.com/webpack/webpack/issues/2899#issuecomment-317425926. + passes: 3 /* buildOptimizer */ + }; + + return { + ecma: supportES2015 ? 6 : 5, + warnings: false, // TODO verbose based on option? + ie8: false, + mangle: true, + compress: uglifyCompressOptions, + output: { + ascii_only: true, + comments: false + } + }; +} + +module.exports = function (env) { + const ENV = process.env.NODE_ENV = process.env.ENV = 'production'; + const supportES2015 = buildUtils.supportES2015(buildUtils.DEFAULT_METADATA.tsConfigPath); + const METADATA = Object.assign({}, buildUtils.DEFAULT_METADATA, { + host: process.env.HOST || 'localhost', + port: process.env.PORT || 8080, + ENV: ENV, + HMR: false + }); + + // set environment suffix so these environments are loaded. + METADATA.envFileSuffix = METADATA.E2E ? 'e2e.prod' : 'prod'; + + return webpackMerge(commonConfig({ env: ENV, metadata: METADATA }), { + + /** + * Options affecting the output of the compilation. + * + * See: https://webpack.js.org/configuration/output/ + */ + output: { + + /** + * The output directory as absolute path (required). + * + * See: https://webpack.js.org/configuration/output/#output-path + */ + path: helpers.root('dist'), + + /** + * Specifies the name of each output file on disk. + * IMPORTANT: You must not specify an absolute path here! + * + * See: https://webpack.js.org/configuration/output/#output-filename + */ + filename: '[name].[chunkhash].bundle.js', + + /** + * The filename of the SourceMaps for the JavaScript files. + * They are inside the output.path directory. + * + * See: https://webpack.js.org/configuration/output/#output-sourcemapfilename + */ + sourceMapFilename: '[file].map', + + /** + * The filename of non-entry chunks as relative path + * inside the output.path directory. + * + * See: https://webpack.js.org/configuration/output/#output-chunkfilename + */ + chunkFilename: '[name].[chunkhash].chunk.js' + + }, + + module: { + + rules: [ + + /** + * Extract CSS files from .src/styles directory to external CSS file + */ + { + test: /\.css$/, + loader: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: 'css-loader' + }), + include: [helpers.root('src', 'styles')] + }, + + /** + * Extract and compile SCSS files from .src/styles directory to external CSS file + */ + { + test: /\.scss$/, + loader: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: 'css-loader!sass-loader' + }), + include: [helpers.root('src', 'styles')] + }, + + ] + + }, + + /** + * Add additional plugins to the compiler. + * + * See: https://webpack.js.org/configuration/plugins/ + */ + plugins: [ + + new SourceMapDevToolPlugin({ + filename: '[file].map[query]', + moduleFilenameTemplate: '[resource-path]', + fallbackModuleFilenameTemplate: '[resource-path]?[hash]', + sourceRoot: 'webpack:///' + }), + + + /** + * Plugin: ExtractTextPlugin + * Description: Extracts imported CSS files into external stylesheet + * + * See: https://github.com/webpack/extract-text-webpack-plugin + */ + new ExtractTextPlugin('[name].[contenthash].css'), + + new PurifyPlugin(), /* buildOptimizer */ + + new HashedModuleIdsPlugin(), + new ModuleConcatenationPlugin(), + + /** + * Plugin: UglifyJsPlugin + * Description: Minimize all JavaScript output of chunks. + * Loaders are switched into minimizing mode. + * + * See: https://webpack.js.org/plugins/uglifyjs-webpack-plugin/ + * + * NOTE: To debug prod builds uncomment //debug lines and comment //prod lines + */ + new UglifyJsPlugin({ + sourceMap: true, + parallel: true, + uglifyOptions: getUglifyOptions(supportES2015) + }), + + /** + * Plugin: CompressionPlugin + * Description: Prepares compressed versions of assets to serve + * them with Content-Encoding + * + * See: https://github.com/webpack/compression-webpack-plugin + */ + // install compression-webpack-plugin +/* new CompressionPlugin({ + regExp: /\.css$|\.html$|\.js$|\.map$/, + threshold: 2 * 1024 + })*/ + + ], + + /** + * Include polyfills or mocks for various node stuff + * Description: Node configuration + * + * See: https://webpack.js.org/configuration/node/ + */ + node: { + global: true, + crypto: 'empty', + process: false, + module: false, + clearImmediate: false, + setImmediate: false, + fs: 'empty' + } + + }); +}; diff --git a/angular-starter/config/webpack.test.js b/angular-starter/config/webpack.test.js new file mode 100644 index 0000000..c616efd --- /dev/null +++ b/angular-starter/config/webpack.test.js @@ -0,0 +1,265 @@ +/** + * @author: tipe.io + */ + +const helpers = require('./helpers'); + +/** + * Webpack Plugins + */ +const ProvidePlugin = require('webpack/lib/ProvidePlugin'); +const DefinePlugin = require('webpack/lib/DefinePlugin'); +const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); +const ContextReplacementPlugin = require('webpack/lib/ContextReplacementPlugin'); + +/** + * Webpack Constants + */ +const ENV = process.env.ENV = process.env.NODE_ENV = 'test'; + +/** + * Webpack configuration + * + * See: https://webpack.js.org/configuration/ + */ +module.exports = function (options) { + return { + + /** + * Source map for Karma from the help of karma-sourcemap-loader & karma-webpack + * + * Do not change, leave as is or it wont work. + * See: https://github.com/webpack/karma-webpack#source-maps + */ + devtool: 'inline-source-map', + + /** + * Options affecting the resolving of modules. + * + * See: https://webpack.js.org/configuration/resolve/ + */ + resolve: { + + /** + * An array of extensions that should be used to resolve modules. + * + * See: https://webpack.js.org/configuration/resolve/#resolve-extensions + */ + extensions: ['.ts', '.js'], + + /** + * Make sure root is src + */ + modules: [helpers.root('src'), 'node_modules'] + + }, + + /** + * Options affecting the normal modules. + * + * See: https://webpack.js.org/configuration/module/ + * + * 'use:' revered back to 'loader:' as a temp. workaround for #1188 + * See: https://github.com/gdi2290/angular-starter/issues/1188#issuecomment-262872034 + */ + module: { + + rules: [ + + /** + * Source map loader support for *.js files + * Extracts SourceMaps for source files that as added as sourceMappingURL comment. + * + * See: https://github.com/webpack/source-map-loader + */ + { + enforce: 'pre', + test: /\.js$/, + loader: 'source-map-loader', + exclude: [ + /** + * These packages have problems with their sourcemaps + */ + helpers.root('node_modules/rxjs'), + helpers.root('node_modules/@angular') + ] + }, + + /** + * Typescript loader support for .ts and Angular 2 async routes via .async.ts + * + * See: https://github.com/s-panferov/awesome-typescript-loader + */ + { + test: /\.ts$/, + use: [ + { + loader: 'awesome-typescript-loader', + query: { + /** + * Use inline sourcemaps for "karma-remap-coverage" reporter + */ + sourceMap: false, + inlineSourceMap: true, + compilerOptions: { + + /** + * Remove TypeScript helpers to be injected + * below by DefinePlugin + */ + removeComments: true + + } + }, + }, + 'angular2-template-loader' + ], + exclude: [/\.e2e\.ts$/] + }, + + /** + * Raw loader support for *.css files + * Returns file content as string + * + * See: https://github.com/webpack/raw-loader + */ + { + test: /\.css$/, + loader: ['to-string-loader', { loader: 'css-loader', options: { url: false } }], + exclude: [helpers.root('src/index.html')] + }, + + /** + * Raw loader support for *.scss files + * + * See: https://github.com/webpack/raw-loader + */ + { + test: /\.scss$/, + loader: ['raw-loader', 'sass-loader'], + exclude: [helpers.root('src/index.html')] + }, + + /** + * Raw loader support for *.html + * Returns file content as string + * + * See: https://github.com/webpack/raw-loader + */ + { + test: /\.html$/, + loader: 'raw-loader', + exclude: [helpers.root('src/index.html')] + }, + + /** + * Instruments JS files with Istanbul for subsequent code coverage reporting. + * Instrument only testing sources. + * + * See: https://github.com/deepsweet/istanbul-instrumenter-loader + */ + { + enforce: 'post', + test: /\.(js|ts)$/, + loader: 'istanbul-instrumenter-loader', + include: helpers.root('src'), + exclude: [ + /\.(e2e|spec)\.ts$/, + /node_modules/ + ] + } + + ] + }, + + /** + * Add additional plugins to the compiler. + * + * See: https://webpack.js.org/configuration/plugins/ + */ + plugins: [ + + /** + * Plugin: DefinePlugin + * Description: Define free variables. + * Useful for having development builds with debug logging or adding global constants. + * + * Environment helpers + * + * See: https://webpack.js.org/plugins/define-plugin/ + * + * NOTE: when adding more properties make sure you include them in custom-typings.d.ts + */ + new DefinePlugin({ + 'ENV': JSON.stringify(ENV), + 'HMR': false, + 'process.env': { + 'ENV': JSON.stringify(ENV), + 'NODE_ENV': JSON.stringify(ENV), + 'HMR': false, + } + }), + + /** + * Plugin: ContextReplacementPlugin + * Description: Provides context to Angular's use of System.import + * + * See: https://webpack.js.org/plugins/context-replacement-plugin/ + * See: https://github.com/angular/angular/issues/11580 + */ + new ContextReplacementPlugin( + /** + * The (\\|\/) piece accounts for path separators in *nix and Windows + */ + /\@angular(\\|\/)core(\\|\/)esm5/, + helpers.root('src'), // location of your src + { + /** + * your Angular Async Route paths relative to this root directory + */ + } + ), + + /** + * Plugin LoaderOptionsPlugin (experimental) + * + * See: https://gist.github.com/sokra/27b24881210b56bbaff7 + */ + new LoaderOptionsPlugin({ + debug: false, + options: { + /** + * legacy options go here + */ + } + }), + + ], + + /** + * Disable performance hints + * + * See: https://github.com/a-tarasyuk/rr-boilerplate/blob/master/webpack/dev.config.babel.js#L41 + */ + performance: { + hints: false + }, + + /** + * Include polyfills or mocks for various node stuff + * Description: Node configuration + * + * See: https://webpack.js.org/configuration/node/ + */ + node: { + global: true, + crypto: 'empty', + process: false, + module: false, + clearImmediate: false, + setImmediate: false, + fs: 'empty' + } + + }; +}; diff --git a/angular-starter/docker-compose.yml b/angular-starter/docker-compose.yml new file mode 100644 index 0000000..7b01be3 --- /dev/null +++ b/angular-starter/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' +services: + angular-starter: + build: + context: . + dockerfile: Dockerfile + container_name: angular-starter + networks: + - angular-starter + ports: + - '8080:80' +networks: + angular-starter: + driver: bridge diff --git a/angular-starter/firebase.json b/angular-starter/firebase.json new file mode 100644 index 0000000..80e83f9 --- /dev/null +++ b/angular-starter/firebase.json @@ -0,0 +1,16 @@ +{ + "hosting": { + "public": "dist", + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ], + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ] + } +} \ No newline at end of file diff --git a/angular-starter/karma.conf.js b/angular-starter/karma.conf.js new file mode 100644 index 0000000..79ce74d --- /dev/null +++ b/angular-starter/karma.conf.js @@ -0,0 +1,8 @@ +/** + * @author: tipe.io + */ + +/** + * Look in ./config for karma.conf.js + */ +module.exports = require('./config/karma.conf.js'); diff --git a/angular-starter/netlify.toml b/angular-starter/netlify.toml new file mode 100644 index 0000000..dc8e367 --- /dev/null +++ b/angular-starter/netlify.toml @@ -0,0 +1,3 @@ +[build] + command = "npm run build:prod" + publish = "dist" diff --git a/angular-starter/package-lock.json b/angular-starter/package-lock.json new file mode 100644 index 0000000..b67a987 --- /dev/null +++ b/angular-starter/package-lock.json @@ -0,0 +1,18271 @@ +{ + "name": "angular-starter", + "version": "7.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/build-optimizer": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.3.2.tgz", + "integrity": "sha512-U0BCZtThq5rUfY08shHXpxe8ZhSsiYB/cJjUvAWRTs/ORrs8pbngS6xwseQws8d/vHoVrtqGD9GU9h8AmFRERQ==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.7", + "typescript": "2.6.2", + "webpack-sources": "1.1.0" + } + }, + "@angular-devkit/core": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.3.2.tgz", + "integrity": "sha512-zABk/iP7YX5SVbmK4e+IX7j2d0D37MQJQiKgWdV3JzfvVJhNJzddiirtT980pIafoq+KyvTgVwXtc+vnux0oeQ==", + "dev": true, + "requires": { + "ajv": "5.5.2", + "chokidar": "1.7.0", + "rxjs": "5.5.6", + "source-map": "0.5.7" + }, + "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" + } + } + } + }, + "@angular-devkit/schematics": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-0.3.2.tgz", + "integrity": "sha512-B6zZoqvHaTJy+vVdA6EtlxnCdGMa5elCa4j9lQLC3JI8DLvMXUWkCIPVbPzJ/GSRR9nsKWpvYMYaJyfBDUqfhw==", + "dev": true, + "requires": { + "@ngtools/json-schema": "1.2.0", + "rxjs": "5.5.6" + } + }, + "@angular/animations": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-5.2.7.tgz", + "integrity": "sha512-t/B0z2OYO+yy8SJKB1/evSNPvnLsl+AclhM1p21/NnETxQUqvct1KXeDM7nYDu5hmnGmuavhua8LDo6rN5zS+Q==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/cli": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.7.2.tgz", + "integrity": "sha512-U0RXiG6rNe5GqZazn+FLy3p4rOhBwpf5NWAec/JKe+u/cekIsyeDXLfqGJwzLhMEV4Iv2k4i3o5imejkEc4A9g==", + "dev": true, + "requires": { + "@angular-devkit/build-optimizer": "0.3.2", + "@angular-devkit/core": "0.3.2", + "@angular-devkit/schematics": "0.3.2", + "@ngtools/json-schema": "1.2.0", + "@ngtools/webpack": "1.10.1", + "@schematics/angular": "0.3.2", + "@schematics/package-update": "0.3.2", + "ajv": "6.2.1", + "autoprefixer": "7.2.6", + "cache-loader": "1.2.2", + "chalk": "2.2.2", + "circular-dependency-plugin": "4.4.0", + "clean-css": "4.1.10", + "common-tags": "1.7.2", + "copy-webpack-plugin": "4.4.3", + "core-object": "3.1.5", + "denodeify": "1.2.1", + "ember-cli-string-utils": "1.1.0", + "extract-text-webpack-plugin": "3.0.2", + "file-loader": "1.1.11", + "fs-extra": "4.0.3", + "glob": "7.1.2", + "html-webpack-plugin": "2.30.1", + "istanbul-instrumenter-loader": "3.0.0", + "karma-source-map-support": "1.2.0", + "less": "2.7.3", + "less-loader": "4.0.6", + "license-webpack-plugin": "1.2.3", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "memory-fs": "0.4.1", + "minimatch": "3.0.4", + "node-modules-path": "1.0.1", + "node-sass": "4.7.2", + "nopt": "4.0.1", + "opn": "5.1.0", + "portfinder": "1.0.13", + "postcss": "6.0.19", + "postcss-import": "11.1.0", + "postcss-loader": "2.1.1", + "postcss-url": "7.3.1", + "raw-loader": "0.5.1", + "resolve": "1.5.0", + "rxjs": "5.5.6", + "sass-loader": "6.0.7", + "semver": "5.5.0", + "silent-error": "1.1.0", + "source-map-support": "0.4.18", + "style-loader": "0.19.1", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "uglifyjs-webpack-plugin": "1.2.2", + "url-loader": "0.6.2", + "webpack": "3.11.0", + "webpack-dev-middleware": "1.12.2", + "webpack-dev-server": "2.11.2", + "webpack-merge": "4.1.2", + "webpack-sources": "1.1.0", + "webpack-subresource-integrity": "1.0.4" + }, + "dependencies": { + "@ngtools/webpack": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.10.1.tgz", + "integrity": "sha512-Pa2FUy9n2Pu7kkTho6ADfHyypTmDMY8/HT7y9G3tZdaEsS7CjFMdchN5Dx+TCATGVh+G6FLS2mjgXBiGVTmbWw==", + "dev": true, + "requires": { + "chalk": "2.2.2", + "enhanced-resolve": "3.4.1", + "loader-utils": "1.1.0", + "magic-string": "0.22.4", + "semver": "5.5.0", + "source-map": "0.5.7", + "tree-kill": "1.2.0", + "webpack-sources": "1.1.0" + } + }, + "copy-webpack-plugin": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.4.3.tgz", + "integrity": "sha512-v4THQ24Tks2NkyOvZuFDgZVfDD9YaA9rwYLZTrWg2GHIA8lrH5DboEyeoorh5Skki+PUbgSmnsCwhMWqYrQZrA==", + "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.2.0", + "serialize-javascript": "1.4.0" + } + }, + "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-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" + } + }, + "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" + }, + "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" + } + } + } + }, + "style-loader": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.19.1.tgz", + "integrity": "sha512-IRE+ijgojrygQi3rsqT0U4dd+UcPCqcVvauZpCnQrGAlEe+FUIyrK93bUDScamesjP08JlQNsFJU+KmPedP5Og==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + }, + "url-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz", + "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.6.0", + "schema-utils": "0.3.0" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + } + } + }, + "@angular/common": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-5.2.7.tgz", + "integrity": "sha512-TqsDMmPX1JlEH2QIneuAVzEO4ubzxLBAdV4XbKWDQKC/UfbWIIpSrSp2cIi85NV1tKkg0WAaodCIZ02NucHIHg==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/compiler": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-5.2.7.tgz", + "integrity": "sha512-26RG+Dy+M/95OyNNqM+OAruarIPOmbndiaglz2dMrNYzenfbSgG/AoPlL5uCdSqZDiXgnlKnS2K6/ePWXDSKNw==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/compiler-cli": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-5.2.7.tgz", + "integrity": "sha512-91gQolzsKyOlmBNW1J7lyu+dXHe/KHbAXU459hn6rycMHuTt60XvxA5O3xy3Pqt28VgbOOSrQfq5eVjZodKjWg==", + "dev": true, + "requires": { + "chokidar": "1.7.0", + "minimist": "1.2.0", + "reflect-metadata": "0.1.12", + "tsickle": "0.27.2" + } + }, + "@angular/core": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-5.2.7.tgz", + "integrity": "sha512-DQuL6n7cjBfZmWX5RCV271g6PW9N8b93g2skWnM/zjm+BL9tfHPgvmsjMNB7QEHSxW8VBaaQ6gjj422O01A87g==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/forms": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-5.2.7.tgz", + "integrity": "sha512-43oLKdzMjMV/hOLpSTg8aOggcx+veTnPp/JN+KzMGo2qtbim5nk3fnuscWDeDOdkh8hPRPGarKxeFNEE9ZZSTg==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/language-service": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-5.2.7.tgz", + "integrity": "sha512-Tqd9ll6QBSKa2PKzhbyRiKfKZh4MOB6um3aiedC+m3IBB8zMgrY+EJbfP/SN52LsZdShEnLjuKcBZG0eqTjgEQ==", + "dev": true + }, + "@angular/platform-browser": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-5.2.7.tgz", + "integrity": "sha512-SdLx4F6tOy4/s3y1KZ/Z3YA6fiIrydaO2bry2FJglDxJh24p6TZIob+zC16N2MTuFW819KY5OlacNhc8aj6Yag==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.7.tgz", + "integrity": "sha512-95Rwf1JcGF/BI48k+VG2moLTVC863jPSjmHaGkz7cA9bi/QrRFGvFghl1qIm4Ezp3dj8CH8TE3TWB+1AmAg3AQ==", + "requires": { + "tslib": "1.9.0" + } + }, + "@angular/platform-server": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-5.2.7.tgz", + "integrity": "sha512-5+pj+YYfJ7ZGVEtP2oTVqWErObWRVeY32AxVIs3pE3WuqKPjwnKzd+HY+YeD8D+LDJZ5DdphtYBp26NFrnw0xA==", + "requires": { + "domino": "1.0.30", + "tslib": "1.9.0", + "xhr2": "0.1.4" + } + }, + "@angular/router": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-5.2.7.tgz", + "integrity": "sha512-ppl0X7EfEgKYXIEPtdy8cOKj5KXuwCQ5Ila+IuGnSjKIRXt/olhBLJMprVl1VJgoxXj7z2i14U7kKaqSvGtpXw==", + "requires": { + "tslib": "1.9.0" + } + }, + "@compodoc/compodoc": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@compodoc/compodoc/-/compodoc-1.0.8.tgz", + "integrity": "sha512-w44qbkZdqsk2KmYGgQa5e/O1rxv2kYOBet+2szuwrIneAyye9jt7e8qfcqOeM6Yuq6oawtgC2vAd/vP1IsLJPQ==", + "dev": true, + "requires": { + "@compodoc/ngd-transformer": "2.0.0", + "chalk": "2.3.2", + "cheerio": "1.0.0-rc.2", + "chokidar": "2.0.2", + "colors": "1.1.2", + "commander": "2.14.1", + "fancy-log": "1.3.2", + "findit2": "2.2.3", + "fs-extra": "5.0.0", + "glob": "7.1.2", + "handlebars": "4.0.11", + "html-entities": "1.2.1", + "json5": "0.5.1", + "live-server": "1.1.0", + "lodash": "4.17.5", + "lunr": "2.1.6", + "marked": "0.3.17", + "os-name": "2.0.1", + "traverse": "0.6.6", + "ts-simple-ast": "6.12.0", + "typescript": "2.4.2" + }, + "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.9", + "normalize-path": "2.1.1" + } + }, + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "fsevents": "1.1.3", + "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.0.4" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "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.1", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "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" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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-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-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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "typescript": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.4.2.tgz", + "integrity": "sha1-+DlfhdRZJ2BnyYiqQYN6j4KHCEQ=", + "dev": true + } + } + }, + "@compodoc/ngd-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-core/-/ngd-core-2.0.0.tgz", + "integrity": "sha512-6HpYvXRZBdIYFojWxW5EVNkhYPmblytCve62CNoYBSWfy++vTGH7Ypg2Bhjg2CsqeV8JOVxrPO7JM9M3MgWKEA==", + "dev": true, + "requires": { + "ansi-colors": "1.1.0", + "fancy-log": "1.3.2", + "typescript": "2.6.2" + } + }, + "@compodoc/ngd-transformer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@compodoc/ngd-transformer/-/ngd-transformer-2.0.0.tgz", + "integrity": "sha512-9J0KkmuuuvDHxH0oREgrgbqdEFqcltQXIBofeYdIyMKzI3A+pN1Ji4zfi7x1ql0Ax7qQKemp8XWP+cCpP0qY+w==", + "dev": true, + "requires": { + "@compodoc/ngd-core": "2.0.0", + "dot": "1.1.2", + "fs-extra": "4.0.3", + "viz.js": "1.8.0" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "1.0.1", + "glob-to-regexp": "0.3.0" + } + }, + "@ngtools/json-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.2.0.tgz", + "integrity": "sha512-pMh+HDc6mOjUO3agRfB1tInimo7hf67u+0Cska2bfXFe6oU7rSMnr5PLVtiZVgwMoBHpx/6XjBymvcnWPo2Uzg==", + "dev": true + }, + "@ngtools/webpack": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.10.0.tgz", + "integrity": "sha512-QdzPjUgb1VIJ/uIMXGe5mJsufp0gxItDZj/3RD+xfqYCgabLRFPZ89qe88tTCzhburuEfHK6+Uqk5HWlVnA4oA==", + "dev": true, + "requires": { + "chalk": "2.2.2", + "enhanced-resolve": "3.4.1", + "loader-utils": "1.1.0", + "magic-string": "0.22.4", + "semver": "5.5.0", + "source-map": "0.5.7", + "tree-kill": "1.2.0", + "webpack-sources": "1.1.0" + } + }, + "@schematics/angular": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-0.3.2.tgz", + "integrity": "sha512-Elrk0BA951s0ScFZU0AWrpUeJBYVR52DZ1QTIO5R0AhwEd1PW4olI8szPLGQlVW5Sd6H0FA/fyFLIvn2r9v6Rw==", + "dev": true, + "requires": { + "typescript": "2.6.2" + } + }, + "@schematics/package-update": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@schematics/package-update/-/package-update-0.3.2.tgz", + "integrity": "sha512-7aVP4994Hu8vRdTTohXkfGWEwLhrdNP3EZnWyBootm5zshWqlQojUGweZe5zwewsKcixeVOiy2YtW+aI4aGSLA==", + "dev": true, + "requires": { + "rxjs": "5.5.6", + "semver": "5.5.0", + "semver-intersect": "1.3.1" + } + }, + "@types/events": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.2.0.tgz", + "integrity": "sha512-KEIlhXnIutzKwRbQkGWb/I4HFqBuUykAdHgDED6xqwXJfONCjF5VoE0cXEiurh3XauygxzeDzgtXUqvLkxFzzA==", + "dev": true + }, + "@types/fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-qtxDULQKUenuaDLW003CgC+0T0eiAfH3BrH+vSt87GLzbz5EZ6Ox6mv9rMttvhDOatbb9nYh0E1m7ydoYwUrAg==", + "dev": true, + "requires": { + "@types/node": "9.4.6" + } + }, + "@types/glob": { + "version": "5.0.35", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.35.tgz", + "integrity": "sha512-wc+VveszMLyMWFvXLkloixT4n0harUIVZjnpzztaZ0nKLuul7Z32iMt2fUFGAaZ4y1XWjFRMtCI5ewvyh4aIeg==", + "dev": true, + "requires": { + "@types/events": "1.2.0", + "@types/minimatch": "3.0.3", + "@types/node": "9.4.6" + } + }, + "@types/hammerjs": { + "version": "2.0.35", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.35.tgz", + "integrity": "sha512-4mUIMSZ2U4UOWq1b+iV7XUTE4w+Kr3x+Zb/Qz5ROO6BTZLw2c8/ftjq0aRgluguLs4KRuBnrOy/s389HVn1/zA==", + "dev": true + }, + "@types/handlebars": { + "version": "4.0.36", + "resolved": "https://registry.npmjs.org/@types/handlebars/-/handlebars-4.0.36.tgz", + "integrity": "sha512-LjNiTX7TY7wtuC6y3QwC93hKMuqYhgV9A1uXBKNvZtVC8ZvyWAjZkJ5BvT0K7RKqORRYRLMrqCxpw5RgS+MdrQ==", + "dev": true + }, + "@types/highlight.js": { + "version": "9.12.2", + "resolved": "https://registry.npmjs.org/@types/highlight.js/-/highlight.js-9.12.2.tgz", + "integrity": "sha512-y5x0XD/WXDaGSyiTaTcKS4FurULJtSiYbGTeQd0m2LYZGBcZZ/7fM6t5H/DzeUF+kv8y6UfmF6yJABQsHcp9VQ==", + "dev": true + }, + "@types/jasmine": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-2.8.6.tgz", + "integrity": "sha512-clg9raJTY0EOo5pVZKX3ZlMjlYzVU73L71q5OV1jhE2Uezb7oF94jh4CvwrW6wInquQAdhOxJz5VDF2TLUGmmA==", + "dev": true + }, + "@types/lodash": { + "version": "4.14.99", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.99.tgz", + "integrity": "sha512-h9uv6EUxjfDWNmJCNEoulQF/pFS4ua09LgSGjj6GgmIoyJ/MO5JsK8m9y+9CoG+8j2kDWCW+piPdR9fL7QoQYA==", + "dev": true + }, + "@types/marked": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-0.3.0.tgz", + "integrity": "sha512-CSf9YWJdX1DkTNu9zcNtdCcn6hkRtB5ILjbhRId4ZOQqx30fXmdecuaXhugQL6eyrhuXtaHJ7PHI+Vm7k9ZJjg==", + "dev": true + }, + "@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 + }, + "@types/minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY=", + "dev": true + }, + "@types/node": { + "version": "9.4.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz", + "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==", + "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 + }, + "@types/shelljs": { + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.7.7.tgz", + "integrity": "sha512-37gn9J75TVAhhmzBqoX0vzQodsjzri1SxElMX+Wk092IobNZSGW/8X4ygLOQOrKjCQr5nxGN9Ik0UA3fSdL1Pw==", + "dev": true, + "requires": { + "@types/glob": "5.0.35", + "@types/node": "9.4.6" + } + }, + "@types/tapable": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-0.2.4.tgz", + "integrity": "sha512-pclMAvhPnXJcJu1ZZ8bQthuUcdDWzDuxDdbSf6l1U6s4fP6EBiZpPsOZYqFOrbqDV97sXGFSsb6AUpiLfv4xIA==", + "dev": true + }, + "@types/uglify-js": { + "version": "2.6.30", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-2.6.30.tgz", + "integrity": "sha512-NjiBNGFl58vHJeijl63w1fWRIjLnrfOvimsXF5b3lTzEzkTV1BnVsbqQeLejg54upsHPWIF63aiub5TEwH619A==", + "dev": true, + "requires": { + "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 + } + } + }, + "@types/webpack": { + "version": "3.8.9", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-3.8.9.tgz", + "integrity": "sha512-KfkmKP3bWQLW/nsB6yB/YVNGxAk3TcthPZf5nItCCw3iPjcrIxjWDPgbVg3ggccAyc8I2DhlgU3XYcqTa8jyjA==", + "dev": true, + "requires": { + "@types/node": "9.4.6", + "@types/tapable": "0.2.4", + "@types/uglify-js": "2.6.30", + "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 + } + } + }, + "JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", + "dev": true, + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "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.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", + "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-node": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.3.0.tgz", + "integrity": "sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw==", + "dev": true, + "requires": { + "acorn": "5.5.0", + "xtend": "4.0.1" + } + }, + "add-asset-html-webpack-plugin": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/add-asset-html-webpack-plugin/-/add-asset-html-webpack-plugin-2.1.3.tgz", + "integrity": "sha512-lPdzWnwl96msr5Ix5WyU6ZqD5tQeSb6XD9j8yBKj7WswURRpZ4nZx/Gt+ocgbFdT7j48x7xw40g8wBykFbVptQ==", + "dev": true, + "requires": { + "globby": "8.0.1", + "micromatch": "3.1.9", + "p-each-series": "1.0.0" + }, + "dependencies": { + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "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.1", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.1.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + } + } + }, + "addressparser": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", + "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", + "dev": true, + "optional": true + }, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-2.1.1.tgz", + "integrity": "sha1-1t4Q1a9hMtW9aSQn1G/FOFOQlMc=", + "dev": true, + "requires": { + "extend": "3.0.1", + "semver": "5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.0.3.tgz", + "integrity": "sha1-d0Zt5YnNXTyV8TiqeLxWmjy10no=", + "dev": true + } + } + }, + "ajv": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.2.1.tgz", + "integrity": "sha1-KKarxJOiq+D7TIUHrK7bQ/pVBnE=", + "dev": true, + "requires": { + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=", + "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" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ambi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ambi/-/ambi-2.5.0.tgz", + "integrity": "sha1-fI43K+SIkRV+fOoBy2+RQ9H3QiA=", + "dev": true, + "requires": { + "editions": "1.3.4", + "typechecker": "4.5.0" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "amqplib": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.2.tgz", + "integrity": "sha512-l9mCs6LbydtHqRniRwYkKdqxVa6XMz3Vw1fh+2gJaaVgTM6Jk3o8RccAKWKtlhT1US5sWrFh+KKxsVUALURSIA==", + "dev": true, + "optional": true, + "requires": { + "bitsyntax": "0.0.4", + "bluebird": "3.5.1", + "buffer-more-ints": "0.0.2", + "readable-stream": "1.1.14", + "safe-buffer": "5.1.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, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "angular2-template-loader": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz", + "integrity": "sha1-wNROkP/w+sleiyPwQ6zaf9HFHXw=", + "dev": true, + "requires": { + "loader-utils": "0.2.17" + }, + "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" + } + } + } + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.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 + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.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 + }, + "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" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "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" + } + }, + "apache-crypt": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.1.2.tgz", + "integrity": "sha1-ggeCozu2pf0nEggvDtOiTjybAhQ=", + "dev": true, + "requires": { + "unix-crypt-td-js": "1.0.0" + } + }, + "apache-md5": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.0.6.tgz", + "integrity": "sha1-RwI51AxU58Mt2dbrEbw1eOzJA8I=", + "dev": true + }, + "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 + }, + "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.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.5" + } + }, + "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": "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" + } + }, + "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-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "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.10.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "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, + "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.0" + } + }, + "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" + } + }, + "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 + }, + "assets-webpack-plugin": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz", + "integrity": "sha1-kxzg1m1C6I7V5/GNZVIpQ8V6OH0=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "escape-string-regexp": "1.0.5", + "lodash.assign": "3.2.0", + "lodash.merge": "3.3.2", + "mkdirp": "0.5.1" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" + } + } + } + }, + "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": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", + "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==", + "dev": true, + "optional": true + }, + "astw": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/astw/-/astw-2.2.0.tgz", + "integrity": "sha1-e9QXhNMkk5h66yOba04cV6hzuRc=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "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 + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": 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.0.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", + "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", + "dev": true + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "2.11.3", + "caniuse-lite": "1.0.30000813", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "6.0.19", + "postcss-value-parser": "3.3.0" + } + }, + "awesome-typescript-loader": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-3.5.0.tgz", + "integrity": "sha512-qzgm9SEvodVkSi9QY7Me1/rujg+YBNMjayNSAyzNghwTEez++gXoPCwMvpbHRG7wrOkDCiF6dquvv9ESmUBAuw==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "enhanced-resolve": "3.3.0", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "micromatch": "3.1.9", + "mkdirp": "0.5.1", + "source-map-support": "0.5.3" + }, + "dependencies": { + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "enhanced-resolve": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz", + "integrity": "sha512-2qbxE7ek3YxPJ1ML6V+satHkzHpJQKWkRHmRx6mfAoW59yP8YH8BFplbegSP+u2hBd6B6KCOpvJQ3dZAP+hkpg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "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.1", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + }, + "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-support": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", + "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "axios": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", + "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", + "dev": true, + "optional": true, + "requires": { + "follow-redirects": "1.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=", + "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.5", + "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.3", + "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.5" + } + }, + "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.3", + "lodash": "4.17.5" + } + }, + "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.5", + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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.2.3", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.3.tgz", + "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "base64url": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-2.0.0.tgz", + "integrity": "sha1-6sFuA+oUOO/5Qj1puqNiYu0fcLs=", + "dev": true + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "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 + }, + "bitsyntax": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.0.4.tgz", + "integrity": "sha1-6xDMb4K4xJDj6FaY8H6D1G4MuoI=", + "dev": true, + "optional": true, + "requires": { + "buffer-more-ints": "0.0.2" + } + }, + "bl": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", + "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "2.0.6" + }, + "dependencies": { + "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, + "optional": 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, + "optional": 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, + "optional": 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, + "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" + } + }, + "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.2", + "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": "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" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.0.4.tgz", + "integrity": "sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.8.0", + "defined": "1.0.0", + "safe-buffer": "5.1.1", + "through2": "2.0.3", + "umd": "3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.2.tgz", + "integrity": "sha1-j/CbCixCFxihBRwmCzLkj0QpOM4=", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "browserify": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-14.5.0.tgz", + "integrity": "sha512-gKfOsNQv/toWz+60nSPfYzuwSEdzvV2WdxrVPUbPD/qui44rAkB3t3muNtmmGYHqrG56FGwX9SUEQmzNLAeS7g==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "assert": "1.4.1", + "browser-pack": "6.0.4", + "browser-resolve": "1.11.2", + "browserify-zlib": "0.2.0", + "buffer": "5.1.0", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "defined": "1.0.0", + "deps-sort": "2.0.0", + "domain-browser": "1.1.7", + "duplexer2": "0.1.4", + "events": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "htmlescape": "1.1.1", + "https-browserify": "1.0.0", + "inherits": "2.0.3", + "insert-module-globals": "7.0.2", + "labeled-stream-splicer": "2.0.0", + "module-deps": "4.1.1", + "os-browserify": "0.3.0", + "parents": "1.0.1", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "read-only-stream": "2.0.0", + "readable-stream": "2.3.5", + "resolve": "1.5.0", + "shasum": "1.0.2", + "shell-quote": "1.6.1", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "subarg": "1.0.0", + "syntax-error": "1.4.0", + "through2": "2.0.3", + "timers-browserify": "1.4.2", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4", + "xtend": "4.0.1" + }, + "dependencies": { + "buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "dev": true, + "requires": { + "base64-js": "1.2.3", + "ieee754": "1.1.8" + } + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "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 + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "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 + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "0.11.10" + } + } + } + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "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.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "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": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000813", + "electron-to-chromium": "1.3.36" + } + }, + "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.2.3", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "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-more-ints": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz", + "integrity": "sha1-JrOIXRD6E9t/wBquOquHAZngEkw=", + "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 + }, + "buildmail": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", + "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", + "dev": true, + "optional": true, + "requires": { + "addressparser": "1.0.1", + "libbase64": "0.1.0", + "libmime": "3.0.0", + "libqp": "1.1.0", + "nodemailer-fetch": "1.6.0", + "nodemailer-shared": "1.1.0", + "punycode": "1.4.1" + } + }, + "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 + }, + "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.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": { + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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.0", + "schema-utils": "0.4.5" + } + }, + "cached-path-relative": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.1.tgz", + "integrity": "sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc=", + "dev": true + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "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": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "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=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000813", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000813", + "electron-to-chromium": "1.3.36" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000813", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000813.tgz", + "integrity": "sha1-4KHGA/iICteHsqNWUrJzPzKl4po=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000813", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz", + "integrity": "sha512-A8ITSmH5SFdMFdC704ggjg+x2z5PzQmVlG8tavwnfvbC33Q1UYrj0+G+Xm0SNAnd4He36fwUE/KEWytOEchw+A==", + "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, + "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" + } + }, + "cheerio": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz", + "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=", + "dev": true, + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash": "4.17.5", + "parse5": "3.0.3" + }, + "dependencies": { + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "dev": true, + "requires": { + "domelementtype": "1.3.0" + } + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "dev": true, + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "parse5": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", + "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", + "dev": true, + "requires": { + "@types/node": "9.4.6" + } + } + } + }, + "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.1.3", + "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" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "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.1" + } + }, + "circular-dependency-plugin": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz", + "integrity": "sha512-yEFtUNUYT4jBykEX5ZOHw+5goA3glGZr9wAXIQqoyakjz5H5TeUmScnWRc52douAhb9eYzK3s7V6bXfNnjFdzg==", + "dev": true + }, + "circular-json": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.1.tgz", + "integrity": "sha512-UjgcRlTAhAkLeXmDe2wK7ktwy/tgAqxiSndTIPiFZuIPLZmzHzWMwUIe9h9m/OokypG7snxCDEuwJshGBdPvaw==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "1.1.3" + }, + "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 + } + } + }, + "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" + } + }, + "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-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-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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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 + } + } + }, + "clean-css": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.10.tgz", + "integrity": "sha1-PfwsJWnV8DwUtB2HWtm8yuCcuJ4=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "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" + }, + "dependencies": { + "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" + } + }, + "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 + } + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "code-block-writer": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-6.6.0.tgz", + "integrity": "sha1-T+33A0T95H2UTKpu8K25mCS+khA=", + "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" + } + }, + "coffee-script": { + "version": "1.12.7", + "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", + "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", + "dev": true + }, + "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": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.3", + "color-convert": "1.9.1", + "color-string": "0.3.0" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + } + } + }, + "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 + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + }, + "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.5" + } + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "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=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==", + "dev": true + }, + "common-tags": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.7.2.tgz", + "integrity": "sha512-joj9ZlUOjCrwdbmiLqafeUSgkUM74NqhLsZtSqDmhKudaIY197zTrb8JMl31fMnCUuxwFT23eC/oWvrZzDLRJQ==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "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.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "dev": true, + "requires": { + "mime-db": "1.33.0" + } + }, + "compression": { + "version": "1.7.2", + "resolved": "https://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.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-gslSSJx03QKa59cIKqeJO9HQ/WZMotvYJCuaUULrLpjj8oG40kV2Z+gz82pVxlTkOADi4PJxQPPfhl1ELYrrXw==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "typedarray": "0.0.6" + } + }, + "connect": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.4.1.tgz", + "integrity": "sha1-ohNh0/QJnvdhzabcSpc7seuwo00=", + "dev": true, + "requires": { + "debug": "2.2.0", + "finalhandler": "0.4.1", + "parseurl": "1.3.2", + "utils-merge": "1.0.0" + }, + "dependencies": { + "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" + } + }, + "finalhandler": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.1.tgz", + "integrity": "sha1-haF8bFmpRxfSYtYSMNSw6+PUoU0=", + "dev": true, + "requires": { + "debug": "2.2.0", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "unpipe": "1.0.0" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true + }, + "utils-merge": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", + "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=", + "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.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-ROQ85fWKuhJfUkBTdHvfV+Zv6Ltm3G/vPVFdLPFwzWzd9RUY1yLw3rt6FmKK2PaeNQCNvmwgFhuarkjuV4PVDQ==", + "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.2.0", + "serialize-javascript": "1.4.0" + }, + "dependencies": { + "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-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" + } + } + } + }, + "core-js": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" + }, + "core-object": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/core-object/-/core-object-3.1.5.tgz", + "integrity": "sha512-sA2/4+/PZ/KV6CKgjrVrrUVBKCkdDO02CUlQ0YKTQoYUwPYNOtOAcWlbYhd5v/1JqYaA6oZ4sDlOU4ppVw6Wbg==", + "dev": true, + "requires": { + "chalk": "2.2.2" + } + }, + "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 + }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "corser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/corser/-/corser-2.0.1.tgz", + "integrity": "sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=" + }, + "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.11.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" + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.10" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "cross-env": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.1.3.tgz", + "integrity": "sha512-UOokgwvDzCT0mqRSLEkJzUhYXB1vK3E5UgDrD41QiXsm9UetcW2rCGHYz/O3p873lMJ1VZbFCF9Izkwh7nYR5A==", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "is-windows": "1.0.2" + }, + "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.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } + }, + "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.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "csextends": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/csextends/-/csextends-1.1.1.tgz", + "integrity": "sha1-zFPBNJ+vfwrmzfb2xKTZFW08TsE=", + "dev": true, + "requires": { + "coffee-script": "1.12.7" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.10", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.10.tgz", + "integrity": "sha512-X1IJteKnW9Llmrd+lJ0f7QZHh9Arf+11S7iRcoT2+riig3BK0QaCaOtubAulMK6Itbo08W6d3l8sW21r+Jhp5Q==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.2.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "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 + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.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 + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000813", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000813", + "electron-to-chromium": "1.3.36" + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + } + }, + "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.39" + } + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "data-uri-to-buffer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz", + "integrity": "sha512-vKQ9DTQPN1FLYiiEEOQ6IBGFqvjCa5rSK3cWMy/Nespm5d/x3dGFT9UBZnkLxCwua/IXBi2TYnwTEpsOvhC4UQ==", + "dev": true, + "optional": true + }, + "date-format": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", + "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "dev": true + }, + "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 + }, + "dateformat": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", + "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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 + }, + "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": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "degenerator": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", + "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", + "dev": true, + "optional": true, + "requires": { + "ast-types": "0.11.2", + "escodegen": "1.9.1", + "esprima": "3.1.3" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "optional": true + } + } + }, + "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.0", + "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 + }, + "denodeify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", + "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "deps-sort": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.0.tgz", + "integrity": "sha1-CRckkC6EZYJg65EHSMzNGvbiH7U=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "shasum": "1.0.2", + "subarg": "1.0.0", + "through2": "2.0.3" + } + }, + "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.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.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 + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "5.5.0", + "defined": "1.0.0" + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "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.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.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" + } + }, + "domino": { + "version": "1.0.30", + "resolved": "https://registry.npmjs.org/domino/-/domino-1.0.30.tgz", + "integrity": "sha512-ikq8WiDSkICdkElud317F2Sigc6A3EDpWsxWBwIZqOl95km4p/Vc9Rj98id7qKgsjDmExj0AVM7JOd4bb647Xg==" + }, + "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" + } + }, + "dot": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/dot/-/dot-1.1.2.tgz", + "integrity": "sha1-xzdwGfxOVQeYkosrmv62ar+h8vk=", + "dev": true + }, + "double-ended-queue": { + "version": "2.1.0-0", + "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", + "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", + "dev": true, + "optional": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.5" + } + }, + "duplexify": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.4.tgz", + "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "stream-shift": "1.0.0" + } + }, + "eachr": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz", + "integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=", + "dev": true, + "requires": { + "editions": "1.3.4", + "typechecker": "4.5.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" + } + }, + "ecstatic": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ecstatic/-/ecstatic-3.2.0.tgz", + "integrity": "sha512-Goilx/2cfU9vvfQjgtNgc2VmJAD8CasQ6rZDqCd2u4Hsyd/qFET6nBf60jiHodevR3nl3IGzNKtrzPXWP88utQ==", + "requires": { + "he": "1.1.1", + "mime": "1.6.0", + "minimist": "1.2.0", + "url-join": "2.0.5" + } + }, + "editions": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", + "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==", + "dev": true + }, + "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.5.7", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", + "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.36", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz", + "integrity": "sha1-Dqv3Gp6+qQE/scw1o5DgaGJPJ+g=", + "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.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "ember-cli-string-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz", + "integrity": "sha1-ObZ3/CgF9VFzc1N2/O8njqpEUqE=", + "dev": true + }, + "emojis-list": { + "version": "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": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", + "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "dev": true, + "requires": { + "accepts": "1.3.5", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "uws": "9.14.0", + "ws": "3.3.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" + } + } + } + }, + "engine.io-client": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.5.tgz", + "integrity": "sha512-Rv9vgb83zrNVhRircUXHi4mtbJhgy2oWtJOCZEbCLFs2HiDSWmh/aOEj8TwoKsn8zXGqTuQuPSoU4v3E10bR6A==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "3.1.0", + "engine.io-parser": "2.1.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "3.3.3", + "xmlhttprequest-ssl": "1.5.5", + "yeast": "0.1.2" + }, + "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" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz", + "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.4", + "has-binary2": "1.0.2" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "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.10.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.10.0.tgz", + "integrity": "sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ==", + "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" + } + }, + "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.39", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.39.tgz", + "integrity": "sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g==", + "dev": true, + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "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.39", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.39", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-promise": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.0.2.tgz", + "integrity": "sha1-AQ1YWEI6XxGJeWZfRkhqlcbuK7Y=", + "dev": true + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.39", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "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.39" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.39", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", + "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", + "dev": true, + "optional": true, + "requires": { + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", + "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" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "estree-walker": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.3.1.tgz", + "integrity": "sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao=", + "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 + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.39" + } + }, + "event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "dev": true, + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=" + }, + "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.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==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "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.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + } + } + }, + "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": { + "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": "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" + } + }, + "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.3" + } + }, + "exports-loader": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.7.0.tgz", + "integrity": "sha512-RKwCrO4A6IiKm0pG3c9V46JxIHcDplwwGJn6+JJ1RcVnh/WSGJa0xkmk5cRVtgOPzCAtTMGj2F7nluh9L0vpSA==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "source-map": "0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.0.tgz", + "integrity": "sha1-D+llA6yGpa213mP05BKuSHLNvoY=", + "dev": true + } + } + }, + "expose-loader": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.4.tgz", + "integrity": "sha512-lweINkewAXcQtNjd7j1gO3cd8O/8lNYijsEwH4YZ+Dv3gT2Kh9/YvJov5Mdp2A75QIhgOvsSyRa/ZG3wYjNZpA==", + "dev": true + }, + "express": { + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", + "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.0", + "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.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", + "statuses": "1.3.1", + "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 + } + } + }, + "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" + } + } + } + }, + "extendr": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/extendr/-/extendr-3.3.0.tgz", + "integrity": "sha512-BmBSu+KOX2XOo3XMECiekGY8VAr3O4aGYgOaHQDNg2ez5rOYW+SDfNStao4VNzr+6N27Vw3A7HJKJMrHmAAXvQ==", + "dev": true, + "requires": { + "editions": "1.3.4", + "typechecker": "4.5.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" + } + }, + "extract-opts": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/extract-opts/-/extract-opts-3.3.1.tgz", + "integrity": "sha1-WrvtyYwNUgLjJ4cn+Rktfghsa+E=", + "dev": true, + "requires": { + "eachr": "3.2.0", + "editions": "1.3.4", + "typechecker": "4.5.0" + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.1.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" + } + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "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" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "0.1.1", + "color-support": "1.1.3", + "time-stamp": "1.1.0" + }, + "dependencies": { + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "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-glob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.1.0.tgz", + "integrity": "sha512-QSSKZwDHLznUXdVtWvsfdbojmYI5igtVwfVbKW/LwNsy0JdM1cZ5yyP1kl5npg2ddugdnOk66QlNhbJ1c1hErg==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "2.2.1", + "glob-parent": "3.1.0", + "is-glob": "4.0.0", + "merge2": "1.2.1", + "micromatch": "3.1.9" + }, + "dependencies": { + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "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.1", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "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-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-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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + } + } + }, + "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" + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "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 + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "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" + } + }, + "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.2.0", + "pkg-dir": "2.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true + }, + "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" + } + }, + "findit2": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz", + "integrity": "sha1-WKRmaX34piBc39vzlVNri9d3pfY=", + "dev": true + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "follow-redirects": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", + "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.9" + } + }, + "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": "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" + } + }, + "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.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "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 + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", + "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.5" + } + }, + "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": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.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=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.5" + } + }, + "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.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.9.2", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "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.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "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 + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "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" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "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 + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "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 + }, + "oauth-sign": { + "version": "0.8.2", + "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, + "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.4", + "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 + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.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 + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "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.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "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": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "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 + } + } + }, + "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" + } + }, + "ftp": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", + "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", + "dev": true, + "optional": true, + "requires": { + "readable-stream": "1.1.14", + "xregexp": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true, + "optional": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "optional": 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, + "optional": true + } + } + }, + "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.2" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "requires": { + "globule": "1.2.0" + } + }, + "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 + }, + "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, + "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-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.1.tgz", + "integrity": "sha512-7aelVrYqCLuVjq2kEKRTH8fXPTC0xKTkM+G7UlFkEwCXY3sFbSxvY375JoFowOAYbkaU47SrBvOefUlLZZ+6QA==", + "dev": true, + "optional": true, + "requires": { + "data-uri-to-buffer": "1.2.0", + "debug": "2.6.9", + "extend": "3.0.1", + "file-uri-to-path": "1.0.0", + "ftp": "0.3.10", + "readable-stream": "2.3.5" + } + }, + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gh-pages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-1.1.0.tgz", + "integrity": "sha512-ZpDkeOVmIrN5mz+sBWDz5zmTqcbNJzI/updCwEv/7rrSdpTNlj1B5GhBqG7f4Q8p5sJOdnBV0SIqxJrxtZQ9FA==", + "dev": true, + "requires": { + "async": "2.6.0", + "base64url": "2.0.0", + "commander": "2.11.0", + "fs-extra": "4.0.3", + "globby": "6.1.0", + "graceful-fs": "4.1.11", + "rimraf": "2.6.2" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "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" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "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" + } + }, + "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" + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "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.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.5", + "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 + }, + "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": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true, + "optional": true + }, + "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" + } + }, + "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 + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true, + "optional": 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" + } + } + } + }, + "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 + }, + "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, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "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-binary2": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.2.tgz", + "integrity": "sha1-6D26SfC5vk0CbSc2U1DZ8D9Uvpg=", + "dev": true, + "requires": { + "isarray": "2.0.1" + }, + "dependencies": { + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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": { + "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" + } + } + } + }, + "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": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "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.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.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=" + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=", + "dev": true + }, + "hipchat-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", + "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", + "dev": true, + "optional": true, + "requires": { + "lodash": "4.17.5", + "request": "2.81.0" + } + }, + "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.0", + "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 + }, + "homedir-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", + "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "dev": true, + "requires": { + "parse-passwd": "1.0.0" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "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.1", + "readable-stream": "2.3.5", + "wbuf": "1.7.2" + } + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "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.10", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.10.tgz", + "integrity": "sha512-5c8iAyeIGAiuFhVjJ0qy1lgvyQxxuZgjeOuMnoK/wjEyy8DF3xKUnE9pO+6H7VMir976K6SGlZV8ZEmIOea/Zg==", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "clean-css": "4.1.10", + "commander": "2.14.1", + "he": "1.1.1", + "ncname": "1.0.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.3.13" + } + }, + "html-webpack-plugin": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz", + "integrity": "sha1-f5xCG36pHsRg9WUn1430hO51N9U=", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "html-minifier": "3.5.10", + "loader-utils": "0.2.17", + "lodash": "4.17.5", + "pretty-error": "2.1.1", + "toposort": "1.0.6" + }, + "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" + } + } + } + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "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-auth": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-2.4.11.tgz", + "integrity": "sha1-YfAkpuDnxIk0lEiVyHoTlVCcYZs=", + "dev": true, + "requires": { + "apache-crypt": "1.1.2", + "apache-md5": "1.0.6", + "node-uuid": "1.4.8" + }, + "dependencies": { + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "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.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.3.1" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "http-parser-js": { + "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.16.2", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", + "integrity": "sha1-Bt/ykpUr9k2+hHH6nfcwZtTzd0I=", + "requires": { + "eventemitter3": "1.2.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz", + "integrity": "sha1-zBzjjkU7+YSg93AtLdWcc9CBKEo=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "1.16.2", + "is-glob": "3.1.0", + "lodash": "4.17.5", + "micromatch": "2.3.11" + }, + "dependencies": { + "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-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" + } + } + } + }, + "http-server": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/http-server/-/http-server-0.11.1.tgz", + "integrity": "sha512-6JeGDGoujJLmhjiRGlt8yK8Z9Kl0vnl/dQoQZlc4oeqaUoAKQg94NILLfrY3oWzSyFaQCVNTcKE5PZ3cH8VP9w==", + "requires": { + "colors": "1.0.3", + "corser": "2.0.1", + "ecstatic": "3.2.0", + "http-proxy": "1.16.2", + "opener": "1.4.3", + "optimist": "0.6.1", + "portfinder": "1.0.13", + "union": "0.4.6" + } + }, + "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, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "httpntlm": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", + "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", + "dev": true, + "requires": { + "httpreq": "0.4.24", + "underscore": "1.7.0" + } + }, + "httpreq": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", + "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", + "dev": true + }, + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz", + "integrity": "sha1-NffabEjOTdv6JkiRrFk+5f+GceY=", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1" + } + }, + "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 + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.19" + } + }, + "ie-shim": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ie-shim/-/ie-shim-0.1.0.tgz", + "integrity": "sha1-0yneIo59/mVv6uo+IHSO8JU2PF0=" + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "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.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "ignorefs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ignorefs/-/ignorefs-1.2.0.tgz", + "integrity": "sha1-2ln7hYl25KXkNwLM0fKC/byeV1Y=", + "dev": true, + "requires": { + "editions": "1.3.4", + "ignorepatterns": "1.1.0" + } + }, + "ignorepatterns": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ignorepatterns/-/ignorepatterns-1.1.0.tgz", + "integrity": "sha1-rI9DbyI5td+2bV8NOpBKh6xnzF4=", + "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" + } + }, + "imports-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/imports-loader/-/imports-loader-0.8.0.tgz", + "integrity": "sha512-kXWL7Scp8KQ4552ZcdVTeaQCZSLW+e6nJfp3cwUMB673T7Hr98Xjx5JK+ql7ADlJUvj1JS5O01RLbKoutN5QDQ==", + "dev": true, + "requires": { + "loader-utils": "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 + } + } + }, + "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 + }, + "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" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflection": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.10.0.tgz", + "integrity": "sha1-W//LEZetPoEFD44X4hZoCH7p6y8=", + "dev": true, + "optional": 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 + }, + "inline-manifest-webpack-plugin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/inline-manifest-webpack-plugin/-/inline-manifest-webpack-plugin-3.0.1.tgz", + "integrity": "sha1-yiFRBjEVKY4v2UtmmrdsfdY+RK0=", + "dev": true, + "requires": { + "source-map-url": "0.4.0" + } + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "insert-module-globals": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.0.2.tgz", + "integrity": "sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw==", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "combine-source-map": "0.7.2", + "concat-stream": "1.5.2", + "is-buffer": "1.1.6", + "lexical-scope": "1.2.0", + "process": "0.11.10", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "combine-source-map": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.7.2.tgz", + "integrity": "sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4=", + "dev": true, + "requires": { + "convert-source-map": "1.1.3", + "inline-source-map": "0.6.2", + "lodash.memoize": "3.0.4", + "source-map": "0.5.7" + } + }, + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + } + }, + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "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 + } + } + }, + "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" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", + "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "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-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "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.2" + }, + "dependencies": { + "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 + } + } + }, + "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": "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" + }, + "dependencies": { + "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 + } + } + }, + "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": "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" + }, + "dependencies": { + "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 + } + } + }, + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "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": "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" + } + }, + "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 + }, + "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, + "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": "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" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", + "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "dev": true, + "requires": { + "is-path-inside": "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-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", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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 + }, + "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.1" + } + }, + "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-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "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": "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" + } + }, + "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.11.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.0", + "wordwrap": "1.0.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", + "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" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true + }, + "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 + }, + "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" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "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" + } + }, + "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" + } + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz", + "integrity": "sha512-alLSEFX06ApU75sm5oWcaVNaiss/bgMRiWTct3g0P0ZZTKjR+6QiCcuVOKDI1kWJgwHEnIXsv/dWm783kPpmtw==", + "dev": true, + "requires": { + "convert-source-map": "1.5.1", + "istanbul-lib-instrument": "1.9.2", + "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.1.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz", + "integrity": "sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz", + "integrity": "sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA==", + "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.1.2", + "semver": "5.5.0" + } + }, + "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 + }, + "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.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==", + "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=", + "dev": true + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + } + }, + "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-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", + "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", + "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, + "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 + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": 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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "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 + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.0.tgz", + "integrity": "sha512-K9Kjp8CldLyL9ANSUctDyxC7zH3hpqXj/K09qVf06K3T/kXaHtFZ5tQciK7OzQu68FLvI89Na510kqQ2LCbpIw==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "browserify": "14.5.0", + "chokidar": "1.7.0", + "colors": "1.1.2", + "combine-lists": "1.0.1", + "connect": "3.6.6", + "core-js": "2.5.3", + "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.16.2", + "isbinaryfile": "3.0.2", + "lodash": "4.17.5", + "log4js": "2.5.3", + "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.1", + "socket.io": "2.0.4", + "source-map": "0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "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" + } + }, + "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 + } + } + }, + "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.0" + } + }, + "karma-coverage": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz", + "integrity": "sha1-Wv+LOc9plNwi3kyENix2ABtjfPY=", + "dev": true, + "requires": { + "dateformat": "1.0.12", + "istanbul": "0.4.5", + "lodash": "3.10.1", + "minimatch": "3.0.4", + "source-map": "0.5.7" + }, + "dependencies": { + "lodash": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", + "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", + "dev": true + } + } + }, + "karma-jasmine": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.1.tgz", + "integrity": "sha1-b+hA51oRYAydkehLM8RY4cRqNSk=", + "dev": true + }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "2.2.2", + "log-symbols": "2.2.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" + } + } + } + }, + "karma-remap-coverage": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/karma-remap-coverage/-/karma-remap-coverage-0.1.5.tgz", + "integrity": "sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw==", + "dev": true, + "requires": { + "remap-istanbul": "0.10.1" + } + }, + "karma-source-map-support": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz", + "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=", + "dev": true, + "requires": { + "source-map-support": "0.4.18" + } + }, + "karma-sourcemap-loader": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz", + "integrity": "sha1-kTIsd/jxPUb+0GKwQuEAnUxFBdg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "karma-webpack": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-2.0.13.tgz", + "integrity": "sha512-2cyII34jfrAabbI2+4Rk4j95Nazl98FvZQhgSiqKUDarT317rxfv/EdzZ60CyATN4PQxJdO5ucR5bOOXkEVrXw==", + "dev": true, + "requires": { + "async": "2.6.0", + "babel-runtime": "6.26.0", + "loader-utils": "1.1.0", + "lodash": "4.17.5", + "source-map": "0.5.7", + "webpack-dev-middleware": "1.12.2" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "2.0.0" + } + } + } + }, + "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": "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" + } + }, + "labeled-stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz", + "integrity": "sha1-pS4dE4AkwAuGscDJH2d5GLiuClk=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "isarray": "0.0.1", + "stream-splicer": "2.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "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 + }, + "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" + } + }, + "less": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz", + "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==", + "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.81.0", + "source-map": "0.5.7" + } + }, + "less-loader": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-4.0.6.tgz", + "integrity": "sha512-WPFY3NMJGJna8kIxtgSu6AVG7K6uRPdfE2J7vpQqFWMN/RkOosV09rOVUt3wghNClWH2Pg7YumD1dHiv1Thfug==", + "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" + } + }, + "lexical-scope": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/lexical-scope/-/lexical-scope-1.2.0.tgz", + "integrity": "sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ=", + "dev": true, + "requires": { + "astw": "2.2.0" + } + }, + "libbase64": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", + "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", + "dev": true + }, + "libmime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", + "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", + "dev": true, + "requires": { + "iconv-lite": "0.4.15", + "libbase64": "0.1.0", + "libqp": "1.1.0" + }, + "dependencies": { + "iconv-lite": { + "version": "0.4.15", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", + "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", + "dev": true + } + } + }, + "libqp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", + "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", + "dev": true + }, + "license-webpack-plugin": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-+sie46vNe5L48N94LEzEvreJqAdi+N3x3mXUx+iujuAmftWdJUh68RSDPgWK3DRJuu50dwiyH7MdVAx95zfKQA==", + "dev": true, + "requires": { + "ejs": "2.5.7" + } + }, + "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" + } + }, + "live-server": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.1.0.tgz", + "integrity": "sha1-pp8ObKWB4DkapXlBlw4XwwjdSGk=", + "dev": true, + "requires": { + "colors": "1.1.2", + "connect": "3.4.1", + "cors": "2.8.4", + "event-stream": "3.3.4", + "faye-websocket": "0.11.1", + "http-auth": "2.4.11", + "morgan": "1.9.0", + "object-assign": "4.1.1", + "opn": "5.2.0", + "proxy-middleware": "0.15.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "watchr": "2.6.0" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "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" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "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 + }, + "opn": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", + "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "dev": true, + "requires": { + "is-wsl": "1.1.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.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + } + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==", + "dev": true + }, + "lodash._arraycopy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", + "integrity": "sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE=", + "dev": true + }, + "lodash._arrayeach": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", + "integrity": "sha1-urFWsqkNPxu9XGU0AzSeXlkz754=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basefor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", + "integrity": "sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "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 + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": 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.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isplainobject": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz", + "integrity": "sha1-moI4rhayAEMpYM1zRlEtASP79MU=", + "dev": true, + "requires": { + "lodash._basefor": "3.0.3", + "lodash.isarguments": "3.1.0", + "lodash.keysin": "3.0.8" + } + }, + "lodash.istypedarray": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz", + "integrity": "sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.keysin": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/lodash.keysin/-/lodash.keysin-3.0.8.tgz", + "integrity": "sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8=", + "dev": true, + "requires": { + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-3.3.2.tgz", + "integrity": "sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ=", + "dev": true, + "requires": { + "lodash._arraycopy": "3.0.0", + "lodash._arrayeach": "3.0.0", + "lodash._createassigner": "3.1.1", + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4", + "lodash.isplainobject": "3.2.0", + "lodash.istypedarray": "3.0.6", + "lodash.keys": "3.1.2", + "lodash.keysin": "3.0.8", + "lodash.toplainobject": "3.0.0" + } + }, + "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 + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": 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 + }, + "lodash.toplainobject": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz", + "integrity": "sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keysin": "3.0.8" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "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": "2.5.3", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.5.3.tgz", + "integrity": "sha512-YL/qpTxYtK0iWWbuKCrevDZz5lh+OjyHHD+mICqpjnYGKdNRBvPeh/1uYjkKUemT1CSO4wwLOwphWMpKAnD9kw==", + "dev": true, + "requires": { + "amqplib": "0.5.2", + "axios": "0.15.3", + "circular-json": "0.5.1", + "date-format": "1.2.0", + "debug": "3.1.0", + "hipchat-notifier": "1.1.0", + "loggly": "1.1.1", + "mailgun-js": "0.7.15", + "nodemailer": "2.7.2", + "redis": "2.8.0", + "semver": "5.5.0", + "slack-node": "0.2.0", + "streamroller": "0.7.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" + } + } + } + }, + "loggly": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", + "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "dev": true, + "optional": true, + "requires": { + "json-stringify-safe": "5.0.1", + "request": "2.75.0", + "timespan": "2.3.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, + "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, + "optional": 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.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", + "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", + "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.14.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", + "dev": true, + "optional": true + }, + "qs": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", + "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", + "dev": true, + "optional": true + }, + "request": { + "version": "2.75.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", + "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "bl": "1.1.2", + "caseless": "0.11.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.0.0", + "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", + "node-uuid": "1.4.8", + "oauth-sign": "0.8.2", + "qs": "6.2.3", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.4.3" + } + }, + "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, + "optional": 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 + } + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.3.tgz", + "integrity": "sha512-OCxd/b78TijTB4b6zVqLbMrxhebyvdZKwqpL0VHUZ0pYhavXaPD4l6Xrr4n5xqTYWiqtb0i7ikSoJY/myQ/Org==", + "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.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "lunr": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.1.6.tgz", + "integrity": "sha512-ydJpB8CX8cZ/VE+KMaYaFcZ6+o2LruM6NG76VXdflYTgluvVemz1lW4anE+pyBbLvxJHZdvD1Jy/fOqdzAEJog==", + "dev": true + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "macos-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-1.1.0.tgz", + "integrity": "sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA==", + "dev": true + }, + "magic-string": { + "version": "0.22.4", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz", + "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==", + "dev": true, + "requires": { + "vlq": "0.2.3" + } + }, + "mailcomposer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", + "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", + "dev": true, + "optional": true, + "requires": { + "buildmail": "4.0.1", + "libmime": "3.0.0" + } + }, + "mailgun-js": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.7.15.tgz", + "integrity": "sha1-7jZqINrGTDwVwD1sGz4O15UlKrs=", + "dev": true, + "optional": true, + "requires": { + "async": "2.1.5", + "debug": "2.2.0", + "form-data": "2.1.4", + "inflection": "1.10.0", + "is-stream": "1.1.0", + "path-proxy": "1.0.0", + "proxy-agent": "2.0.0", + "q": "1.4.1", + "tsscmp": "1.0.5" + }, + "dependencies": { + "async": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.5.tgz", + "integrity": "sha1-5YfGhYCZSsZ/xW/4bTrFa9voELw=", + "dev": true, + "optional": true, + "requires": { + "lodash": "4.17.5" + } + }, + "debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", + "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "dev": true, + "optional": true, + "requires": { + "ms": "0.7.1" + } + }, + "ms": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", + "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", + "dev": true, + "optional": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true, + "optional": true + } + } + }, + "make-dir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz", + "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", + "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-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "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" + } + }, + "marked": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.17.tgz", + "integrity": "sha512-+AKbNsjZl6jFfLPwHhWmGTqE009wTKn3RTmn9K8oUKHrX/abPJjtcRtXpYB/FFrwPJRUA86LX/de3T0knkPCmQ==", + "dev": true + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "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" + }, + "dependencies": { + "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.1" + } + } + } + }, + "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.5" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "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" + } + }, + "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 + }, + "merge2": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.1.tgz", + "integrity": "sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg==", + "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": "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" + } + }, + "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==" + }, + "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 + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "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": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "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.1", + "duplexify": "3.5.4", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "2.0.1", + "pumpify": "1.4.0", + "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=", + "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=" + } + } + }, + "module-deps": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-4.1.1.tgz", + "integrity": "sha1-IyFYM/HaE/1gbMuAh7RIUty4If0=", + "dev": true, + "requires": { + "JSONStream": "1.3.2", + "browser-resolve": "1.11.2", + "cached-path-relative": "1.0.1", + "concat-stream": "1.5.2", + "defined": "1.0.0", + "detective": "4.7.1", + "duplexer2": "0.1.4", + "inherits": "2.0.3", + "parents": "1.0.1", + "readable-stream": "2.3.5", + "resolve": "1.5.0", + "stream-combiner2": "1.1.1", + "subarg": "1.0.0", + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.0.6", + "typedarray": "0.0.6" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "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 + } + } + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "dev": true, + "requires": { + "basic-auth": "2.0.0", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + } + }, + "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=" + }, + "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 + }, + "multimatch": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", + "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" + } + }, + "nan": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.9.2.tgz", + "integrity": "sha512-ltW65co7f3PQWBDbqVvaU1WtFJUsNW7sWWm4HINhbMQIyVyzIeyZ8toX5TC5eeooE6piZoaEh4cZkueSKG3KYw==", + "dev": 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.1", + "to-regex": "3.0.2" + }, + "dependencies": { + "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 + }, + "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 + }, + "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 + } + } + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.0.tgz", + "integrity": "sha512-nJmSswG4As/MkRq7QZFuH/sf/yuv8ODdMZrY4Bedjp77a5MK4A6s7YbBB64c9u79EBUOfXUXBvArmvzTD0X+6g==", + "dev": true + }, + "netmask": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", + "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", + "dev": true, + "optional": true + }, + "ngc-webpack": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/ngc-webpack/-/ngc-webpack-4.1.2.tgz", + "integrity": "sha512-ih9p0sABt/9UHsKSFuFzcmiBljcDcAEp+fVbpOP/yurE0UXWoXbBVZEzK8UGHqcGNKS4nVsz9SIErJkvesQXaQ==", + "dev": true, + "requires": { + "@types/minimist": "1.2.0", + "loader-utils": "1.1.0", + "magic-string": "0.22.4", + "minimist": "1.2.0", + "reflect-metadata": "0.1.12", + "resolve": "1.5.0", + "semver": "5.5.0", + "source-map": "0.5.7", + "ts-node": "3.3.0" + }, + "dependencies": { + "ts-node": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-3.3.0.tgz", + "integrity": "sha1-wTxqMCTjC+EYDdUwOPwgkonUv2k=", + "dev": true, + "requires": { + "arrify": "1.0.1", + "chalk": "2.2.2", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18", + "tsconfig": "6.0.0", + "v8flags": "3.0.2", + "yn": "2.0.0" + } + } + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.1.tgz", + "integrity": "sha1-naYR6giYL0uUIGs760zJZl8gwwA=", + "dev": true + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "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.0" + }, + "dependencies": { + "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.1.1" + } + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": 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.5", + "stream-browserify": "2.0.1", + "stream-http": "2.8.0", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.6", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-modules-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/node-modules-path/-/node-modules-path-1.0.1.tgz", + "integrity": "sha1-QAlrCM560OoUaAhjr0ScfHWl0cg=", + "dev": true + }, + "node-sass": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", + "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "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.9.2", + "node-gyp": "3.6.2", + "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 + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "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" + } + }, + "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, + "requires": { + "chalk": "1.1.3", + "commander": "2.14.1", + "is-my-json-valid": "2.17.2", + "pinkie-promise": "2.0.1" + } + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.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.5", + "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 + } + } + }, + "nodemailer": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", + "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", + "dev": true, + "optional": true, + "requires": { + "libmime": "3.0.0", + "mailcomposer": "4.0.1", + "nodemailer-direct-transport": "3.3.2", + "nodemailer-shared": "1.1.0", + "nodemailer-smtp-pool": "2.8.2", + "nodemailer-smtp-transport": "2.7.2", + "socks": "1.1.9" + }, + "dependencies": { + "socks": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", + "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", + "dev": true, + "optional": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + } + } + } + }, + "nodemailer-direct-transport": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", + "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-fetch": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", + "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", + "dev": true + }, + "nodemailer-shared": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", + "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", + "dev": true, + "requires": { + "nodemailer-fetch": "1.6.0" + } + }, + "nodemailer-smtp-pool": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", + "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-smtp-transport": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", + "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", + "dev": true, + "optional": true, + "requires": { + "nodemailer-shared": "1.1.0", + "nodemailer-wellknown": "0.1.10", + "smtp-connection": "2.12.0" + } + }, + "nodemailer-wellknown": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", + "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", + "dev": true + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "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.5.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 + }, + "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.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npm-run-all": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.2.tgz", + "integrity": "sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "chalk": "2.2.2", + "cross-spawn": "5.1.0", + "memorystream": "0.3.1", + "minimatch": "3.0.4", + "ps-tree": "1.1.0", + "read-pkg": "3.0.0", + "shell-quote": "1.6.1", + "string.prototype.padend": "3.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.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + } + }, + "parse-json": { + "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.3.1", + "json-parse-better-errors": "1.0.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "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.4", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + } + } + } + } + }, + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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" + } + }, + "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" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0", + "function-bind": "1.1.1", + "has": "1.0.1" + } + }, + "obuf": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.1.tgz", + "integrity": "sha1-EEEktsYCxnlogaBCVB0220OlJk4=", + "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" + } + }, + "opener": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.4.3.tgz", + "integrity": "sha1-XG2ixdflgx6P+jlklQ+NZnSskLg=" + }, + "opn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz", + "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==", + "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=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "optimize-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/optimize-js/-/optimize-js-1.0.3.tgz", + "integrity": "sha1-QyavhlfEpf8y2vcmYxdU9yq3/bw=", + "dev": true, + "requires": { + "acorn": "3.3.0", + "concat-stream": "1.6.1", + "estree-walker": "0.3.1", + "magic-string": "0.16.0", + "yargs": "4.8.1" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "magic-string": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", + "integrity": "sha1-lw67DacZMwEoX7GqZQ85vdgetFo=", + "dev": true, + "requires": { + "vlq": "0.2.3" + } + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", + "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": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "dev": true, + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "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", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + } + } + }, + "optimize-js-plugin": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/optimize-js-plugin/-/optimize-js-plugin-0.0.4.tgz", + "integrity": "sha1-aeemfg9mxp9/wMeyXF0zsttsKBc=", + "dev": true, + "requires": { + "optimize-js": "1.0.3", + "webpack-sources": "0.1.5" + }, + "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 + }, + "webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha1-qh86vw8NdNtxEcQOUAuE+WZkB1A=", + "dev": true, + "requires": { + "source-list-map": "0.1.8", + "source-map": "0.5.7" + } + } + } + }, + "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" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.0.tgz", + "integrity": "sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs=", + "dev": true, + "requires": { + "url-parse": "1.0.5" + }, + "dependencies": { + "url-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.0.5.tgz", + "integrity": "sha1-CFSGBCKv3P7+tsllxmLUgAFpkns=", + "dev": true, + "requires": { + "querystringify": "0.0.4", + "requires-port": "1.0.0" + } + } + } + }, + "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, + "requires": { + "lcid": "1.0.0" + } + }, + "os-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-2.0.1.tgz", + "integrity": "sha1-uaOGNhwXrjohc27wWZQFyajF3F4=", + "dev": true, + "requires": { + "macos-release": "1.1.0", + "win-release": "1.1.1" + } + }, + "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-each-series": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", + "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", + "dev": true, + "requires": { + "p-reduce": "1.0.0" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "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.2.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-reduce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", + "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", + "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 + }, + "pac-proxy-agent": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz", + "integrity": "sha512-QBELCWyLYPgE2Gj+4wUEiMscHrQ8nRPBzYItQNOHWavwBt25ohZHQC4qnd5IszdVVrFbLsQ+dPkm6eqdjJAmwQ==", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "get-uri": "2.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "pac-resolver": "2.0.0", + "raw-body": "2.3.2", + "socks-proxy-agent": "2.1.1" + } + }, + "pac-resolver": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-2.0.0.tgz", + "integrity": "sha1-mbiNLxk/ve78HJpSnB8yYKtSd80=", + "dev": true, + "optional": true, + "requires": { + "co": "3.0.6", + "degenerator": "1.0.4", + "ip": "1.0.1", + "netmask": "1.0.6", + "thunkify": "2.1.2" + }, + "dependencies": { + "co": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz", + "integrity": "sha1-FEXyJsXrlWE45oyawwFn6n0ua9o=", + "dev": true, + "optional": true + }, + "ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.0.1.tgz", + "integrity": "sha1-x+NWzeoiWucbNtcPLnGpK6TkJZA=", + "dev": true, + "optional": 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.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.3.2" + } + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "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" + } + }, + "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" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, + "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-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-proxy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", + "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", + "dev": true, + "optional": true, + "requires": { + "inflection": "1.3.8" + }, + "dependencies": { + "inflection": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", + "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", + "dev": true, + "optional": 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" + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.10" + } + }, + "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 + }, + "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" + } + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "0.1.1", + "ansi-red": "0.1.1", + "arr-diff": "1.1.0", + "arr-union": "2.1.0", + "extend-shallow": "1.1.4" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-slice": "0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "requires": { + "kind-of": "1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + } + } + }, + "portfinder": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.13.tgz", + "integrity": "sha1-uzLs2HwnEErm7kS1o8y/Drsa7ek=", + "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.19", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.19.tgz", + "integrity": "sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg==", + "dev": true, + "requires": { + "chalk": "2.3.2", + "source-map": "0.6.1", + "supports-color": "5.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "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.19", + "postcss-value-parser": "3.3.0", + "read-cache": "1.0.0", + "resolve": "1.5.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.1.tgz", + "integrity": "sha512-f0J/DWE/hyO9/LH0WHpXkny/ZZ238sSaG3p1SRBtVZnFWUtD7GXIEgHoBg8cnAeRbmEvUxHQptY46zWfwNYj/w==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.19", + "postcss-load-config": "1.2.0", + "schema-utils": "0.4.5" + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "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 + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000813", + "electron-to-chromium": "1.3.36" + } + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "6.0.19" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.19" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.19" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.19" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.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" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "postcss-url": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/postcss-url/-/postcss-url-7.3.1.tgz", + "integrity": "sha512-Ya5KIjGptgz0OtrVYfi2UbLxVAZ6Emc4Of+Grx4Sf1deWlRpFwLr8FrtkUxfqh+XiZIVkXbjQrddE10ESpNmdA==", + "dev": true, + "requires": { + "mime": "1.6.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "postcss": "6.0.19", + "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 + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.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.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + }, + "dependencies": { + "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 + } + } + }, + "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 + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.4.3", + "source-map": "0.5.7", + "supports-color": "3.2.3" + } + }, + "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" + } + } + } + }, + "preload-webpack-plugin": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/preload-webpack-plugin/-/preload-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-TWpYf7QqmW9lxXIQcPAPkfO+G6Zf/WrSZtqx864IdUtqZ+QGESfOGbGSMlBBt96sYEE+cZLF2GLrxbmLyieX6g==", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "object.values": "1.0.4" + } + }, + "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 + }, + "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=", + "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 + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "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.0", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.3.0.tgz", + "integrity": "sha512-8z1TWtc/I9Kn4fkfg87DhkSAi0arul7DHBEeJ70sy66teQAeffjQED1s0Gduigme7hxHRYdYEKbhHYz28fpv5w==", + "dev": true, + "requires": { + "@types/node": "6.0.101", + "@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.3.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.101", + "resolved": "https://registry.npmjs.org/@types/node/-/node-6.0.101.tgz", + "integrity": "sha512-IQ7V3D6+kK1DArTqTBrnl3M+YgJZLw8ta8w3Q9xjR79HaJzMAoTbZ8TNzUTztrkCKPTqIstE2exdbs1FzsYLUw==", + "dev": true + }, + "adm-zip": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.7.tgz", + "integrity": "sha1-hgbCy/HEJs6MjsABdER/1Jtur8E=", + "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.0", + "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" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "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 + }, + "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.7", + "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.81.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" + } + }, + "proxy-agent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-2.0.0.tgz", + "integrity": "sha1-V+tTR6qAXXTsaByyVknbo5yTNJk=", + "dev": true, + "optional": true, + "requires": { + "agent-base": "2.1.1", + "debug": "2.6.9", + "extend": "3.0.1", + "http-proxy-agent": "1.0.0", + "https-proxy-agent": "1.0.0", + "lru-cache": "2.6.5", + "pac-proxy-agent": "1.1.0", + "socks-proxy-agent": "2.1.1" + }, + "dependencies": { + "lru-cache": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.6.5.tgz", + "integrity": "sha1-5W1jVBSO3o13B7WNFDIg/QjfD9U=", + "dev": true, + "optional": true + } + } + }, + "proxy-middleware": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", + "integrity": "sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY=", + "dev": true + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "dev": true, + "requires": { + "event-stream": "3.3.4" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "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.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "dev": true, + "requires": { + "duplexify": "3.5.4", + "inherits": "2.0.3", + "pump": "2.0.1" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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": "2.3.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=" + }, + "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.1", + "strict-uri-encode": "1.1.0" + } + }, + "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": "0.0.4", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-0.0.4.tgz", + "integrity": "sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "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.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" + } + } + } + }, + "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" + } + } + } + }, + "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.1" + } + }, + "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.1" + } + }, + "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" + } + }, + "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-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "2.3.5" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", + "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", + "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.1", + "string_decoder": "1.0.3", + "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.5", + "set-immediate-shim": "1.0.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "1.5.0" + } + }, + "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" + } + }, + "redis": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", + "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "dev": true, + "optional": true, + "requires": { + "double-ended-queue": "2.1.0-0", + "redis-commands": "1.3.5", + "redis-parser": "2.6.0" + } + }, + "redis-commands": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.3.5.tgz", + "integrity": "sha512-foGF8u6MXGFF++1TZVC6icGXuMYPftKXt1FBT2vrfU9ZATNtZJ8duRC5d1lEfE8hyVe3jhelHGB91oB7I6qLsA==", + "dev": true, + "optional": true + }, + "redis-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", + "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", + "dev": true, + "optional": true + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "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==" + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "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.3.3", + "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 + }, + "remap-istanbul": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.1.tgz", + "integrity": "sha512-gsNQXs5kJLhErICSyYhzVZ++C8LBW8dgwr874Y2QvzAUS75zBlD/juZgXs39nbYJ09fZDlX2AVLVJAY2jbFJoQ==", + "dev": true, + "requires": { + "amdefine": "1.0.1", + "istanbul": "0.4.5", + "minimatch": "3.0.4", + "plugin-error": "0.1.2", + "source-map": "0.6.1", + "through2": "2.0.1" + }, + "dependencies": { + "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" + } + }, + "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_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", + "dev": true, + "requires": { + "readable-stream": "2.0.6", + "xtend": "4.0.1" + } + } + } + }, + "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.81.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", + "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.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.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + }, + "dependencies": { + "qs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", + "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", + "dev": true + } + } + }, + "requestretry": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", + "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", + "dev": true, + "optional": true, + "requires": { + "extend": "3.0.1", + "lodash": "4.17.5", + "request": "2.81.0", + "when": "3.7.8" + }, + "dependencies": { + "when": { + "version": "3.7.8", + "resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz", + "integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=", + "dev": true, + "optional": true + } + } + }, + "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=" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "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 + }, + "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, + "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.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "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": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "requires": { + "symbol-observable": "1.0.1" + } + }, + "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 + }, + "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" + } + }, + "safefs": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-4.1.0.tgz", + "integrity": "sha1-+CrrS9165R9lPrIPZyizBYyNZEU=", + "dev": true, + "requires": { + "editions": "1.3.4", + "graceful-fs": "4.1.11" + } + }, + "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, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.5", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "sass-loader": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", + "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", + "dev": true, + "requires": { + "clone-deep": "2.0.2", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "neo-async": "2.5.0", + "pify": "3.0.0" + } + }, + "saucelabs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.3.0.tgz", + "integrity": "sha1-0kDoAJ33+ocwbsRXimm6O1xCT+4=", + "dev": true, + "requires": { + "https-proxy-agent": "1.0.0" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "scandirectory": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/scandirectory/-/scandirectory-2.5.0.tgz", + "integrity": "sha1-bOA/VKCQtmjjy+2/IO354xBZPnI=", + "dev": true, + "requires": { + "ignorefs": "1.2.0", + "safefs": "3.2.2", + "taskgroup": "4.3.1" + }, + "dependencies": { + "safefs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/safefs/-/safefs-3.2.2.tgz", + "integrity": "sha1-gXDBRE1wOOCMrqBaN0+uL6NJ4Vw=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "taskgroup": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-4.3.1.tgz", + "integrity": "sha1-feGT/r12gnPEV3MElwJNUSwnkVo=", + "dev": true, + "requires": { + "ambi": "2.5.0", + "csextends": "1.1.1" + } + } + } + }, + "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.2.1", + "ajv-keywords": "3.1.0" + } + }, + "script-ext-html-webpack-plugin": { + "version": "1.8.8", + "resolved": "https://registry.npmjs.org/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-1.8.8.tgz", + "integrity": "sha512-9mxSrvfX8on97tu4pUfLXQ9StKGxfHKSy3NXsYBi+4EpyhI4oUUhE3KEWUViDiTQHmY7u2ztLT5OfOjQRzmJaQ==", + "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" + } + } + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.4.3", + "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, + "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.2", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.2.tgz", + "integrity": "sha1-tESVgNmZKbZbEKSDiTAaZZIIh1g=", + "dev": true, + "requires": { + "node-forge": "0.7.1" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", + "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.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.3.1" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "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.2", + "mime-types": "2.1.18", + "parseurl": "1.3.2" + } + }, + "serve-static": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", + "dev": true, + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.1" + } + }, + "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-getter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/set-getter/-/set-getter-0.1.0.tgz", + "integrity": "sha1-12nBgsnVpR9AkUXy+6guXoboA3Y=", + "dev": true, + "requires": { + "to-object-path": "0.3.0" + } + }, + "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.10", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.10.tgz", + "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "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 + } + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "0.0.1", + "sha.js": "2.4.10" + }, + "dependencies": { + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + } + } + }, + "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 + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shelljs": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", + "dev": true, + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "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" + } + }, + "slack-node": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", + "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", + "dev": true, + "optional": true, + "requires": { + "requestretry": "1.13.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", + "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", + "dev": true + }, + "smtp-connection": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", + "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", + "dev": true, + "requires": { + "httpntlm": "1.6.1", + "nodemailer-shared": "1.1.0" + } + }, + "snapdragon": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", + "integrity": "sha1-4StUh/re0+PeoKyR6UAL91tAE3A=", + "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.1", + "use": "2.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" + } + }, + "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-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-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" + } + }, + "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 + } + } + }, + "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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "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" + } + }, + "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": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", + "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "dev": true, + "requires": { + "debug": "2.6.9", + "engine.io": "3.1.5", + "socket.io-adapter": "1.1.1", + "socket.io-client": "2.0.4", + "socket.io-parser": "3.1.3" + } + }, + "socket.io-adapter": { + "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": "2.0.4", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", + "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "2.6.9", + "engine.io-client": "3.1.5", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "3.1.3", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", + "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "3.1.0", + "has-binary2": "1.0.2", + "isarray": "2.0.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" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "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.2.0" + }, + "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" + } + } + } + }, + "socks": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", + "integrity": "sha1-W4t/x8jzQcU+0FbpKbe/Tei6e1o=", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "1.1.15" + } + }, + "socks-proxy-agent": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz", + "integrity": "sha512-sFtmYqdUK5dAMh85H0LEVFUCO7OhJJe1/z2x/Z6mxp3s7/QPf1RkZmpZy+BpuU0bEjcV9npqKjq9Y3kwFUjnxw==", + "dev": true, + "requires": { + "agent-base": "2.1.1", + "extend": "3.0.1", + "socks": "1.1.10" + } + }, + "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.1.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-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.3.tgz", + "integrity": "sha512-MYbFX9DYxmTQFfy2v8FC1XZwpwHKYxg3SK8Wb7VPBKuhDjz8gi9re2819MsG4p49HDyiOSUKlmZ+nQBArW5CGw==", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "0.2.17", + "source-map": "0.6.1" + }, + "dependencies": { + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "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" + } + }, + "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-resolve": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", + "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", + "dev": true, + "requires": { + "atob": "2.0.3", + "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.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" + } + }, + "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.1", + "select-hose": "2.0.0", + "spdy-transport": "2.0.20" + } + }, + "spdy-transport": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.0.20.tgz", + "integrity": "sha1-c15yBUxIayNU/onnAiVgBKOazk0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "detect-node": "2.0.3", + "hpack.js": "2.1.6", + "obuf": "1.1.1", + "readable-stream": "2.3.5", + "safe-buffer": "5.1.1", + "wbuf": "1.7.2" + } + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "dev": true, + "requires": { + "through": "2.3.8" + } + }, + "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.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "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", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz", + "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "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" + } + }, + "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-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-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" + } + }, + "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 + } + } + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "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, + "requires": { + "readable-stream": "2.3.5" + } + }, + "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.5" + } + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "dev": true, + "requires": { + "duplexer": "0.1.1" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.5" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", + "integrity": "sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.5", + "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 + }, + "stream-splicer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.0.tgz", + "integrity": "sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.5" + } + }, + "streamroller": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", + "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "dev": true, + "requires": { + "date-format": "1.2.0", + "debug": "3.1.0", + "mkdirp": "0.5.1", + "readable-stream": "2.3.5" + }, + "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" + } + } + } + }, + "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-replace-loader": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-replace-loader/-/string-replace-loader-2.1.1.tgz", + "integrity": "sha512-0Nvw1LDclF45AFNuYPcD2Jvkv0mwb/dQSnJZMvhqGrT+zzmrpG3OJFD600qfQfNUd5aqfp7fCm2mQMfF7zLbyQ==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.4.5" + } + }, + "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.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.10.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "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" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-loader": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.20.2.tgz", + "integrity": "sha512-FrLMGaOLVhS5pvoez3eJyc0ktchT1inEZziBSjBq1hHQBK3GFkF57Qd825DcrUhjaAWQk70MKrIl5bfjadR/Dg==", + "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" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "1.2.0" + } + }, + "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" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + }, + "dependencies": { + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.10", + "esprima": "2.7.3" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + } + } + }, + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "1.3.0" + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "taskgroup": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/taskgroup/-/taskgroup-5.0.1.tgz", + "integrity": "sha1-CHNsmyRoOxQ0d0Ix60tzqnw/ebU=", + "dev": true, + "requires": { + "ambi": "2.5.0", + "eachr": "3.2.0", + "editions": "1.3.4", + "extendr": "3.3.0" + } + }, + "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.5", + "xtend": "4.0.1" + } + }, + "thunkify": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", + "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", + "dev": true, + "optional": true + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", + "integrity": "sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "timespan": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", + "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", + "dev": true, + "optional": true + }, + "tmp": { + "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.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" + } + }, + "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" + }, + "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.2.2" + } + } + } + }, + "to-string-loader": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.5.tgz", + "integrity": "sha1-e3qheJG3u0lHp6Eb+wO1/enG5pU=", + "dev": true, + "requires": { + "loader-utils": "0.2.17" + }, + "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" + } + } + } + }, + "toposort": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.6.tgz", + "integrity": "sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw=", + "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" + } + }, + "traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", + "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, + "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, + "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.3.2", + "diff": "3.5.0", + "make-error": "1.3.4", + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map-support": "0.5.3", + "yn": "2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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 + }, + "source-map-support": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", + "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "ts-simple-ast": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ts-simple-ast/-/ts-simple-ast-6.12.0.tgz", + "integrity": "sha1-vSMtf8fj8f8SEYJVTeHkIW+SWC4=", + "dev": true, + "requires": { + "code-block-writer": "6.6.0", + "globby": "6.1.0", + "multimatch": "2.1.0", + "object-assign": "4.1.1", + "typescript": "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" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "tsconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-6.0.0.tgz", + "integrity": "sha1-aw6DdgA9evGGT434+J3QBZ/80DI=", + "dev": true, + "requires": { + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" + }, + "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 + } + } + }, + "tsickle": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/tsickle/-/tsickle-0.27.2.tgz", + "integrity": "sha512-KW+ZgY0t2cq2Qib1sfdgMiRnk+cr3brUtzZoVWjv+Ot3jNxVorFBUH+6In6hl8Dg7BI2AAFf69NHkwvZNMSFwA==", + "dev": true, + "requires": { + "minimist": "1.2.0", + "mkdirp": "0.5.1", + "source-map": "0.6.1", + "source-map-support": "0.5.3" + }, + "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-support": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.3.tgz", + "integrity": "sha512-eKkTgWYeBOQqFGXRfKabMFdnWepo51vWqEdoeikaEPFiJC7MCU5j2h4+6Q8npkZTeLGbSyecZvRxiSoWl3rh+w==", + "dev": true, + "requires": { + "source-map": "0.6.1" + } + } + } + }, + "tslib": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==" + }, + "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.3.2", + "commander": "2.14.1", + "diff": "3.5.0", + "glob": "7.1.2", + "js-yaml": "3.11.0", + "minimatch": "3.0.4", + "resolve": "1.5.0", + "semver": "5.5.0", + "tslib": "1.9.0", + "tsutils": "2.22.2" + }, + "dependencies": { + "chalk": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", + "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", + "dev": true, + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.3.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "tslint-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.6.0.tgz", + "integrity": "sha512-Me9Qf/87BOfCY8uJJw+J7VMF4U8WiMXKLhKKKugMydF0xMhMOt9wo2mjYTNhwbF9H7SHh8PAIwRG8roisTNekQ==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "rimraf": "2.6.2", + "semver": "5.5.0" + } + }, + "tsscmp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz", + "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=", + "dev": true, + "optional": true + }, + "tsutils": { + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.22.2.tgz", + "integrity": "sha512-u06FUSulCJ+Y8a2ftuqZN6kIGqdP2yJjUPEngXqmdPND4UQfb04igcotH+dw+IFr417yP6muCLE8/5/Qlfnx0w==", + "dev": true, + "requires": { + "tslib": "1.9.0" + } + }, + "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.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "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" + } + }, + "typechecker": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.5.0.tgz", + "integrity": "sha512-bqPE/ck3bVIaXP7gMKTKSHrypT32lpYTpiqzPYeYzdSQnmaGvaGhy7TnN/M/+5R+2rs/kKcp9ZLPRp/Q9Yj+4w==", + "dev": true, + "requires": { + "editions": "1.3.4" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedoc": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.11.0.tgz", + "integrity": "sha512-R9JbO3ZhcAZVoZbcqIyA9g6v6aJyrHTBXe/HIVWJo44yg6gyPnce6IPNinbSMqOy3rJREkqSJ8NXnCj4/hUveQ==", + "dev": true, + "requires": { + "@types/fs-extra": "5.0.0", + "@types/handlebars": "4.0.36", + "@types/highlight.js": "9.12.2", + "@types/lodash": "4.14.99", + "@types/marked": "0.3.0", + "@types/minimatch": "3.0.3", + "@types/shelljs": "0.7.7", + "fs-extra": "5.0.0", + "handlebars": "4.0.11", + "highlight.js": "9.12.0", + "lodash": "4.17.5", + "marked": "0.3.17", + "minimatch": "3.0.4", + "progress": "2.0.0", + "shelljs": "0.8.1", + "typedoc-default-themes": "0.5.0", + "typescript": "2.7.1" + }, + "dependencies": { + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "4.0.0", + "universalify": "0.1.1" + } + }, + "typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.1.tgz", + "integrity": "sha512-bqB1yS6o9TNA9ZC/MJxM0FZzPnZdtHj0xWK/IZ5khzVqdpGul/R/EIiHRgFXlwTD7PSIaYVnGKq1QgMCu2mnqw==", + "dev": true + } + } + }, + "typedoc-default-themes": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz", + "integrity": "sha1-bcJDPnjti+qOiHo6zeLzF4W9Yic=", + "dev": true + }, + "typescript": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.6.2.tgz", + "integrity": "sha1-PFtv1/beCRQmkCfwPAlGdY92c6Q=", + "dev": true + }, + "uglify-js": { + "version": "3.3.13", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.13.tgz", + "integrity": "sha512-7rdn/bDOG1ElSTPdh7AI5TCjLv63ZD4k8BBadN3ssIkhlaQL2c0yRxmXCyOYhZK0wZTgGgUSnYQ4CGu+Jos5cA==", + "dev": true, + "requires": { + "commander": "2.14.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.2", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz", + "integrity": "sha512-CG/NvzXfemUAm5Y4Guh5eEaJYHtkG7kKNpXEJHp9QpxsFVB5/qKvYWoMaq4sa99ccZ0hM3MK8vQV9XPZB4357A==", + "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.9", + "webpack-sources": "1.1.0", + "worker-farm": "1.5.4" + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, + "umd": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.1.tgz", + "integrity": "sha1-iuVW4RAR9jwllnCKiDclnwGz1g4=", + "dev": true + }, + "underscore": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", + "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", + "dev": true + }, + "union": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/union/-/union-0.4.6.tgz", + "integrity": "sha1-GY+9rrolTniLDvy2MLwR8kopWeA=", + "requires": { + "qs": "2.3.3" + } + }, + "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" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "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" + } + }, + "universalify": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", + "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=", + "dev": true + }, + "unix-crypt-td-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz", + "integrity": "sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs=", + "dev": true + }, + "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 + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "upath": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.0.4.tgz", + "integrity": "sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw==", + "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 + }, + "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": "2.0.5", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", + "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=" + }, + "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.2.0", + "schema-utils": "0.4.5" + }, + "dependencies": { + "mime": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==", + "dev": true + } + } + }, + "url-parse": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", + "dev": true, + "requires": { + "querystringify": "1.0.0", + "requires-port": "1.0.0" + }, + "dependencies": { + "querystringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-1.0.0.tgz", + "integrity": "sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=", + "dev": true + } + } + }, + "use": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", + "integrity": "sha1-riig1y+TvyJCKhii43mZMRLeyOg=", + "dev": true, + "requires": { + "define-property": "0.2.5", + "isobject": "3.0.1", + "lazy-cache": "2.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" + } + }, + "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-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-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" + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "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 + }, + "lazy-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", + "integrity": "sha1-uRkKT5EzVGlIQIWfio9whNiCImQ=", + "dev": true, + "requires": { + "set-getter": "0.1.0" + } + } + } + }, + "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.1", + "tmp": "0.0.33" + } + }, + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "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 + }, + "uws": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", + "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", + "dev": true, + "optional": true + }, + "v8flags": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.0.2.tgz", + "integrity": "sha512-6sgSKoFw1UpUPd3cFdF7QGnrH6tDeBgW1F3v9gy8gLY0mlbiBXq8soy8aQpY6xeeCjH5K+JvC62Acp7gtl7wWA==", + "dev": true, + "requires": { + "homedir-polyfill": "1.0.1" + } + }, + "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" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "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" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "viz.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/viz.js/-/viz.js-1.8.0.tgz", + "integrity": "sha1-4Mta0kE2jjWxpulgaR66RUwklR8=", + "dev": true + }, + "vlq": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", + "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", + "dev": true + }, + "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.5.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.5.0.tgz", + "integrity": "sha512-RSlipNQB1u48cq0wH/BNfCu1tD/cJ8ydFIkNYhp9o+3d+8unClkIovpW5qpFPgmL9OE48wfAnlZydXByWP82AA==", + "dev": true, + "requires": { + "chokidar": "2.0.2", + "graceful-fs": "4.1.11", + "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.9", + "normalize-path": "2.1.1" + } + }, + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "fsevents": "1.1.3", + "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.0.4" + } + }, + "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.1", + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "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-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-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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + } + } + }, + "watchr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/watchr/-/watchr-2.6.0.tgz", + "integrity": "sha1-51xCOxC+eSZ6DD73bi6hBP4CZ6U=", + "dev": true, + "requires": { + "eachr": "3.2.0", + "extendr": "3.3.0", + "extract-opts": "3.3.1", + "ignorefs": "1.2.0", + "safefs": "4.1.0", + "scandirectory": "2.5.0", + "taskgroup": "5.0.1", + "typechecker": "4.5.0" + } + }, + "wbuf": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.2.tgz", + "integrity": "sha1-1pe5nx9ZUS3ydRvkJ2nBWAtYAf4=", + "dev": true, + "requires": { + "minimalistic-assert": "1.0.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.5", + "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 + }, + "ultron": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", + "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=", + "dev": true + }, + "ws": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", + "dev": true, + "requires": { + "options": "0.0.6", + "ultron": "1.0.2" + } + }, + "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": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", + "dev": true, + "requires": { + "acorn": "5.5.0", + "acorn-dynamic-import": "2.0.2", + "ajv": "6.2.1", + "ajv-keywords": "3.1.0", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "escope": "3.6.0", + "interpret": "1.1.0", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "1.1.0", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "4.5.0", + "tapable": "0.2.8", + "uglifyjs-webpack-plugin": "0.4.6", + "watchpack": "1.5.0", + "webpack-sources": "1.1.0", + "yargs": "8.0.2" + }, + "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 + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.5" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" + } + }, + "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" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "2.0.0", + "normalize-package-data": "2.4.0", + "path-type": "2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "2.1.0", + "read-pkg": "2.0.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": { + "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 + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-js": "2.8.29", + "webpack-sources": "1.1.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 + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "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": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "2.1.0", + "read-pkg-up": "2.0.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "7.0.0" + }, + "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 + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "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" + } + } + } + } + } + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "4.1.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 + } + } + } + } + }, + "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": "2.0.6", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", + "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==", + "dev": true, + "requires": { + "loud-rejection": "1.6.0", + "memory-fs": "0.4.1", + "mime": "2.2.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "url-join": "2.0.5", + "webpack-log": "1.1.2" + }, + "dependencies": { + "mime": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz", + "integrity": "sha512-zrPoX97bx47vZiAXfDrkw8pe9QjJ+lunQl3dypojyWwWr1M5I2h0VSrMPfTjopHQPRNn+NqfjcMmhoLcUJe2gA==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "3.0.3", + "bonjour": "3.5.0", + "chokidar": "2.0.2", + "compression": "1.7.2", + "connect-history-api-fallback": "1.5.0", + "debug": "3.1.0", + "del": "3.0.0", + "express": "4.16.2", + "html-entities": "1.2.1", + "http-proxy-middleware": "0.17.4", + "import-local": "1.0.0", + "internal-ip": "1.2.0", + "ip": "1.1.5", + "killable": "1.0.0", + "loglevel": "1.6.1", + "opn": "5.1.0", + "portfinder": "1.0.13", + "selfsigned": "1.10.2", + "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.3.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.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.9", + "normalize-path": "2.1.1" + } + }, + "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 + }, + "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 + }, + "braces": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.1.tgz", + "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", + "dev": true, + "requires": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "define-property": "1.0.0", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "kind-of": "6.0.2", + "repeat-element": "1.1.2", + "snapdragon": "0.8.1", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "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" + } + } + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "chokidar": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.2.tgz", + "integrity": "sha512-l32Hw3wqB0L2kGVmSbK/a+xXLDrUEsc84pSgMkmwygHvD7ubRsP/vxxHa5BtB6oix1XLLVCHyYMsckRXxThmZw==", + "dev": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.1", + "braces": "2.3.1", + "fsevents": "1.1.3", + "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.0.4" + } + }, + "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" + } + }, + "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.1", + "to-regex": "3.0.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" + } + }, + "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" + } + }, + "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" + } + }, + "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 + } + } + }, + "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.1", + "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" + } + } + } + }, + "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" + } + } + } + }, + "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" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "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-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-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-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-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" + } + } + } + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "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 + }, + "micromatch": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.9.tgz", + "integrity": "sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g==", + "dev": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.1", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.9", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.1", + "to-regex": "3.0.2" + } + }, + "supports-color": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz", + "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", + "dev": true, + "requires": { + "has-flag": "3.0.0" + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "0.4.1", + "mime": "1.6.0", + "path-is-absolute": "1.0.1", + "range-parser": "1.2.0", + "time-stamp": "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 + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": 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": "4.2.1" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + } + } + } + }, + "webpack-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.1.2.tgz", + "integrity": "sha512-B53SD4N4BHpZdUwZcj4st2QT7gVfqZtqHDruC1N+K2sciq0Rt/3F1Dx6RlylVkcrToMLTaiaeT48k9Lq4iDVDA==", + "dev": true, + "requires": { + "chalk": "2.2.2", + "log-symbols": "2.2.0", + "loglevelnext": "1.0.3", + "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.5" + } + }, + "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.0.4", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.4.tgz", + "integrity": "sha1-j6yKfo61n8ahZ2ioXJ2U7n+dDts=", + "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.10", + "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 + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "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 + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "dev": true, + "requires": { + "semver": "5.5.0" + } + }, + "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 + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "worker-farm": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.4.tgz", + "integrity": "sha512-ITyClEvcfv0ozqJl1vmWFWhvI+OIrkbInYqkEPE50wFPXj8J9Gd3FYf8+CkZJXJJsQBYe+2DvmoK9Zhx5w8W+w==", + "dev": true, + "requires": { + "errno": "0.1.7", + "xtend": "4.0.1" + } + }, + "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": "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.1", + "ultron": "1.1.1" + } + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "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.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xregexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", + "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", + "dev": true, + "optional": 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": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": 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" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "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-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, + "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 + } + } + }, + "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.20", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.20.tgz", + "integrity": "sha512-FXlA37ErSXCMy5RNBcGFgCI/Zivqzr0D19GuvDxhcYIJc7xkFp6c29DKyODJu0Zo+EMyur/WPPgcBh1EHjB9jA==" + } + } +} diff --git a/angular-starter/package.json b/angular-starter/package.json new file mode 100644 index 0000000..5b03185 --- /dev/null +++ b/angular-starter/package.json @@ -0,0 +1,181 @@ +{ + "name": "angular-starter", + "version": "7.5.0", + "description": "An Angular Webpack Starter kit featuring Angular (Router, Http, Forms, Services, Tests, E2E, Coverage), Karma, Protractor, Jasmine, Istanbul, TypeScript, and Webpack by Tipe.io", + "keywords": [ + "angular", + "angular2", + "angular4", + "angular5", + "webpack", + "typescript", + "tipe", + "tipe.io" + ], + "author": "Patrick Stapleton ", + "homepage": "https://github.com/gdi2290/angular-starter", + "license": "MIT", + "scripts": { + "build:aot:prod": "npm run clean:dist && npm run clean:aot && cross-env BUILD_AOT=1 npm run webpack -- --config config/webpack.prod.js --progress --profile --bail", + "build:aot": "npm run build:aot:prod", + "build:aot:dev": "cross-env BUILD_AOT=1 npm run build:dev", + "build:dev": "npm run clean:dist && npm run webpack -- --config config/webpack.dev.js --progress --profile", + "build:docker": "npm run build:prod && docker build -t angular2-webpack-start:latest .", + "build:prod": "npm run clean:dist && npm run webpack -- --config config/webpack.prod.js --progress --profile --bail", + "build": "npm run build:dev", + "ci:aot": "cross-env BUILD_E2E=1 npm run lint && npm run test:ci && npm run build:aot && npm run e2e", + "ci:jit": "cross-env BUILD_E2E=1 npm run lint && npm run test:ci && npm run build:prod && npm run e2e", + "ci:nobuild": "npm run lint && npm test:ci && npm run e2e", + "ci:testall": "cross-env BUILD_E2E=1 npm run lint && npm run test:ci && npm run build:prod && npm run e2e && npm run build:aot && npm run e2e", + "ci:travis": "cross-env BUILD_E2E=1 npm run lint && npm run test:ci && npm run build:aot && npm run e2e:travis", + "ci": "npm run ci:testall", + "clean:dll": "npm run rimraf -- dll", + "clean:aot": "npm run rimraf -- compiled", + "clean:dist": "npm run rimraf -- dist", + "clean:install": "npm set progress=false && npm install", + "clean": "npm cache clean --force && npm run rimraf -- node_modules doc coverage dist compiled dll", + "docker": "docker", + "docs": "npm run typedoc -- --options typedoc.json --exclude '**/*.spec.ts' ./src/", + "docs:compodoc": "compodoc -p tsconfig.json", + "docs:compodoc:serve": "compodoc -p tsconfig.json -s", + "docs:compodoc:serve:watch": "compodoc -p tsconfig.json -s -w", + "e2e:live": "npm-run-all -p -r server:prod:ci protractor:live", + "e2e:travis": "npm-run-all -p -r server:prod:ci protractor:delay", + "e2e": "npm-run-all -p -r server:prod:ci protractor", + "github-deploy:dev": "npm run webpack -- --config config/webpack.github-deploy.js --progress --profile --env.githubDev", + "github-deploy:prod": "npm run webpack -- --config config/webpack.github-deploy.js --progress --profile --env.githubProd", + "github-deploy": "npm run github-deploy:dev", + "lint": "npm run tslint \"src/**/*.ts\"", + "node": "node", + "postinstall": "npm run webdriver:update", + "postversion": "git push && git push --tags", + "preclean:install": "npm run clean", + "preversion": "npm test", + "protractor": "protractor", + "protractor:delay": "sleep 3 && npm run protractor", + "protractor:live": "protractor --elementExplorer", + "rimraf": "rimraf", + "server:dev:hmr": "npm run server:dev -- --hot", + "server:aot:dev": "cross-env BUILD_AOT=1 npm run server:dev", + "server:dev": "npm run webpack-dev-server -- --config config/webpack.dev.js --open --progress --profile --watch --content-base src/", + "server:prod": "http-server dist -c-1 --cors", + "server:prod:ci": "http-server dist -p 3000 -c-1 --cors", + "server": "npm run server:dev", + "start:prod:hmr": "cross-env ANGULAR_CONF_FILE=./config.prod.json npm run server:dev:hmr", + "start:hmr": "npm run server:dev:hmr", + "start": "npm run server:dev", + "start:aot": "npm run server:aot:dev", + "test": "npm run lint && karma start", + "test:sonar": "npm run lint && cross-env SONAR_QUBE=1 karma start", + "test:ci": "karma start --single-run --browsers ChromeTravisCi", + "tslint": "tslint", + "typedoc": "typedoc", + "version": "npm run build", + "watch:dev:hmr": "npm run watch:dev -- --hot", + "watch:dev": "npm run build:dev -- --watch", + "watch:aot:dev": "npm run build:aot:dev -- --watch", + "watch:prod": "npm run build:prod -- --watch", + "watch:aot:prod": "npm run build:aot:prod -- --watch", + "watch:test": "npm run test -- --auto-watch --no-single-run", + "watch": "npm run watch:dev", + "webdriver-manager": "node ./node_modules/protractor/bin/webdriver-manager", + "webdriver:start": "node ./node_modules/protractor/bin/webdriver-manager start", + "webdriver:update": "node ./node_modules/protractor/bin/webdriver-manager update", + "webpack-dev-server": "node --max_old_space_size=4096 node_modules/webpack-dev-server/bin/webpack-dev-server.js", + "webpack": "node --max_old_space_size=4096 node_modules/webpack/bin/webpack.js" + }, + "dependencies": { + "@angular/animations": "^5.2.7", + "@angular/common": "^5.2.7", + "@angular/compiler": "^5.2.7", + "@angular/core": "^5.2.7", + "@angular/forms": "^5.2.7", + "@angular/platform-browser": "^5.2.7", + "@angular/platform-browser-dynamic": "^5.2.7", + "@angular/platform-server": "^5.2.7", + "@angular/router": "^5.2.7", + "core-js": "^2.4.1", + "http-server": "^0.11.1", + "ie-shim": "^0.1.0", + "reflect-metadata": "^0.1.12", + "rxjs": "^5.5.6", + "zone.js": "^0.8.19" + }, + "devDependencies": { + "@angular/cli": "^1.7.1", + "@angular/compiler-cli": "^5.2.7", + "@angular/language-service": "^5.2.7", + "@compodoc/compodoc": "^1.0.7", + "@ngtools/webpack": "1.10.0", + "@types/hammerjs": "^2.0.35", + "@types/jasmine": "2.8.6", + "@types/node": "^9.4.6", + "@types/uglify-js": "^2.6.30", + "@types/webpack": "^3.8.8", + "add-asset-html-webpack-plugin": "~2.1.2", + "angular2-template-loader": "^0.6.2", + "assets-webpack-plugin": "^3.5.1", + "awesome-typescript-loader": "^3.5.0", + "codelyzer": "^4.2.1", + "copy-webpack-plugin": "^4.5.0", + "cross-env": "^5.1.3", + "css-loader": "^0.28.10", + "exports-loader": "^0.7.0", + "expose-loader": "^0.7.4", + "extract-text-webpack-plugin": "~3.0.2", + "file-loader": "^1.1.9", + "find-root": "^1.1.0", + "gh-pages": "^1.1.0", + "html-webpack-plugin": "^2.30.1", + "imports-loader": "^0.8.0", + "inline-manifest-webpack-plugin": "^3.0.1", + "istanbul-instrumenter-loader": "~3.0.0", + "jasmine-core": "^2.99.1", + "karma": "^2.0.0", + "karma-chrome-launcher": "^2.0.0", + "karma-coverage": "^1.1.1", + "karma-jasmine": "^1.1.0", + "karma-mocha-reporter": "^2.2.5", + "karma-remap-coverage": "^0.1.5", + "karma-sourcemap-loader": "^0.3.7", + "karma-webpack": "^2.0.11", + "ngc-webpack": "^4.1.2", + "node-sass": "^4.7.2", + "npm-run-all": "^4.1.2", + "optimize-js-plugin": "0.0.4", + "parse5": "^4.0.0", + "preload-webpack-plugin": "^2.3.0", + "protractor": "^5.3.0", + "raw-loader": "0.5.1", + "rimraf": "~2.6.2", + "sass-loader": "^6.0.6", + "script-ext-html-webpack-plugin": "^1.8.8", + "source-map-loader": "^0.2.3", + "string-replace-loader": "~2.1.1", + "style-loader": "^0.20.2", + "to-string-loader": "^1.1.5", + "ts-node": "^5.0.0", + "tslib": "^1.9.0", + "tslint": "^5.9.1", + "tslint-loader": "^3.5.3", + "typedoc": "^0.11.0", + "typescript": "~2.6.2", + "uglifyjs-webpack-plugin": "^1.2.2", + "url-loader": "^1.0.1", + "webpack": "^3.10.0", + "webpack-dev-middleware": "^2.0.6", + "webpack-dev-server": "~2.11.1", + "webpack-merge": "~4.1.2" + }, + "repository": { + "type": "git", + "url": "https://github.com/gdi2290/angular-starter.git" + }, + "bugs": { + "url": "https://github.com/gdi2290/angular-starter/issues" + }, + "engines": { + "node": ">= 8.0.0", + "npm": ">= 5" + } +} diff --git a/angular-starter/protractor.conf.js b/angular-starter/protractor.conf.js new file mode 100644 index 0000000..7e93e83 --- /dev/null +++ b/angular-starter/protractor.conf.js @@ -0,0 +1,8 @@ +/** + * @author: tipe.io + */ + +/** + * look in ./config for protractor.conf.js + */ +exports.config = require('./config/protractor.conf.js').config; diff --git a/angular-starter/sonar-project.properties b/angular-starter/sonar-project.properties new file mode 100644 index 0000000..6dbf179 --- /dev/null +++ b/angular-starter/sonar-project.properties @@ -0,0 +1,18 @@ +sonar.projectKey=angular:angular-starter +sonar.projectName=angular-starter +sonar.projectVersion=6.0.0 +sonar.sourceEncoding=UTF-8 +sonar.sources=src +sonar.exclusions=**/node_modules/**,**/*.spec.ts +sonar.tests=src/app +sonar.test.inclusions=**/*.spec.ts + +sonar.ts.tslint.configPath=tslint.json +sonar.ts.coverage.lcovReportPath=coverage/coverage.lcov +# if using local tslint then enable the line below +# sonar.ts.tslint.outputPath=reports/lint_issues.json +sonar.genericcoverage.unitTestReportPaths=reports/ut_report.xml + +# Change the host.url to point to the +# sonarcube server (default localhost) +sonar.host.url=http://localhost:9000 \ No newline at end of file diff --git a/angular-starter/src/app/+barrel/+child-barrel/child-barrel.component.ts b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.component.ts new file mode 100644 index 0000000..ad41402 --- /dev/null +++ b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.component.ts @@ -0,0 +1,25 @@ +import { + Component, + OnInit, +} from '@angular/core'; +/** + * We're loading this component asynchronously + * We are using some magic with es6-promise-loader that will wrap the module with a Promise + * see https://github.com/gdi2290/es6-promise-loader for more info + */ + +console.log('`ChildBarrel` component loaded asynchronously'); + +@Component({ + selector: 'child-barrel', + template: ` +

Hello from Child Barrel

+ `, +}) +export class ChildBarrelComponent implements OnInit { + + public ngOnInit() { + console.log('hello `ChildBarrel` component'); + } + +} diff --git a/angular-starter/src/app/+barrel/+child-barrel/child-barrel.module.ts b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.module.ts new file mode 100644 index 0000000..afefb57 --- /dev/null +++ b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { routes } from './child-barrel.routes'; +import { ChildBarrelComponent } from './child-barrel.component'; + +console.log('`ChildBarrel` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + ChildBarrelComponent, + ], + imports: [ + CommonModule, + FormsModule, + RouterModule.forChild(routes), + ], +}) +export class ChildBarrelModule { + public static routes = routes; +} diff --git a/angular-starter/src/app/+barrel/+child-barrel/child-barrel.routes.ts b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.routes.ts new file mode 100644 index 0000000..43e250d --- /dev/null +++ b/angular-starter/src/app/+barrel/+child-barrel/child-barrel.routes.ts @@ -0,0 +1,5 @@ +import { ChildBarrelComponent } from './child-barrel.component'; + +export const routes = [ + { path: '', component: ChildBarrelComponent, pathMatch: 'full' }, +]; diff --git a/angular-starter/src/app/+barrel/+child-barrel/index.ts b/angular-starter/src/app/+barrel/+child-barrel/index.ts new file mode 100644 index 0000000..8621b2f --- /dev/null +++ b/angular-starter/src/app/+barrel/+child-barrel/index.ts @@ -0,0 +1 @@ +export { ChildBarrelModule } from './child-barrel.module'; diff --git a/angular-starter/src/app/+barrel/barrel.component.ts b/angular-starter/src/app/+barrel/barrel.component.ts new file mode 100644 index 0000000..5fa3983 --- /dev/null +++ b/angular-starter/src/app/+barrel/barrel.component.ts @@ -0,0 +1,31 @@ +import { + Component, + OnInit, +} from '@angular/core'; +/** + * We're loading this component asynchronously + * We are using some magic with es6-promise-loader that will wrap the module with a Promise + * see https://github.com/gdi2290/es6-promise-loader for more info + */ + +console.log('`Barrel` component loaded asynchronously'); + +@Component({ + selector: 'barrel', + template: ` +

Hello from Barrel

+ + + Child Barrel + + + + `, +}) +export class BarrelComponent implements OnInit { + + public ngOnInit() { + console.log('hello `Barrel` component'); + } + +} diff --git a/angular-starter/src/app/+barrel/barrel.module.ts b/angular-starter/src/app/+barrel/barrel.module.ts new file mode 100644 index 0000000..c4e917d --- /dev/null +++ b/angular-starter/src/app/+barrel/barrel.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { routes } from './barrel.routes'; +import { BarrelComponent } from './barrel.component'; + +console.log('`Barrel` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + BarrelComponent, + ], + imports: [ + CommonModule, + FormsModule, + RouterModule.forChild(routes), + ], +}) +export class BarrelModule { + public static routes = routes; +} diff --git a/angular-starter/src/app/+barrel/barrel.routes.ts b/angular-starter/src/app/+barrel/barrel.routes.ts new file mode 100644 index 0000000..8c93706 --- /dev/null +++ b/angular-starter/src/app/+barrel/barrel.routes.ts @@ -0,0 +1,8 @@ +import { BarrelComponent } from './barrel.component'; + +export const routes = [ + { path: '', children: [ + { path: '', component: BarrelComponent }, + { path: 'child-barrel', loadChildren: './+child-barrel#ChildBarrelModule' } + ]}, +]; diff --git a/angular-starter/src/app/+barrel/index.ts b/angular-starter/src/app/+barrel/index.ts new file mode 100644 index 0000000..3f87dff --- /dev/null +++ b/angular-starter/src/app/+barrel/index.ts @@ -0,0 +1 @@ +export { BarrelModule } from './barrel.module'; diff --git a/angular-starter/src/app/+detail/+child-detail/child-detail.component.ts b/angular-starter/src/app/+detail/+child-detail/child-detail.component.ts new file mode 100644 index 0000000..235f291 --- /dev/null +++ b/angular-starter/src/app/+detail/+child-detail/child-detail.component.ts @@ -0,0 +1,25 @@ +import { + Component, + OnInit, +} from '@angular/core'; +/** + * We're loading this component asynchronously + * We are using some magic with es6-promise-loader that will wrap the module with a Promise + * see https://github.com/gdi2290/es6-promise-loader for more info + */ + +console.log('`ChildDetail` component loaded asynchronously'); + +@Component({ + selector: 'child-detail', + template: ` +

Hello from Child Detail

+ `, +}) +export class ChildDetailComponent implements OnInit { + + public ngOnInit() { + console.log('hello `ChildDetail` component'); + } + +} diff --git a/angular-starter/src/app/+detail/+child-detail/child-detail.module.ts b/angular-starter/src/app/+detail/+child-detail/child-detail.module.ts new file mode 100644 index 0000000..02553e1 --- /dev/null +++ b/angular-starter/src/app/+detail/+child-detail/child-detail.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { routes } from './child-detail.routes'; +import { ChildDetailComponent } from './child-detail.component'; + +console.log('`ChildDetail` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + ChildDetailComponent, + ], + imports: [ + CommonModule, + FormsModule, + RouterModule.forChild(routes), + ], +}) +export class ChildDetailModule { + public static routes = routes; +} diff --git a/angular-starter/src/app/+detail/+child-detail/child-detail.routes.ts b/angular-starter/src/app/+detail/+child-detail/child-detail.routes.ts new file mode 100644 index 0000000..dc94cac --- /dev/null +++ b/angular-starter/src/app/+detail/+child-detail/child-detail.routes.ts @@ -0,0 +1,5 @@ +import { ChildDetailComponent } from './child-detail.component'; + +export const routes = [ + { path: '', component: ChildDetailComponent, pathMatch: 'full' }, +]; diff --git a/angular-starter/src/app/+detail/+child-detail/index.ts b/angular-starter/src/app/+detail/+child-detail/index.ts new file mode 100644 index 0000000..c23f15f --- /dev/null +++ b/angular-starter/src/app/+detail/+child-detail/index.ts @@ -0,0 +1 @@ +export { ChildDetailModule } from './child-detail.module'; diff --git a/angular-starter/src/app/+detail/detail.component.ts b/angular-starter/src/app/+detail/detail.component.ts new file mode 100644 index 0000000..0fa8146 --- /dev/null +++ b/angular-starter/src/app/+detail/detail.component.ts @@ -0,0 +1,31 @@ +import { + Component, + OnInit, +} from '@angular/core'; +/** + * We're loading this component asynchronously + * We are using some magic with es6-promise-loader that will wrap the module with a Promise + * see https://github.com/gdi2290/es6-promise-loader for more info + */ + +console.log('`Detail` component loaded asynchronously'); + +@Component({ + selector: 'detail', + template: ` +

Hello from Detail

+ + + Child Detail + + + + `, +}) +export class DetailComponent implements OnInit { + + public ngOnInit() { + console.log('hello `Detail` component'); + } + +} diff --git a/angular-starter/src/app/+detail/detail.module.ts b/angular-starter/src/app/+detail/detail.module.ts new file mode 100644 index 0000000..947b4d4 --- /dev/null +++ b/angular-starter/src/app/+detail/detail.module.ts @@ -0,0 +1,26 @@ +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { routes } from './detail.routes'; +import { DetailComponent } from './detail.component'; + +console.log('`Detail` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + DetailComponent, + ], + imports: [ + CommonModule, + FormsModule, + RouterModule.forChild(routes), + ], +}) +export class DetailModule { + public static routes = routes; +} diff --git a/angular-starter/src/app/+detail/detail.routes.ts b/angular-starter/src/app/+detail/detail.routes.ts new file mode 100644 index 0000000..1c3cd81 --- /dev/null +++ b/angular-starter/src/app/+detail/detail.routes.ts @@ -0,0 +1,8 @@ +import { DetailComponent } from './detail.component'; + +export const routes = [ + { path: '', children: [ + { path: '', component: DetailComponent }, + { path: 'child-detail', loadChildren: './+child-detail#ChildDetailModule' } + ]}, +]; diff --git a/angular-starter/src/app/+detail/index.ts b/angular-starter/src/app/+detail/index.ts new file mode 100644 index 0000000..b2463a4 --- /dev/null +++ b/angular-starter/src/app/+detail/index.ts @@ -0,0 +1 @@ +export { DetailModule } from './detail.module'; diff --git a/angular-starter/src/app/+dev-module/dev-module.component.ts b/angular-starter/src/app/+dev-module/dev-module.component.ts new file mode 100644 index 0000000..393f46d --- /dev/null +++ b/angular-starter/src/app/+dev-module/dev-module.component.ts @@ -0,0 +1,15 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'dev-module', + template: ` +

Hello from DevModule Component

+ `, +}) +export class DevModuleComponent implements OnInit { + + public ngOnInit() { + console.log('hello `DevModule` component'); + } + +} diff --git a/angular-starter/src/app/+dev-module/dev-module.module.ts b/angular-starter/src/app/+dev-module/dev-module.module.ts new file mode 100644 index 0000000..83f4b0c --- /dev/null +++ b/angular-starter/src/app/+dev-module/dev-module.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; + +import { routes } from './dev-module.routes'; +import { DevModuleComponent } from './dev-module.component'; + +/* + Don't leave side-effects outside of classes so this will tree-shake nicely on prod + e.g. `console.log('something')` is a side effect. +*/ +@NgModule({ + declarations: [ DevModuleComponent ], + imports: [ + CommonModule, + RouterModule.forChild(routes), + ], +}) +export class DevModuleModule { + public static routes = routes; + constructor() { + console.log('`DevModuleModule` module initialized'); + } +} diff --git a/angular-starter/src/app/+dev-module/dev-module.routes.ts b/angular-starter/src/app/+dev-module/dev-module.routes.ts new file mode 100644 index 0000000..dc7323b --- /dev/null +++ b/angular-starter/src/app/+dev-module/dev-module.routes.ts @@ -0,0 +1,5 @@ +import { DevModuleComponent } from './dev-module.component'; + +export const routes = [ + { path: 'dev-module', component: DevModuleComponent } +]; diff --git a/angular-starter/src/app/+dev-module/index.ts b/angular-starter/src/app/+dev-module/index.ts new file mode 100644 index 0000000..47a5d08 --- /dev/null +++ b/angular-starter/src/app/+dev-module/index.ts @@ -0,0 +1 @@ +export { DevModuleModule } from './dev-module.module'; diff --git a/angular-starter/src/app/about/about.component.spec.ts b/angular-starter/src/app/about/about.component.spec.ts new file mode 100644 index 0000000..241750f --- /dev/null +++ b/angular-starter/src/app/about/about.component.spec.ts @@ -0,0 +1,41 @@ +import { ActivatedRoute, Data } from '@angular/router'; +import { Component } from '@angular/core'; +import { inject, TestBed } from '@angular/core/testing'; + +/** + * Load the implementations that should be tested. + */ +import { AboutComponent } from './about.component'; + +describe('About', () => { + /** + * Provide our implementations or mocks to the dependency injector + */ + beforeEach(() => TestBed.configureTestingModule({ + providers: [ + /** + * Provide a better mock. + */ + { + provide: ActivatedRoute, + useValue: { + data: { + subscribe: (fn: (value: Data) => void) => fn({ + yourData: 'yolo' + }) + } + } + }, + AboutComponent + ] + })); + + it('should log ngOnInit', inject([AboutComponent], (about: AboutComponent) => { + spyOn(console, 'log'); + expect(console.log).not.toHaveBeenCalled(); + + about.ngOnInit(); + expect(console.log).toHaveBeenCalled(); + })); + +}); diff --git a/angular-starter/src/app/about/about.component.ts b/angular-starter/src/app/about/about.component.ts new file mode 100644 index 0000000..dc1c84c --- /dev/null +++ b/angular-starter/src/app/about/about.component.ts @@ -0,0 +1,68 @@ +import { + Component, + OnInit +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'about', + styles: [` + `], + template: ` +

About

+
+ For hot module reloading run +
npm run start:hmr
+
+
+

+ patrick@tipe.io +

+
+
this.localState = {{ localState | json }}
+ ` +}) +export class AboutComponent implements OnInit { + + public localState: any; + constructor( + public route: ActivatedRoute + ) {} + + public ngOnInit() { + this.route + .data + .subscribe((data: any) => { + /** + * Your resolved data from route. + */ + this.localState = data.yourData; + }); + + console.log('hello `About` component'); + /** + * static data that is bundled + * var mockData = require('assets/mock-data/mock-data.json'); + * console.log('mockData', mockData); + * if you're working with mock data you can also use http.get('assets/mock-data/mock-data.json') + */ + this.asyncDataWithWebpack(); + } + private asyncDataWithWebpack() { + /** + * you can also async load mock data with 'es6-promise-loader' + * you would do this if you don't want the mock-data bundled + * remember that 'es6-promise-loader' is a promise + */ + setTimeout(() => { + + System.import('../../assets/mock-data/mock-data.json') + .then((json) => { + console.log('async mockData', json); + this.localState = json; + }); + + }); + } + +} diff --git a/angular-starter/src/app/about/index.ts b/angular-starter/src/app/about/index.ts new file mode 100644 index 0000000..b7cb92a --- /dev/null +++ b/angular-starter/src/app/about/index.ts @@ -0,0 +1 @@ +export * from './about.component'; diff --git a/angular-starter/src/app/app.component.css b/angular-starter/src/app/app.component.css new file mode 100644 index 0000000..f78b9d9 --- /dev/null +++ b/angular-starter/src/app/app.component.css @@ -0,0 +1,8 @@ +html, body{ + height: 100%; + font-family: Arial, Helvetica, sans-serif +} + +a.active { + background-color: gray; +} diff --git a/angular-starter/src/app/app.component.spec.ts b/angular-starter/src/app/app.component.spec.ts new file mode 100644 index 0000000..866abe6 --- /dev/null +++ b/angular-starter/src/app/app.component.spec.ts @@ -0,0 +1,66 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { + inject, + async, + TestBed, + ComponentFixture +} from '@angular/core/testing'; + +/** + * Load the implementations that should be tested + */ +import { AppComponent } from './app.component'; +import { AppState } from './app.service'; + +describe(`App`, () => { + let comp: AppComponent; + let fixture: ComponentFixture; + + /** + * async beforeEach + */ + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ AppComponent ], + schemas: [NO_ERRORS_SCHEMA], + providers: [AppState] + }) + /** + * Compile template and css + */ + .compileComponents(); + })); + + /** + * Synchronous beforeEach + */ + beforeEach(() => { + fixture = TestBed.createComponent(AppComponent); + comp = fixture.componentInstance; + + /** + * Trigger initial data binding + */ + fixture.detectChanges(); + }); + + it(`should be readly initialized`, () => { + expect(fixture).toBeDefined(); + expect(comp).toBeDefined(); + }); + + it(`should be @TipeIO`, () => { + expect(comp.twitter).toEqual('https://twitter.com/gdi2290'); + expect(comp.tipe).toEqual('assets/img/tipe.png'); + expect(comp.name).toEqual('Angular Starter'); + }); + + it('should log ngOnInit', () => { + spyOn(console, 'log'); + expect(console.log).not.toHaveBeenCalled(); + + comp.ngOnInit(); + expect(console.log).toHaveBeenCalled(); + }); + +}); diff --git a/angular-starter/src/app/app.component.ts b/angular-starter/src/app/app.component.ts new file mode 100644 index 0000000..b210cb7 --- /dev/null +++ b/angular-starter/src/app/app.component.ts @@ -0,0 +1,85 @@ +/** + * Angular 2 decorators and services + */ +import { Component, OnInit, ViewEncapsulation } from '@angular/core'; +import { environment } from 'environments/environment'; +import { AppState } from './app.service'; + +/** + * App Component + * Top Level Component + */ +@Component({ + selector: 'app', + encapsulation: ViewEncapsulation.None, + styleUrls: [ + './app.component.css' + ], + template: ` + + +
+ +
+ +
this.appState.state = {{ appState.state | json }}
+ + + ` +}) +export class AppComponent implements OnInit { + public name = 'Angular Starter'; + public tipe = 'assets/img/tipe.png'; + public twitter = 'https://twitter.com/gdi2290'; + public url = 'https://tipe.io'; + public showDevModule: boolean = environment.showDevModule; + + constructor( + public appState: AppState + ) {} + + public ngOnInit() { + console.log('Initial App State', this.appState.state); + } + +} + +/** + * Please review the https://github.com/AngularClass/angular-examples/ repo for + * more angular app examples that you may copy/paste + * (The examples may not be updated as quickly. Please open an issue on github for us to update it) + * For help or questions please contact us at @AngularClass on twitter + * or our chat on Slack at https://AngularClass.com/slack-join + */ diff --git a/angular-starter/src/app/app.e2e.ts b/angular-starter/src/app/app.e2e.ts new file mode 100644 index 0000000..368de16 --- /dev/null +++ b/angular-starter/src/app/app.e2e.ts @@ -0,0 +1,34 @@ +import { browser, by, element } from 'protractor'; +import 'tslib'; + +describe('App', () => { + + beforeEach(async () => { + await browser.get('/'); + }); + + it('should have a title', async () => { + const subject = await browser.getTitle(); + const result = 'Angular Starter by @gdi2290 from @TipeIO'; + expect(subject).toEqual(result); + }); + + it('should have header', async () => { + const subject = await element(by.css('h1')).isPresent(); + const result = true; + expect(subject).toEqual(result); + }); + + it('should have ', async () => { + const subject = await element(by.css('app home')).isPresent(); + const result = true; + expect(subject).toEqual(result); + }); + + it('should have buttons', async () => { + const subject = await element(by.css('button')).getText(); + const result = 'Submit Value'; + expect(subject).toEqual(result); + }); + +}); diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts new file mode 100644 index 0000000..7a537c8 --- /dev/null +++ b/angular-starter/src/app/app.module.ts @@ -0,0 +1,78 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; +import { HttpClientModule } from '@angular/common/http'; +import { RouterModule, PreloadAllModules } from '@angular/router'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; + +/* + * Platform and Environment providers/directives/pipes + */ +import { environment } from 'environments/environment'; +import { ROUTES } from './app.routes'; +// App is our top level component +import { AppComponent } from './app.component'; +import { APP_RESOLVER_PROVIDERS } from './app.resolver'; +import { AppState, InternalStateType } from './app.service'; +import { HomeComponent } from './home'; +import { AboutComponent } from './about'; +import { NoContentComponent } from './no-content'; +import { XLargeDirective } from './home/x-large'; +import { DevModuleModule } from './+dev-module'; + +import '../styles/styles.scss'; +import '../styles/headings.css'; + +// Application wide providers +const APP_PROVIDERS = [ + ...APP_RESOLVER_PROVIDERS, + AppState +]; + +interface StoreType { + state: InternalStateType; + restoreInputValues: () => void; + disposeOldHosts: () => void; +} + +/** + * `AppModule` is the main entry point into Angular2's bootstraping process + */ +@NgModule({ + bootstrap: [ AppComponent ], + declarations: [ + AppComponent, + AboutComponent, + HomeComponent, + NoContentComponent, + XLargeDirective + ], + /** + * Import Angular's modules. + */ + imports: [ + BrowserModule, + BrowserAnimationsModule, + FormsModule, + HttpClientModule, + RouterModule.forRoot(ROUTES, { + useHash: Boolean(history.pushState) === false, + preloadingStrategy: PreloadAllModules + }), + + /** + * This section will import the `DevModuleModule` only in certain build types. + * When the module is not imported it will get tree shaked. + * This is a simple example, a big app should probably implement some logic + */ + ...environment.showDevModule ? [ DevModuleModule ] : [], + ], + /** + * Expose our Services and Providers into Angular's dependency injection. + */ + providers: [ + environment.ENV_PROVIDERS, + APP_PROVIDERS + ] +}) +export class AppModule {} diff --git a/angular-starter/src/app/app.resolver.ts b/angular-starter/src/app/app.resolver.ts new file mode 100644 index 0000000..d64074a --- /dev/null +++ b/angular-starter/src/app/app.resolver.ts @@ -0,0 +1,17 @@ +import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; +import { Injectable } from '@angular/core'; +import { of } from 'rxjs/observable/of'; + +@Injectable() +export class DataResolver implements Resolve { + public resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { + return of({ res: 'I am data'}); + } +} + +/** + * An array of services to resolve routes with data. + */ +export const APP_RESOLVER_PROVIDERS = [ + DataResolver +]; diff --git a/angular-starter/src/app/app.routes.ts b/angular-starter/src/app/app.routes.ts new file mode 100644 index 0000000..39ca8dc --- /dev/null +++ b/angular-starter/src/app/app.routes.ts @@ -0,0 +1,13 @@ +import { Routes } from '@angular/router'; +import { HomeComponent } from './home'; +import { AboutComponent } from './about'; +import { NoContentComponent } from './no-content'; + +export const ROUTES: Routes = [ + { path: '', component: HomeComponent }, + { path: 'home', component: HomeComponent }, + { path: 'about', component: AboutComponent }, + { path: 'detail', loadChildren: './+detail#DetailModule'}, + { path: 'barrel', loadChildren: './+barrel#BarrelModule'}, + { path: '**', component: NoContentComponent }, +]; diff --git a/angular-starter/src/app/app.service.ts b/angular-starter/src/app/app.service.ts new file mode 100644 index 0000000..ad84162 --- /dev/null +++ b/angular-starter/src/app/app.service.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; + +export interface InternalStateType { + [key: string]: any; +} + +@Injectable() +export class AppState { + + public _state: InternalStateType = { }; + + /** + * Already return a clone of the current state. + */ + public get state() { + return this._state = this._clone(this._state); + } + /** + * Never allow mutation + */ + public set state(value) { + throw new Error('do not mutate the `.state` directly'); + } + + public get(prop?: any) { + /** + * Use our state getter for the clone. + */ + const state = this.state; + return state.hasOwnProperty(prop) ? state[prop] : state; + } + + public set(prop: string, value: any) { + /** + * Internally mutate our state. + */ + return this._state[prop] = value; + } + + private _clone(object: InternalStateType) { + /** + * Simple object clone. + */ + return JSON.parse(JSON.stringify( object )); + } +} diff --git a/angular-starter/src/app/home/home.component.css b/angular-starter/src/app/home/home.component.css new file mode 100644 index 0000000..4511e22 --- /dev/null +++ b/angular-starter/src/app/home/home.component.css @@ -0,0 +1 @@ +/*styles for home content only*/ \ No newline at end of file diff --git a/angular-starter/src/app/home/home.component.html b/angular-starter/src/app/home/home.component.html new file mode 100644 index 0000000..f37acb2 --- /dev/null +++ b/angular-starter/src/app/home/home.component.html @@ -0,0 +1,37 @@ +
+

Your Content Here

+ +
+ +
+ For hot module reloading run +
npm run start:hmr
+
+ +
+ +
+

Local State

+ +
+ + + + +
+ + +
this.localState = {{ localState | json }}
+ +
+ +
diff --git a/angular-starter/src/app/home/home.component.spec.ts b/angular-starter/src/app/home/home.component.spec.ts new file mode 100644 index 0000000..e3f71c5 --- /dev/null +++ b/angular-starter/src/app/home/home.component.spec.ts @@ -0,0 +1,75 @@ +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { + inject, + async, + TestBed, + ComponentFixture, + getTestBed +} from '@angular/core/testing'; +import { Component } from '@angular/core'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +/** + * Load the implementations that should be tested. + */ +import { AppState } from '../app.service'; +import { HomeComponent } from './home.component'; +import { Title } from './title'; + +describe(`Home`, () => { + let comp: HomeComponent; + let fixture: ComponentFixture; + let injector: TestBed; + let service: AppState; + let httpMock: HttpTestingController; + + /** + * async beforeEach. + */ + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [HomeComponent], + schemas: [NO_ERRORS_SCHEMA], + imports: [HttpClientTestingModule], + providers: [AppState, Title] + }) + + /** + * Compile template and css. + */ + .compileComponents(); + injector = getTestBed(); + service = injector.get(AppState); + httpMock = injector.get(HttpTestingController); + })); + + /** + * Synchronous beforeEach. + */ + beforeEach(() => { + fixture = TestBed.createComponent(HomeComponent); + comp = fixture.componentInstance; + + /** + * Trigger initial data binding. + */ + fixture.detectChanges(); + }); + + it('should have default data', () => { + expect(comp.localState).toEqual({ value: '' }); + }); + + it('should have a title', () => { + expect(!!comp.title).toEqual(true); + }); + + it('should log ngOnInit', () => { + spyOn(console, 'log'); + expect(console.log).not.toHaveBeenCalled(); + + comp.ngOnInit(); + expect(console.log).toHaveBeenCalled(); + }); + +}); diff --git a/angular-starter/src/app/home/home.component.ts b/angular-starter/src/app/home/home.component.ts new file mode 100644 index 0000000..7ea4f15 --- /dev/null +++ b/angular-starter/src/app/home/home.component.ts @@ -0,0 +1,57 @@ +import { + Component, + OnInit +} from '@angular/core'; + +import { AppState } from '../app.service'; +import { Title } from './title'; +import { XLargeDirective } from './x-large'; + +@Component({ + /** + * The selector is what angular internally uses + * for `document.querySelectorAll(selector)` in our index.html + * where, in this case, selector is the string 'home'. + */ + selector: 'home', // + /** + * We need to tell Angular's Dependency Injection which providers are in our app. + */ + providers: [ + Title + ], + /** + * Our list of styles in our component. We may add more to compose many styles together. + */ + styleUrls: [ './home.component.css' ], + /** + * Every Angular template is first compiled by the browser before Angular runs it's compiler. + */ + templateUrl: './home.component.html' +}) +export class HomeComponent implements OnInit { + /** + * Set our default values + */ + public localState = { value: '' }; + /** + * TypeScript public modifiers + */ + constructor( + public appState: AppState, + public title: Title + ) {} + + public ngOnInit() { + console.log('hello `Home` component'); + /** + * this.title.getData().subscribe(data => this.data = data); + */ + } + + public submitState(value: string) { + console.log('submitState', value); + this.appState.set('value', value); + this.localState.value = ''; + } +} diff --git a/angular-starter/src/app/home/home.e2e.ts b/angular-starter/src/app/home/home.e2e.ts new file mode 100644 index 0000000..d8dd92c --- /dev/null +++ b/angular-starter/src/app/home/home.e2e.ts @@ -0,0 +1,26 @@ +import { browser, by, element } from 'protractor'; +import 'tslib'; + +describe('Home', () => { + + beforeEach(async () => { + /** + * Change hash depending on router LocationStrategy. + */ + await browser.get('/'); + await element(by.linkText('Home')).click(); + }); + + it('should have a title', async () => { + const subject = await browser.getTitle(); + const result = 'Angular Starter by @gdi2290 from @TipeIO'; + expect(subject).toEqual(result); + }); + + it('should have `your content here` x-large', async () => { + const subject = await element(by.css('[x-large]')).getText(); + const result = 'Your Content Here'; + expect(subject).toEqual(result); + }); + +}); diff --git a/angular-starter/src/app/home/index.ts b/angular-starter/src/app/home/index.ts new file mode 100644 index 0000000..ab5a522 --- /dev/null +++ b/angular-starter/src/app/home/index.ts @@ -0,0 +1 @@ +export * from './home.component'; diff --git a/angular-starter/src/app/home/title/index.ts b/angular-starter/src/app/home/title/index.ts new file mode 100644 index 0000000..1410559 --- /dev/null +++ b/angular-starter/src/app/home/title/index.ts @@ -0,0 +1 @@ +export * from './title.service'; diff --git a/angular-starter/src/app/home/title/title.service.spec.ts b/angular-starter/src/app/home/title/title.service.spec.ts new file mode 100644 index 0000000..5e55da4 --- /dev/null +++ b/angular-starter/src/app/home/title/title.service.spec.ts @@ -0,0 +1,35 @@ +import { + inject, + async, + TestBed, + ComponentFixture, + getTestBed +} from '@angular/core/testing'; +import { Component } from '@angular/core'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { Title } from './title.service'; + +describe('Title', () => { + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [Title] + }); + }); + + it('should have http', inject([Title], (title: Title) => { + expect(!!title.http).toEqual(true); + })); + + it('should get data from the server', inject([Title], (title: Title) => { + spyOn(console, 'log'); + expect(console.log).not.toHaveBeenCalled(); + + title.getData(); + expect(console.log).toHaveBeenCalled(); + title.getData().subscribe( (result) => { + expect(result).toEqual({ value: 'AngularClass' }); + }); + })); + +}); diff --git a/angular-starter/src/app/home/title/title.service.ts b/angular-starter/src/app/home/title/title.service.ts new file mode 100644 index 0000000..ff3c41b --- /dev/null +++ b/angular-starter/src/app/home/title/title.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; + +@Injectable() +export class Title { + + public value = 'Angular 2'; + + constructor( + public http: HttpClient + ) { } + + public getData() { + console.log('Title#getData(): Get Data'); + return this.http.get('/assets/data.json'); + } + +} diff --git a/angular-starter/src/app/home/x-large/index.ts b/angular-starter/src/app/home/x-large/index.ts new file mode 100644 index 0000000..7038da2 --- /dev/null +++ b/angular-starter/src/app/home/x-large/index.ts @@ -0,0 +1 @@ +export * from './x-large.directive'; diff --git a/angular-starter/src/app/home/x-large/x-large.directive.spec.ts b/angular-starter/src/app/home/x-large/x-large.directive.spec.ts new file mode 100644 index 0000000..fe7312b --- /dev/null +++ b/angular-starter/src/app/home/x-large/x-large.directive.spec.ts @@ -0,0 +1,50 @@ +import { By } from '@angular/platform-browser'; +import { + inject, + fakeAsync, + tick, + async, + TestBed, + ComponentFixture, + getTestBed +} from '@angular/core/testing'; +import { Component } from '@angular/core'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; + +/** + * Load the implementations that should be tested. + */ +import { XLargeDirective } from './x-large.directive'; + +describe('x-large directive', () => { + /** + * Create a test component to test directives. + */ + @Component({ + template: '
Content
' + }) + class TestComponent { } + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + XLargeDirective, + TestComponent + ] + }); + }); + + it('should sent font-size to x-large', fakeAsync(() => { + TestBed.compileComponents().then(() => { + + const fixture = TestBed.createComponent(TestComponent); + fixture.detectChanges(); + tick(); + const element = fixture.debugElement.query(By.css('div')); + + expect(element.nativeElement.style.fontSize).toBe('x-large'); + + }); + })); + +}); diff --git a/angular-starter/src/app/home/x-large/x-large.directive.ts b/angular-starter/src/app/home/x-large/x-large.directive.ts new file mode 100644 index 0000000..3f71424 --- /dev/null +++ b/angular-starter/src/app/home/x-large/x-large.directive.ts @@ -0,0 +1,28 @@ +import { + Component, + Directive, + ElementRef, + Renderer +} from '@angular/core'; +/** + * Directive + * XLarge is a simple directive to show how one is made + */ +@Directive({ + selector: '[x-large]' // using [ ] means selecting attributes +}) +export class XLargeDirective { + constructor( + public element: ElementRef, + public renderer: Renderer + ) { + /** + * Simple DOM manipulation to set font size to x-large + * `nativeElement` is the direct reference to the DOM element + * element.nativeElement.style.fontSize = 'x-large'; + * + * for server/webworker support use the renderer + */ + renderer.setElementStyle(element.nativeElement, 'fontSize', 'x-large'); + } +} diff --git a/angular-starter/src/app/index.ts b/angular-starter/src/app/index.ts new file mode 100644 index 0000000..10806a6 --- /dev/null +++ b/angular-starter/src/app/index.ts @@ -0,0 +1,4 @@ +/** + * App + */ +export * from './app.module'; diff --git a/angular-starter/src/app/no-content/index.ts b/angular-starter/src/app/no-content/index.ts new file mode 100644 index 0000000..93ea576 --- /dev/null +++ b/angular-starter/src/app/no-content/index.ts @@ -0,0 +1 @@ +export * from './no-content.component'; diff --git a/angular-starter/src/app/no-content/no-content.component.ts b/angular-starter/src/app/no-content/no-content.component.ts new file mode 100644 index 0000000..7aef10e --- /dev/null +++ b/angular-starter/src/app/no-content/no-content.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'no-content', + template: ` +
+

404: page missing

+
+ ` +}) +export class NoContentComponent { + +} diff --git a/angular-starter/src/assets/css/.gitkeep b/angular-starter/src/assets/css/.gitkeep new file mode 100644 index 0000000..857ef8c --- /dev/null +++ b/angular-starter/src/assets/css/.gitkeep @@ -0,0 +1 @@ +@AngularClass diff --git a/angular-starter/src/assets/data.json b/angular-starter/src/assets/data.json new file mode 100644 index 0000000..b566a0b --- /dev/null +++ b/angular-starter/src/assets/data.json @@ -0,0 +1,3 @@ +{ + "value": "AngularClass" +} diff --git a/angular-starter/src/assets/humans.txt b/angular-starter/src/assets/humans.txt new file mode 100644 index 0000000..b2d8794 --- /dev/null +++ b/angular-starter/src/assets/humans.txt @@ -0,0 +1,17 @@ +# humanstxt.org/ +# The humans responsible & technology colophon + +# TEAM + + -- -- + +# THANKS + + + PatrickJS -- @gdi2290 + AngularClass -- @AngularClass + +# TECHNOLOGY COLOPHON + + HTML5, CSS3 + Angular2, TypeScript, Webpack diff --git a/angular-starter/src/assets/icon/android-icon-144x144.png b/angular-starter/src/assets/icon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..90169cb327a709ae6c79e9e37df35f8977995ae9 GIT binary patch literal 8433 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/android-icon-192x192.png b/angular-starter/src/assets/icon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..8d05a1944ec97b1af67304130ed0f44241c3fdac GIT binary patch literal 9714 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 Yzz!vFe@>H(8PEYR(lgVo(IF)K1#QgZ>i_@% literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/android-icon-48x48.png b/angular-starter/src/assets/icon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..d8cf8d4f4e9b75ce21cdd310fc0d2b52cafad92b GIT binary patch literal 2925 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/android-icon-96x96.png b/angular-starter/src/assets/icon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..0a346f6dc373642c6c62bc1dd35a09d0992f758d GIT binary patch literal 5597 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-114x114.png b/angular-starter/src/assets/icon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..3a41f51f53bf0671bd86b6a927429ddad47c974e GIT binary patch literal 6552 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 C-AwHO literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-120x120.png b/angular-starter/src/assets/icon/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..f652ce95336fe7549b353ca4584e18dc573b8a8b GIT binary patch literal 6924 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-152x152.png b/angular-starter/src/assets/icon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..e4b41cd372e7e95c30a18bd17e270aa295a3c5eb GIT binary patch literal 8994 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-60x60.png b/angular-starter/src/assets/icon/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..f67e8cc1f641634a2eba6efd642e3caeed4dad98 GIT binary patch literal 3564 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-72x72.png b/angular-starter/src/assets/icon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..544b26efeda213f85b10e3d2f8d045b31417a6b3 GIT binary patch literal 4234 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-76x76.png b/angular-starter/src/assets/icon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..d203b6339771cca77455a83e7ac2b889bafcb110 GIT binary patch literal 4463 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 H*hc&t%|tcN literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/apple-icon-precomposed.png b/angular-starter/src/assets/icon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..dbdc79369813595846f566df2bdf2e497defe2c6 GIT binary patch literal 10290 zcmaKSbyOTdv+wKz!F_SJ0Kpb_4Fn6e5S-u^T!PC&a0rm#4#5&!g4<#t5S$CobUDZ`n-Cfhu(VFUtxLA}}007`BE6Kx<#Y;Qnwi0F`_(TB}fWbG7es9PJME3V#Iy(%!AJP6`@Ep8*np zAzVhK`AU>LP-pb7+aK#LA}s&_IYM7Kgb#!?XUQk}1hK%MT*1vt=eb#fqwNbY_3=0x z<`cCG#AZH;&0v`k9?=XR-)F=??-cBWU0ktG*$`-|eoj;a#90`~V6zipNc<$t!-$;>QQfm0-}cI+@(>MywUx{C;Qu ziWMJ_RSk_kzGGN|di*});!!vC)+5>xv&}n`#CJcihnLP=LQFxkU|H4}`reYZ5a_sF zlbWt;5E_c}@X`>vr@5vrxa5G5T&V|dSAr^3!F4#omXBd!6Ewuzb;Lg@Ed|ez zxDg~6Yrx=((B}`q4%vlvZA>bg2DsC%^x}Z3!T4r=5!~s93|41%_3%UUQ4OFIf5RKB{>DY{3SKO*&z_mT(HI78YHJTM4Mmx?O*oUyb z>M7oO?5dAB*LKJbHzEpC;9DEWCcM0)V z5m{gZ;K8U5rPI1ia6SP#yM~RCWhfPe;uyYrZDYrgd{P4 zQzC~KNPNGu#nDZhkuxbLoiHCfx~lM!XXV+#GdSL)at%1%44C3*v)Pl5*hNi@-)1x3 zc0NsCZ05WZ{YU8b8YcG!-TGo~*Um>puh@Y03ZOXd;DL_X`3UJ1XAq8sP55GLdFc51 zWPGeRqaGGLQ+*pQf13e9$_tFXFJ$ql83s`7^$cH-)+ChjCfQf@?SsjIzxzUK#4lNo zsGB|R@VQB4zCpLq@|T_cpZZaGQ9+d{;elRMycEV9a2!gu4b(jgY#V4#!^S({2CATG z=C{+$+2FN*gl^0Yk26mcmxL4a^uNpZ4!PVDvZ!k|1Ss0!u`>mmm}9F;EwgSX3IIB9 z8i+KV7H6`fD=Shu5gq(}PV~T_%_$@58YxcJkT*@gm39`J{@s?_pjQB0&wEB6G&0*@ z{y|pI9{N(ve3S-&RsY1{=YB8UcOFpON~d`umH(sH@S^ZZXgh(-3z0L?{1N1|Ky{!3 zYLD1)I{im|;_v2WU!^)1^8;`HO5{Wha5J6~XAgrW%BelTrW9E>|5mp%xS%HT;`m{D z98%db;t)K^8Dwlc=Q4YA%`m5*2zQG)<)iM#d&!d}-2BFrKDIr^7h#;U7?CX#qS*(N z@*1$MwKmK6y$~$sAO9&u;6P_L)+nxgDE{b+Qd{~e1q8;1^G8XvJu24WQR9Ua)(ZKi z{D=*RoSwc|AoInKIico6#oJM{TTPn9FEyG<0)^2bJ~9&He0h<-9j1E_^i--@Kfl$z z&_xwj_#hQ3{{fc2m&a2I^-l5#ybvay&wEp)d`Rt0bwoeK?OI<-Cn!Np{bi%2o26Ys zAa6Ee%gyI&T+yWL=d)W>!&}}sl*8QZos{dh@{*Xk;eMk0lY`+CLZdNXd3*VzMsio_ zYd|8&8sP7W_<&7zE8(fn^cO{PHWqsg$m!5gK+vN9lQBH*5a^}p#F3Y4X*%tBjGx*bC^Kl3! zVsA$)l%aR5N?)*R-)Q9UiEf=s(MQ7Gtcj`8rx%1fT?tg75#4OK@3bE3tr^PYI*eb< zd@p8E zq^x3yZ&F*_ulWS>*BAX|KJCFI3Fmp=s;)RAU_12;Vd1N4RRmZlcC_ac3kDN2>*&W-HJ?HuEWvS}yP#imTB=WhjARFtiWyWNQ7K4{jshzxhGVkCSWvy2cP%~T?rO{QD@ zw9Q)a`3kpW|yzUOdj|^C0Z5 z{hq8yKY7W!Ng?E|dwP3d@bf0Jnf~{;=|75Bo<%7z$q2|BiLn|KrOovt^b=DcCoYGB z6GwAA59@en9GpvGEcd)Ub2idpN4qSJ#``7VACTjt+hj4e;$s`Kr^2w8wXY6+_BqN!JE=HY**;GG%p~zILpLads zynlMLwB4-T;G#kJ!aQHrg>UgEh^cBz#Z|n4jNH|MU9tZuMLZCm)FWG zdrkE_66qFB4UF=PMqQSjQQZ3%DqXZb!G4>s=FpM3KL?KjZtqbfYgwzDJ-(aU<=rfsXt z7N{acTx)cF>l(;v5fG_%*Z=N89QB^P&ktpjt+eW`rmKTO)ZrM%bFzHZ?%p>1qX8pR zW^)noNoF)&n%V&-g+Q61fuW9@`9m6es!s1|a8SS@jaQa1gE2cirt&bqAhh>;N}=5A z+^}+3)Sov<&!l;-Pb{IM*L`Cl&2D`VKSvVlw!T@pXJ=pU!kx&HNzl={f}22~aa|lx z#=Sl7%_fv-cYBjJ=VYkcyk>8D|5MfRLKl`p$$6kC&cWR$hBB%XCHMp~@04c^F*YLI zKtKI~@twHeA(PQxAkTQv41qa0vS{J0LRed6(nkh=hLv^0`iWt*3ZVes55Heu<; zaJ~43)^FI^abInHrkMJ)rP%X~36A!~sp-_divQ#nIZ)<7`UJlYtdrxOKQeKPC9Iht zx)}k-`Xl4dRcIDio0rE`LC+~|*jji4Y&+H|uOez$Cq;qE#x5VL7`6YJJ&0~% z!^1%}Hoj9DqUREDe(IH#W?yavKm9pK-e(J!iHDNJqB68zI|>a;!fQSa8}-Pg zp?E=>=`LjH@#-)<-%{ioSAxr*bDPUyG|nY|6*7yi(AjpF0BTV{+0gDUD&e?|Zt2HQ zm5sl0(J@>WmBE7EX=lOwAAJ~-!L#& z!A~MH7}4%Y)xsj7~8Ce zw&;Y1CZhM|yV0Vle8EB#ikkrzZ9ss^s#cjQB5|?tC5gwqSW{}Gx@eg)dwd$GQu;jr!ISi}4o`*WE##VFa^+hBAI z89>$=2V19nv2lYMElUMlf#aiWJ&~~sbKi>T*HP^8-9anL---OO`Hk$!y;qh+7eGqE zL_N_P4PiV)T}cT&p8%FP^W0U~b#;^7CiV<`*#VQN64gfG&o?}awoU98*k<$Aw(odj z_?nh}&_OEjd_`H;ew1C(Jx>cgZxHl(JI^#N%IZu$a@FCL1rm_~01RB36g@5a1jxcG z!cRR+tU6&%%FKFH+{xvj z;7`8}6Z@s(YvlN|26^dinz)i)blc1F%qF9j1ZPZ>_zxDyCjT29NJs?77?nW?x$5Z6= z%1mYQkncP7Gq(ZNphvY3=pPq^W%dUzouT% zHg{1McR(|4vXjD&DXdDsun#S%9?m5+qOOz1e1b&kajH>w;3Y!Senx)#DZObJY zW1H5C+xNvkgs`YWNcf)6dYGga6@Z|W^&885(WaKcX0GPyZJnNIQ+Y{-$jt@a zydX}Mhi;-d8`O9}(Fned{;MyvOsr!jZN`WsC@Z?Vmk zx|h4W!)z%N7`UE>7ZEJ9R>c4Q6vfd2kBGW1w&OY#VJ+Ha1F^|dK`olNhx1pP}e(j3MslP4Gq+m~3s4m^}d$*Ea@aQPNKvKmCSht>zW zUW-Bjh{P|dLh0hUnV&teY9n@}RN>sHdehTH$H_>;+Ax^c&g{W&BATX8w z8noy&|B-7pEkb`o`rOYHDrsWG*pGehMgYxLI@-8>A6HUQJc3i)Y<9uPoz4H_Z8UEJ zWFPxoXEz_Zbps6(91@!Bo2gog)Vi0m`rBJ;*&nAcHAH=&+eIJI=HFljpOgC+UT?h$ z4Vt6CaP^qWJrbCGi*B?9p>hDkW;8h;kgpAy*Ubm77U=RTNrP!AJ16 zI;F&ds65}IKX$&8T{_+VLa)-0Ay>XR8+WG3NWVv!2|pPDTrcLu@p;!ehw!3Vljwk3 z9AH7EUZ}VIWZbcdOZUr(-GU+Qi?L6a%S+NdYAEiGvwrRtr4OgSaPfJc^c}j~I8E&7_(5Q* z@PHac%xPJs`?2fGGvBUsV&AV#K#<(PB4B183o$8J+y z33MVo@iSgOUgv+`{d02dL4b$F5j1>{A0hb5aHqyMwh%S(fzrs$k6Wgj!kovUUjMKh z`aEwj+Rg9kOcZn;nZ-Fv$Zj?jYDk(!Djvk0k3B&*-7xBo9xl^u4py29>Gc4?5Ng&8 zL!4DtL^2waD-9vqyEjOM?f2+p43EGOuwiyAkKVOwFX@lkpD-u1{+yn@B9TC_@AMD0 z0BEI=?T*hd^=bW7K}P=T?UDjF$I~uyHBD`4kzR+2))R%x?M3k{)-3TCU|I%4Zk`0Z zF|Y5=1ePLN0E&oDnh5(!;|T$ON9LcUVEW=K>n#E%Qb=L)+N$KO==i+LFYMu1Qny{$ z7U>`+f~UXs_F=QTPmNz?PiPB8LilM-c%wW>_j?6`dM4uKsm z3z`x?MdgF}vPgPjBE1i7HS{!eUzdOyA>iN?mMX!32!3r4T23~~MCtnaL-tctL8*io5i8cH zm)W)-qE9ygEbh1)1DYY{j>FU?@|@`Cef;CTZYIxxwN%yOv9dC=MaM0YL1m>El7{|s z4C1l@--Q&{njKv~aJQ5)z8qikTdr-*BfDKEzLjC{scd;af{tf&0>;AlD|VUFn7jrb z(~{C5vkDjygZ@w0tY=lKt%Lnm4Wlb~jsfX-5}t zZp|~249hk$Ny)_)Q3TPl-^9MHT(mbZbFBiz+{U@xg4A49eaBDyOqFKuJ#&fZk58C+I z`?CSoj*M4))<-hEw3+A;oW7u5&5FvZwb0Crl|=2W4%pXRDqMVBaiwHSkyk*Vh&3bU z%Fr6n-`dbeCL`C)Wb*v%rR&LU_ZV6G;>_TwVip(KV0edE+DO)WPnkc(8K_AE2hA6M zuP7r^_Vz<5)~3o|h09BasHj*Q}KtFv1o!PMq4E6>G z{suLk4|vc<>?I6bACF4nuzXCV`SCV(v$nncr!G%EHZSGm#)L0kHt>!Z%@ypw8v-#l zu(){8W$l6?cHc4WkyDEXz1QwaZXgRKqs;m>^V6b5;?pz8#wH6kr&?|)mPyPik;&m_ zx6eQ}S-NDm*03?0OT)QDZ~fwgpcPRE;GhLDTum8FXkT!uz&TSsQ-Fpyo&MZlVOfCSd{ThS!NN>w&i911h-c z3=@daw31TnBYI8@LC@LWFq+Sde6g`LO5@tX_9@=}jD6*&NTZv}8=)PJX~XA;h{vBP zrntR)nLnVDPTTui^#fm>zjeLllVPDQw+CYtaFEdu6By>T0DDDQjxAQLgrCg?m)e_S zR_!j8lj3GONpjZ|?UqM|gr#NAn#-zEcXZ(ZI8#E*W$|Xh9X(YRUXKP1!ySaGA#6G1 zbkt756j@iN1P%;q)9cL444LFI2~dk1H>iTgtf{0eFD*sb)kzT;Qyt2wp~bTJX(Y(0 zc=riRrM9&$4%eg9yE~2>mC&Sdn2W3KmM|`sAFU>+f3B-Ukc=K}L5t8Pl~tHkLJTvn z#O-j1B{{NW4BMwDifqSlswba+6h)k36oSAkLGERxK9MliUTe4ZZ=o-S*uHv|so*}v z3{(@K6t^xJu6xhCmdOw?0Y+pjTBRHR^NURG~5E&PqGH>g)Uh@Qb^3k;Q zu{Sq=A2V3pBQj+q<6(IESm&3eqD6w`Ivdl!t!>Plh8H5VT<7TQ=!|HgMPzjUB0jS` zAQJX}Ce8dA)0rKAHI0!2bXJUG5s~Q=It`^4Yzc&utjr30A|=Zzf*6ar2$jA{KGroF zNKR42kRkh|V0>G-vHo~;&3+wcyy6MM;hnZc=g=oR_vq{=rtQ9S7f*U(D)qD9zc#Fx z=ubjWh0LyVubqTh3+c8Max783Kk85&EfpgYv(8C`#gv)B{dKtu3hJ}^AeEHbGTH%O zKa|hb*-w@H5Bt81HDehW;spc35+!2hdi|5;O6gJL)LKaFBrTVZ+Xrp+drFfjJvTLw z6iM0g__a87$py&z`^NWZv7>!rQi|m@a!t@rddIX1mptdx-TyidcN6`9o!;7ij5QM$ zn4Q)yv}MNav%DbbDD*I>0e*VVm%KL7fxbgQQM;j>3`<78+ezI1DPfpEz=?OQor0GO zyh}oJ4gDg{`5aO55nyROuR~Wu%s(%b$a{x&*wTjIO;t(b=<;Ud4cc5o?54H}B==)f zqF&4dEMcjAyg0w|kOBDtzB(LBE2 zTe-wtuH#Acyu`pe$31$ypp`eE9xtAJy>g?_B5nSZ&HDCJepl1b)}BZ#73z3|FWl=u z)Af~dB8lwoZXoCdu8*%7b2&@&R18d_^)fK?Nd%`qC?R>FHh}lls-}8}j8c-5@T)X@ zQBiE10|FU*(bp8Zn;#Yu`_`m?(U6nJ*Akpl{-`XKlXwsOZ#xaN{JjGHhsb~ zSLeR8X+Kl;mGDlH+cnHBg6C9?{{Gg8HTDE`8I1S~{G;8D zLnG<8uVsA^V~ZT5>p4Ya81{yy4P*0yKeqNT2$~fEu9p{mw2TjbVtCLbX6bD0 z_|Q$}`qt6$rv#vOzp#svyOF`QXh&TD>@|IUbUcZ9aB%qZCb_{rE^xXrGB&M)NA3=V z8k|3Xx0T4-C7>3U_qGWHd%FjJx-Mzz9@3E>6yxjh^r2Qpekya8yMh95uARSuB-^Dx znJmee!t1SlqG29#@Q7$#+(jy9pIWm7YJst65DAuk7A0X23-D`!u@I? zGY*OgmVn#eG`*yS1`FQPm_h@8P#)w(bd{iq7Hz}r4A<(NL5y-}bgBY&6je;H^MP%j zCNn>!FHH6$v9#(lCAJh&Fg1tj5I%)91kt$fjQGV z-`p*sbMx@rj0orY)HWRMUJ{$M3^`A6u2X{IR?C+MF^Diw>w` zxbkb7Hw9jY0iRlhbXLzLS~)i!ulEH><}WXB`YLtP#V9V9Whw1bRqe32b&j?W{cw-V zKOWKO7;oG?8^_uLedit*Iex@8eT`#YTW;Nd+BPyo;md^lFQLFLBPZYe%ATR3alR^P z%@wpQr@1;UqI)UM@ z^V|qGaH7o5!ne~mfeG2Pm_e5VkLN!--#s3Ql4duJI!~1(x052s4FgfYR#>%IS06*E z0DnD45hVb`PAnKSmQ>Ez9emTXH>Br{kHgyKH-#%?Bq$lchzgCUSPqx*#qCo->|+Um z`WwmD0Z^ELsPXDVla7yMLIuZriD`1Go%=sqhmC`j{#WvtW;phKsMR4NrroCC-SmU& zkoVvti~{5)a~n3eGq~0M#b9CeB|h%sorkwtJ;~?_F*}@hvS5l2t?Aj7rPE?29UdB{KJ+Gw^@E8gO-O$`#OYgvk+k_cHB9~(NAH|5!UODdmmaoSMAns zc9_0DMU_DPtxJ&U2E|RZc6{mjgR`dKmTKic&lw%+Ah|M>8i6Q($iEg$KWo!@Sp!fUE8f#d*`VJ;%|`qVXf?_)vh8pzIOl`L^9>SZ_960A{-Qm)K1u z0E}T*S3S9VecqFQC~nl{v)m^AxNqa!wfUxvE{lT=gC1Mr9M_JGH^#WkEGe{&m+8eX zeq~S*RZ#GU5=q$lrG)2Og<}rI^}@o(%cUL>X(}vmI`D9l(|1g-%%yc?jV28GV_;%M z1U^#Xg_Z4&jUM}V`D@v4T+e*y`>rAFUAmaip8`RJVt&1O!o1Di_Y3O*)@`kyL-$e! zfaNo0dYPq;o$@%uGU0dqni4*mneDXm-8}`<6(4Q5%d~#|G$&&mlku`GR6AU~o&XLZ znE2}5lNsP@KK|I}k=JpD=#r{`SH0+3x!82zhXwx5Fd0XVhST>R>)~a$eO!}6I2x#E z;CkPh_P*d6v>e=Cb9+>xuaKHO91F)W z0o9Oq=4!Wr@=0BW6qwHYl*(saC(~o|f#SZZ$Y?Om+X00(ISR8yzxz=Mo8itJWCvy{ zvJYmv++OZ15~%Z?HIsN4(mQCHziS`JX)9}qn!x3t`0biWbd(!$Qx}$n=Ez`KehE)j zw7F?tHm1RJ^m{~4kgO|^FtodylJ7=&$z*+gIQ~9fUO^i+zwILK=XCVF6Q!7TpX|2! z_59Jfo>zHr`?_x1$ep|v0US5k#W!+Puw4J_cG-7^`H6Px2Z11W4f9Z=|Ie`~WEJ)C zBM9er%)GbST-8Vxvc=1nyhl`D;x4FADpzLIBYprH(Yj5d5FT^d(Ey5*A zj}$4u1^p+LUW-?V-ps1-0mZF;cU4vi9_KwFdsXUp%hPw$gRF>PQgTe@Ii)L81U&0Rd5@T7rB+u%=RP zBn1CIAlmkR)&NvaF8Pzx9@8iKJ$MA6eAc2u u76Jkm!XmtUf_%aPBD@w*L1BJtVJM#k)SPJY<0~XDKv_XuzDmw4^uGXCobUDZ`n-Cfhu(VFUtxLA}}007`BE6Kx<#Y;Qnwi0F`_(TB}fWbG7es9PJME3V#Iy(%!AJP6`@Ep8*np zAzVhK`AU>LP-pb7+aK#LA}s&_IYM7Kgb#!?XUQk}1hK%MT*1vt=eb#fqwNbY_3=0x z<`cCG#AZH;&0v`k9?=XR-)F=??-cBWU0ktG*$`-|eoj;a#90`~V6zipNc<$t!-$;>QQfm0-}cI+@(>MywUx{C;Qu ziWMJ_RSk_kzGGN|di*});!!vC)+5>xv&}n`#CJcihnLP=LQFxkU|H4}`reYZ5a_sF zlbWt;5E_c}@X`>vr@5vrxa5G5T&V|dSAr^3!F4#omXBd!6Ewuzb;Lg@Ed|ez zxDg~6Yrx=((B}`q4%vlvZA>bg2DsC%^x}Z3!T4r=5!~s93|41%_3%UUQ4OFIf5RKB{>DY{3SKO*&z_mT(HI78YHJTM4Mmx?O*oUyb z>M7oO?5dAB*LKJbHzEpC;9DEWCcM0)V z5m{gZ;K8U5rPI1ia6SP#yM~RCWhfPe;uyYrZDYrgd{P4 zQzC~KNPNGu#nDZhkuxbLoiHCfx~lM!XXV+#GdSL)at%1%44C3*v)Pl5*hNi@-)1x3 zc0NsCZ05WZ{YU8b8YcG!-TGo~*Um>puh@Y03ZOXd;DL_X`3UJ1XAq8sP55GLdFc51 zWPGeRqaGGLQ+*pQf13e9$_tFXFJ$ql83s`7^$cH-)+ChjCfQf@?SsjIzxzUK#4lNo zsGB|R@VQB4zCpLq@|T_cpZZaGQ9+d{;elRMycEV9a2!gu4b(jgY#V4#!^S({2CATG z=C{+$+2FN*gl^0Yk26mcmxL4a^uNpZ4!PVDvZ!k|1Ss0!u`>mmm}9F;EwgSX3IIB9 z8i+KV7H6`fD=Shu5gq(}PV~T_%_$@58YxcJkT*@gm39`J{@s?_pjQB0&wEB6G&0*@ z{y|pI9{N(ve3S-&RsY1{=YB8UcOFpON~d`umH(sH@S^ZZXgh(-3z0L?{1N1|Ky{!3 zYLD1)I{im|;_v2WU!^)1^8;`HO5{Wha5J6~XAgrW%BelTrW9E>|5mp%xS%HT;`m{D z98%db;t)K^8Dwlc=Q4YA%`m5*2zQG)<)iM#d&!d}-2BFrKDIr^7h#;U7?CX#qS*(N z@*1$MwKmK6y$~$sAO9&u;6P_L)+nxgDE{b+Qd{~e1q8;1^G8XvJu24WQR9Ua)(ZKi z{D=*RoSwc|AoInKIico6#oJM{TTPn9FEyG<0)^2bJ~9&He0h<-9j1E_^i--@Kfl$z z&_xwj_#hQ3{{fc2m&a2I^-l5#ybvay&wEp)d`Rt0bwoeK?OI<-Cn!Np{bi%2o26Ys zAa6Ee%gyI&T+yWL=d)W>!&}}sl*8QZos{dh@{*Xk;eMk0lY`+CLZdNXd3*VzMsio_ zYd|8&8sP7W_<&7zE8(fn^cO{PHWqsg$m!5gK+vN9lQBH*5a^}p#F3Y4X*%tBjGx*bC^Kl3! zVsA$)l%aR5N?)*R-)Q9UiEf=s(MQ7Gtcj`8rx%1fT?tg75#4OK@3bE3tr^PYI*eb< zd@p8E zq^x3yZ&F*_ulWS>*BAX|KJCFI3Fmp=s;)RAU_12;Vd1N4RRmZlcC_ac3kDN2>*&W-HJ?HuEWvS}yP#imTB=WhjARFtiWyWNQ7K4{jshzxhGVkCSWvy2cP%~T?rO{QD@ zw9Q)a`3kpW|yzUOdj|^C0Z5 z{hq8yKY7W!Ng?E|dwP3d@bf0Jnf~{;=|75Bo<%7z$q2|BiLn|KrOovt^b=DcCoYGB z6GwAA59@en9GpvGEcd)Ub2idpN4qSJ#``7VACTjt+hj4e;$s`Kr^2w8wXY6+_BqN!JE=HY**;GG%p~zILpLads zynlMLwB4-T;G#kJ!aQHrg>UgEh^cBz#Z|n4jNH|MU9tZuMLZCm)FWG zdrkE_66qFB4UF=PMqQSjQQZ3%DqXZb!G4>s=FpM3KL?KjZtqbfYgwzDJ-(aU<=rfsXt z7N{acTx)cF>l(;v5fG_%*Z=N89QB^P&ktpjt+eW`rmKTO)ZrM%bFzHZ?%p>1qX8pR zW^)noNoF)&n%V&-g+Q61fuW9@`9m6es!s1|a8SS@jaQa1gE2cirt&bqAhh>;N}=5A z+^}+3)Sov<&!l;-Pb{IM*L`Cl&2D`VKSvVlw!T@pXJ=pU!kx&HNzl={f}22~aa|lx z#=Sl7%_fv-cYBjJ=VYkcyk>8D|5MfRLKl`p$$6kC&cWR$hBB%XCHMp~@04c^F*YLI zKtKI~@twHeA(PQxAkTQv41qa0vS{J0LRed6(nkh=hLv^0`iWt*3ZVes55Heu<; zaJ~43)^FI^abInHrkMJ)rP%X~36A!~sp-_divQ#nIZ)<7`UJlYtdrxOKQeKPC9Iht zx)}k-`Xl4dRcIDio0rE`LC+~|*jji4Y&+H|uOez$Cq;qE#x5VL7`6YJJ&0~% z!^1%}Hoj9DqUREDe(IH#W?yavKm9pK-e(J!iHDNJqB68zI|>a;!fQSa8}-Pg zp?E=>=`LjH@#-)<-%{ioSAxr*bDPUyG|nY|6*7yi(AjpF0BTV{+0gDUD&e?|Zt2HQ zm5sl0(J@>WmBE7EX=lOwAAJ~-!L#& z!A~MH7}4%Y)xsj7~8Ce zw&;Y1CZhM|yV0Vle8EB#ikkrzZ9ss^s#cjQB5|?tC5gwqSW{}Gx@eg)dwd$GQu;jr!ISi}4o`*WE##VFa^+hBAI z89>$=2V19nv2lYMElUMlf#aiWJ&~~sbKi>T*HP^8-9anL---OO`Hk$!y;qh+7eGqE zL_N_P4PiV)T}cT&p8%FP^W0U~b#;^7CiV<`*#VQN64gfG&o?}awoU98*k<$Aw(odj z_?nh}&_OEjd_`H;ew1C(Jx>cgZxHl(JI^#N%IZu$a@FCL1rm_~01RB36g@5a1jxcG z!cRR+tU6&%%FKFH+{xvj z;7`8}6Z@s(YvlN|26^dinz)i)blc1F%qF9j1ZPZ>_zxDyCjT29NJs?77?nW?x$5Z6= z%1mYQkncP7Gq(ZNphvY3=pPq^W%dUzouT% zHg{1McR(|4vXjD&DXdDsun#S%9?m5+qOOz1e1b&kajH>w;3Y!Senx)#DZObJY zW1H5C+xNvkgs`YWNcf)6dYGga6@Z|W^&885(WaKcX0GPyZJnNIQ+Y{-$jt@a zydX}Mhi;-d8`O9}(Fned{;MyvOsr!jZN`WsC@Z?Vmk zx|h4W!)z%N7`UE>7ZEJ9R>c4Q6vfd2kBGW1w&OY#VJ+Ha1F^|dK`olNhx1pP}e(j3MslP4Gq+m~3s4m^}d$*Ea@aQPNKvKmCSht>zW zUW-Bjh{P|dLh0hUnV&teY9n@}RN>sHdehTH$H_>;+Ax^c&g{W&BATX8w z8noy&|B-7pEkb`o`rOYHDrsWG*pGehMgYxLI@-8>A6HUQJc3i)Y<9uPoz4H_Z8UEJ zWFPxoXEz_Zbps6(91@!Bo2gog)Vi0m`rBJ;*&nAcHAH=&+eIJI=HFljpOgC+UT?h$ z4Vt6CaP^qWJrbCGi*B?9p>hDkW;8h;kgpAy*Ubm77U=RTNrP!AJ16 zI;F&ds65}IKX$&8T{_+VLa)-0Ay>XR8+WG3NWVv!2|pPDTrcLu@p;!ehw!3Vljwk3 z9AH7EUZ}VIWZbcdOZUr(-GU+Qi?L6a%S+NdYAEiGvwrRtr4OgSaPfJc^c}j~I8E&7_(5Q* z@PHac%xPJs`?2fGGvBUsV&AV#K#<(PB4B183o$8J+y z33MVo@iSgOUgv+`{d02dL4b$F5j1>{A0hb5aHqyMwh%S(fzrs$k6Wgj!kovUUjMKh z`aEwj+Rg9kOcZn;nZ-Fv$Zj?jYDk(!Djvk0k3B&*-7xBo9xl^u4py29>Gc4?5Ng&8 zL!4DtL^2waD-9vqyEjOM?f2+p43EGOuwiyAkKVOwFX@lkpD-u1{+yn@B9TC_@AMD0 z0BEI=?T*hd^=bW7K}P=T?UDjF$I~uyHBD`4kzR+2))R%x?M3k{)-3TCU|I%4Zk`0Z zF|Y5=1ePLN0E&oDnh5(!;|T$ON9LcUVEW=K>n#E%Qb=L)+N$KO==i+LFYMu1Qny{$ z7U>`+f~UXs_F=QTPmNz?PiPB8LilM-c%wW>_j?6`dM4uKsm z3z`x?MdgF}vPgPjBE1i7HS{!eUzdOyA>iN?mMX!32!3r4T23~~MCtnaL-tctL8*io5i8cH zm)W)-qE9ygEbh1)1DYY{j>FU?@|@`Cef;CTZYIxxwN%yOv9dC=MaM0YL1m>El7{|s z4C1l@--Q&{njKv~aJQ5)z8qikTdr-*BfDKEzLjC{scd;af{tf&0>;AlD|VUFn7jrb z(~{C5vkDjygZ@w0tY=lKt%Lnm4Wlb~jsfX-5}t zZp|~249hk$Ny)_)Q3TPl-^9MHT(mbZbFBiz+{U@xg4A49eaBDyOqFKuJ#&fZk58C+I z`?CSoj*M4))<-hEw3+A;oW7u5&5FvZwb0Crl|=2W4%pXRDqMVBaiwHSkyk*Vh&3bU z%Fr6n-`dbeCL`C)Wb*v%rR&LU_ZV6G;>_TwVip(KV0edE+DO)WPnkc(8K_AE2hA6M zuP7r^_Vz<5)~3o|h09BasHj*Q}KtFv1o!PMq4E6>G z{suLk4|vc<>?I6bACF4nuzXCV`SCV(v$nncr!G%EHZSGm#)L0kHt>!Z%@ypw8v-#l zu(){8W$l6?cHc4WkyDEXz1QwaZXgRKqs;m>^V6b5;?pz8#wH6kr&?|)mPyPik;&m_ zx6eQ}S-NDm*03?0OT)QDZ~fwgpcPRE;GhLDTum8FXkT!uz&TSsQ-Fpyo&MZlVOfCSd{ThS!NN>w&i911h-c z3=@daw31TnBYI8@LC@LWFq+Sde6g`LO5@tX_9@=}jD6*&NTZv}8=)PJX~XA;h{vBP zrntR)nLnVDPTTui^#fm>zjeLllVPDQw+CYtaFEdu6By>T0DDDQjxAQLgrCg?m)e_S zR_!j8lj3GONpjZ|?UqM|gr#NAn#-zEcXZ(ZI8#E*W$|Xh9X(YRUXKP1!ySaGA#6G1 zbkt756j@iN1P%;q)9cL444LFI2~dk1H>iTgtf{0eFD*sb)kzT;Qyt2wp~bTJX(Y(0 zc=riRrM9&$4%eg9yE~2>mC&Sdn2W3KmM|`sAFU>+f3B-Ukc=K}L5t8Pl~tHkLJTvn z#O-j1B{{NW4BMwDifqSlswba+6h)k36oSAkLGERxK9MliUTe4ZZ=o-S*uHv|so*}v z3{(@K6t^xJu6xhCmdOw?0Y+pjTBRHR^NURG~5E&PqGH>g)Uh@Qb^3k;Q zu{Sq=A2V3pBQj+q<6(IESm&3eqD6w`Ivdl!t!>Plh8H5VT<7TQ=!|HgMPzjUB0jS` zAQJX}Ce8dA)0rKAHI0!2bXJUG5s~Q=It`^4Yzc&utjr30A|=Zzf*6ar2$jA{KGroF zNKR42kRkh|V0>G-vHo~;&3+wcyy6MM;hnZc=g=oR_vq{=rtQ9S7f*U(D)qD9zc#Fx z=ubjWh0LyVubqTh3+c8Max783Kk85&EfpgYv(8C`#gv)B{dKtu3hJ}^AeEHbGTH%O zKa|hb*-w@H5Bt81HDehW;spc35+!2hdi|5;O6gJL)LKaFBrTVZ+Xrp+drFfjJvTLw z6iM0g__a87$py&z`^NWZv7>!rQi|m@a!t@rddIX1mptdx-TyidcN6`9o!;7ij5QM$ zn4Q)yv}MNav%DbbDD*I>0e*VVm%KL7fxbgQQM;j>3`<78+ezI1DPfpEz=?OQor0GO zyh}oJ4gDg{`5aO55nyROuR~Wu%s(%b$a{x&*wTjIO;t(b=<;Ud4cc5o?54H}B==)f zqF&4dEMcjAyg0w|kOBDtzB(LBE2 zTe-wtuH#Acyu`pe$31$ypp`eE9xtAJy>g?_B5nSZ&HDCJepl1b)}BZ#73z3|FWl=u z)Af~dB8lwoZXoCdu8*%7b2&@&R18d_^)fK?Nd%`qC?R>FHh}lls-}8}j8c-5@T)X@ zQBiE10|FU*(bp8Zn;#Yu`_`m?(U6nJ*Akpl{-`XKlXwsOZ#xaN{JjGHhsb~ zSLeR8X+Kl;mGDlH+cnHBg6C9?{{Gg8HTDE`8I1S~{G;8D zLnG<8uVsA^V~ZT5>p4Ya81{yy4P*0yKeqNT2$~fEu9p{mw2TjbVtCLbX6bD0 z_|Q$}`qt6$rv#vOzp#svyOF`QXh&TD>@|IUbUcZ9aB%qZCb_{rE^xXrGB&M)NA3=V z8k|3Xx0T4-C7>3U_qGWHd%FjJx-Mzz9@3E>6yxjh^r2Qpekya8yMh95uARSuB-^Dx znJmee!t1SlqG29#@Q7$#+(jy9pIWm7YJst65DAuk7A0X23-D`!u@I? zGY*OgmVn#eG`*yS1`FQPm_h@8P#)w(bd{iq7Hz}r4A<(NL5y-}bgBY&6je;H^MP%j zCNn>!FHH6$v9#(lCAJh&Fg1tj5I%)91kt$fjQGV z-`p*sbMx@rj0orY)HWRMUJ{$M3^`A6u2X{IR?C+MF^Diw>w` zxbkb7Hw9jY0iRlhbXLzLS~)i!ulEH><}WXB`YLtP#V9V9Whw1bRqe32b&j?W{cw-V zKOWKO7;oG?8^_uLedit*Iex@8eT`#YTW;Nd+BPyo;md^lFQLFLBPZYe%ATR3alR^P z%@wpQr@1;UqI)UM@ z^V|qGaH7o5!ne~mfeG2Pm_e5VkLN!--#s3Ql4duJI!~1(x052s4FgfYR#>%IS06*E z0DnD45hVb`PAnKSmQ>Ez9emTXH>Br{kHgyKH-#%?Bq$lchzgCUSPqx*#qCo->|+Um z`WwmD0Z^ELsPXDVla7yMLIuZriD`1Go%=sqhmC`j{#WvtW;phKsMR4NrroCC-SmU& zkoVvti~{5)a~n3eGq~0M#b9CeB|h%sorkwtJ;~?_F*}@hvS5l2t?Aj7rPE?29UdB{KJ+Gw^@E8gO-O$`#OYgvk+k_cHB9~(NAH|5!UODdmmaoSMAns zc9_0DMU_DPtxJ&U2E|RZc6{mjgR`dKmTKic&lw%+Ah|M>8i6Q($iEg$KWo!@Sp!fUE8f#d*`VJ;%|`qVXf?_)vh8pzIOl`L^9>SZ_960A{-Qm)K1u z0E}T*S3S9VecqFQC~nl{v)m^AxNqa!wfUxvE{lT=gC1Mr9M_JGH^#WkEGe{&m+8eX zeq~S*RZ#GU5=q$lrG)2Og<}rI^}@o(%cUL>X(}vmI`D9l(|1g-%%yc?jV28GV_;%M z1U^#Xg_Z4&jUM}V`D@v4T+e*y`>rAFUAmaip8`RJVt&1O!o1Di_Y3O*)@`kyL-$e! zfaNo0dYPq;o$@%uGU0dqni4*mneDXm-8}`<6(4Q5%d~#|G$&&mlku`GR6AU~o&XLZ znE2}5lNsP@KK|I}k=JpD=#r{`SH0+3x!82zhXwx5Fd0XVhST>R>)~a$eO!}6I2x#E z;CkPh_P*d6v>e=Cb9+>xuaKHO91F)W z0o9Oq=4!Wr@=0BW6qwHYl*(saC(~o|f#SZZ$Y?Om+X00(ISR8yzxz=Mo8itJWCvy{ zvJYmv++OZ15~%Z?HIsN4(mQCHziS`JX)9}qn!x3t`0biWbd(!$Qx}$n=Ez`KehE)j zw7F?tHm1RJ^m{~4kgO|^FtodylJ7=&$z*+gIQ~9fUO^i+zwILK=XCVF6Q!7TpX|2! z_59Jfo>zHr`?_x1$ep|v0US5k#W!+Puw4J_cG-7^`H6Px2Z11W4f9Z=|Ie`~WEJ)C zBM9er%)GbST-8Vxvc=1nyhl`D;x4FADpzLIBYprH(Yj5d5FT^d(Ey5*A zj}$4u1^p+LUW-?V-ps1-0mZF;cU4vi9_KwFdsXUp%hPw$gRF>PQgTe@Ii)L81U&0Rd5@T7rB+u%=RP zBn1CIAlmkR)&NvaF8Pzx9@8iKJ$MA6eAc2u u76Jkm!XmtUf_%aPBD@w*L1BJtVJM#k)SPJY<0~XDKv_XuzDmw4^uGX +#ffffff \ No newline at end of file diff --git a/angular-starter/src/assets/icon/favicon-16x16.png b/angular-starter/src/assets/icon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..e8eec5d788df49b8bae4d959bb49d1a1ee0c39a6 GIT binary patch literal 1523 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/favicon-96x96.png b/angular-starter/src/assets/icon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..0a346f6dc373642c6c62bc1dd35a09d0992f758d GIT binary patch literal 5597 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/favicon.ico b/angular-starter/src/assets/icon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2239c6c6d6cb369b4acee0ecba4484eb460cb0dd GIT binary patch literal 1150 zcmZ{iNla5g7{|X?Ku}N+M8qW$Bw(Ug5tkr|H~Y5=08TYRe{(sL-+mq{tEqQB0Ju|NW*ET8YfdZ)V=i_j@zn%p;Qc2?`>vBj~y} z(M}>d$nX%4tc-I*#B(A3D>&absJe_2&+H-7D@AxkzE9YIiKtMwYlCR_u<*K!Bna$o zpwzZ%YA@AG%?7o1N`7X*R)a=CkBiT`1&^M~^Xsaoq_6d4>^9Qe$2Wvx9U(_evpFiN zF=%|w72OZtl%FLsa~GE@)=jlGZTr*LatzkS%~?C@+tMSON8wRykhCZFBqAYpsBQ9U!_Brn#!`7Ra z8gGK#rbD|~hdx^^3v_C5IW(?gG5EN3$r5vKP_+m=1Kui1_AfM1KJVl+BI+ literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/ms-icon-144x144.png b/angular-starter/src/assets/icon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..90169cb327a709ae6c79e9e37df35f8977995ae9 GIT binary patch literal 8433 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/ms-icon-150x150.png b/angular-starter/src/assets/icon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..ac3301e14d82086ed23fd65b206d1de3ee031099 GIT binary patch literal 8878 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 oQuvLKn8Xu12_ca;Le>I64FO<$W=s96Ko2t<8 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/icon/ms-icon-70x70.png b/angular-starter/src/assets/icon/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..7686baf5b19f483c3981a63a589d9dcb93df3396 GIT binary patch literal 4124 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

Bv!g}o}(${ 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 literal 0 HcmV?d00001 diff --git a/angular-starter/src/assets/img/tipe.png b/angular-starter/src/assets/img/tipe.png new file mode 100644 index 0000000000000000000000000000000000000000..4939f070617af3882e5e8b43574d2e4aafb6d6fb GIT binary patch literal 45881 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 Promise; +} + +interface GlobalEnvironment { + ENV: string; + HMR: boolean; + SystemJS: SystemJS; + System: SystemJS; + // FIREBASE_CONFIG: FirebaseConfig; +} + +interface Es6PromiseLoader { + (id: string): (exportName?: string) => Promise; +} + +type FactoryEs6PromiseLoader = () => Es6PromiseLoader; +type FactoryPromise = () => Promise; + +type AsyncRoutes = { + [component: string]: Es6PromiseLoader | + Function | + FactoryEs6PromiseLoader | + FactoryPromise ; +}; + +type IdleCallbacks = Es6PromiseLoader | + Function | + FactoryEs6PromiseLoader | + FactoryPromise ; + +interface WebpackModule { + hot: { + data?: any, + idle: any, + accept(dependencies?: string | string[], callback?: (updatedDependencies?: any) => void): void; + decline(deps?: any | string | string[]): void; + dispose(callback?: (data?: any) => void): void; + addDisposeHandler(callback?: (data?: any) => void): void; + removeDisposeHandler(callback?: (data?: any) => void): void; + check(autoApply?: any, callback?: (err?: Error, outdatedModules?: any[]) => void): void; + apply(options?: any, callback?: (err?: Error, outdatedModules?: any[]) => void): void; + status(callback?: (status?: string) => void): void | string; + removeStatusHandler(callback?: (status?: string) => void): void; + }; +} + +interface WebpackRequire { + (id: string): any; + (paths: string[], callback: (...modules: any[]) => void): void; + ensure(ids: string[], callback: (req: WebpackRequire) => void, chunkName?: string): void; + context(directory: string, useSubDirectories?: boolean, regExp?: RegExp): WebpackContext; +} + +interface WebpackContext extends WebpackRequire { + keys(): string[]; +} + +interface ErrorStackTraceLimit { + stackTraceLimit: number; +} + +// Extend typings +interface NodeRequire extends WebpackRequire {} +interface ErrorConstructor extends ErrorStackTraceLimit {} +interface NodeRequireFunction extends Es6PromiseLoader {} +interface NodeModule extends WebpackModule {} +interface Global extends GlobalEnvironment {} diff --git a/angular-starter/src/environments/environment.e2e.prod.ts b/angular-starter/src/environments/environment.e2e.prod.ts new file mode 100644 index 0000000..2aaa245 --- /dev/null +++ b/angular-starter/src/environments/environment.e2e.prod.ts @@ -0,0 +1,26 @@ +/* tslint:disable */ +import { enableProdMode, NgModuleRef } from '@angular/core'; +import { disableDebugTools } from '@angular/platform-browser'; +import { Environment } from './model'; + +enableProdMode(); + +// export const ENV_FIREBASE_CONFIG: any = FIREBASE_CONFIG; + +export const environment: Environment = { + production: true, + showDevModule: true, + + /** Angular debug tools in the dev console + * https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md + * @param modRef + * @return {any} + */ + decorateModuleRef(modRef: NgModuleRef) { + disableDebugTools(); + return modRef; + }, + ENV_PROVIDERS: [ + + ] +}; diff --git a/angular-starter/src/environments/environment.prod.ts b/angular-starter/src/environments/environment.prod.ts new file mode 100644 index 0000000..7c04dd7 --- /dev/null +++ b/angular-starter/src/environments/environment.prod.ts @@ -0,0 +1,26 @@ +/* tslint:disable */ +import { enableProdMode, NgModuleRef } from '@angular/core'; +import { disableDebugTools } from '@angular/platform-browser'; +import { Environment } from './model'; + +enableProdMode(); + +// export const ENV_FIREBASE_CONFIG: any = FIREBASE_CONFIG; + +export const environment: Environment = { + production: true, + showDevModule: false, + + /** Angular debug tools in the dev console + * https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md + * @param modRef + * @return {any} + */ + decorateModuleRef(modRef: NgModuleRef) { + disableDebugTools(); + return modRef; + }, + ENV_PROVIDERS: [ + + ] +}; diff --git a/angular-starter/src/environments/environment.ts b/angular-starter/src/environments/environment.ts new file mode 100644 index 0000000..995732f --- /dev/null +++ b/angular-starter/src/environments/environment.ts @@ -0,0 +1,36 @@ +/* tslint:disable */ + +import { ApplicationRef, NgModuleRef } from '@angular/core'; +import { enableDebugTools } from '@angular/platform-browser'; +import { Environment } from './model'; + +Error.stackTraceLimit = Infinity; +require('zone.js/dist/long-stack-trace-zone'); + +// export const ENV_FIREBASE_CONFIG: any = FIREBASE_CONFIG; + +export const environment: Environment = { + production: false, + + showDevModule: true, + + /** Angular debug tools in the dev console + * https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md + * @param modRef + * @return {any} + */ + decorateModuleRef(modRef: NgModuleRef) { + const appRef = modRef.injector.get(ApplicationRef); + const cmpRef = appRef.components[0]; + + let _ng = (window).ng; + enableDebugTools(cmpRef); + (window).ng.probe = _ng.probe; + (window).ng.coreTokens = _ng.coreTokens; + return modRef; + }, + ENV_PROVIDERS: [ + + ] +}; + diff --git a/angular-starter/src/environments/model.ts b/angular-starter/src/environments/model.ts new file mode 100644 index 0000000..2c46f0e --- /dev/null +++ b/angular-starter/src/environments/model.ts @@ -0,0 +1,8 @@ +import { NgModuleRef } from '@angular/core'; + +export interface Environment { + production: boolean; + ENV_PROVIDERS: any; + showDevModule: boolean; + decorateModuleRef(modRef: NgModuleRef): NgModuleRef; +} diff --git a/angular-starter/src/index.html b/angular-starter/src/index.html new file mode 100644 index 0000000..b9e563c --- /dev/null +++ b/angular-starter/src/index.html @@ -0,0 +1,55 @@ + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + <% if (webpackConfig.htmlElements.headTags) { %> + + <%= webpackConfig.htmlElements.headTags %> + <% } %> + + + <%= htmlWebpackPlugin.files.webpackManifest %> + + <% if (htmlWebpackPlugin.options.metadata.isDevServer && htmlWebpackPlugin.options.metadata.HMR !== true) { %> + + + <% } %> + + + <% if (htmlWebpackPlugin.options.gtmKey) { %> + + + + <% } %> + + + + + + + + +<% if (htmlWebpackPlugin.options.gtmKey) { %> + + + +<% } %> + + + Loading... + + + + + diff --git a/angular-starter/src/main.browser.ts b/angular-starter/src/main.browser.ts new file mode 100644 index 0000000..d57fd15 --- /dev/null +++ b/angular-starter/src/main.browser.ts @@ -0,0 +1,40 @@ +/** + * Angular bootstrapping + */ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { environment } from 'environments/environment'; + +/** + * App Module + * our top level module that holds all of our components + */ +import { AppModule } from './app'; + +/** + * Bootstrap our Angular app with a top level NgModule + */ +export function main(): Promise { + return platformBrowserDynamic() + .bootstrapModule(AppModule) + .then(environment.decorateModuleRef) + .catch((err) => console.error(err)); +} + +/** + * Needed for hmr + * in prod this is replace for document ready + */ +switch (document.readyState) { + case 'loading': + document.addEventListener('DOMContentLoaded', _domReadyHandler, false); + break; + case 'interactive': + case 'complete': + default: + main(); +} + +function _domReadyHandler() { + document.removeEventListener('DOMContentLoaded', _domReadyHandler, false); + main(); +} diff --git a/angular-starter/src/meta/humans.txt b/angular-starter/src/meta/humans.txt new file mode 100644 index 0000000..b2d8794 --- /dev/null +++ b/angular-starter/src/meta/humans.txt @@ -0,0 +1,17 @@ +# humanstxt.org/ +# The humans responsible & technology colophon + +# TEAM + + -- -- + +# THANKS + + + PatrickJS -- @gdi2290 + AngularClass -- @AngularClass + +# TECHNOLOGY COLOPHON + + HTML5, CSS3 + Angular2, TypeScript, Webpack diff --git a/angular-starter/src/meta/robots.txt b/angular-starter/src/meta/robots.txt new file mode 100644 index 0000000..9417495 --- /dev/null +++ b/angular-starter/src/meta/robots.txt @@ -0,0 +1,3 @@ +# robotstxt.org + +User-agent: * diff --git a/angular-starter/src/polyfills.browser.ts b/angular-starter/src/polyfills.browser.ts new file mode 100644 index 0000000..77edce8 --- /dev/null +++ b/angular-starter/src/polyfills.browser.ts @@ -0,0 +1,79 @@ +/** + * 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 + */ + +// Internet Explorer 9 support +// import 'ie-shim'; + +// 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`. + +// Evergreen browsers require these. +import 'core-js/es6/reflect'; +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 + */ + +// import 'web-animations-js'; // Run `npm install --save web-animations-js`. + +/*************************************************************************************************** + * Zone JS is required by Angular itself. + */ +import 'zone.js/dist/zone'; +// import 'zone.js/dist/long-stack-trace-zone' // async stack traces with zone.js included for dev + +/*************************************************************************************************** + * 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'; +if ('production' === ENV) { + // Production + +} else { + + // Development +} diff --git a/angular-starter/src/styles/_variables.scss b/angular-starter/src/styles/_variables.scss new file mode 100644 index 0000000..0644143 --- /dev/null +++ b/angular-starter/src/styles/_variables.scss @@ -0,0 +1 @@ +$nav-button-color: #00838F; \ No newline at end of file diff --git a/angular-starter/src/styles/headings.css b/angular-starter/src/styles/headings.css new file mode 100644 index 0000000..6fe295c --- /dev/null +++ b/angular-starter/src/styles/headings.css @@ -0,0 +1,3 @@ +h1 { + color: #00BCD4; +} \ No newline at end of file diff --git a/angular-starter/src/styles/styles.scss b/angular-starter/src/styles/styles.scss new file mode 100644 index 0000000..948e97d --- /dev/null +++ b/angular-starter/src/styles/styles.scss @@ -0,0 +1,19 @@ +/* this file will be extracted to main dist folder and is imported in index.html */ +/* This file is for setting global styles */ +@import 'variables'; + +nav { + margin-top: 16px; +} + +nav a { + background-color: $nav-button-color; + color: white; + padding: 8px 16px; + margin: 8px; + vertical-align: middle; + line-height: 1.25; + text-align: center; + text-decoration: none; + border-radius: 4px; +} diff --git a/angular-starter/tsconfig.json b/angular-starter/tsconfig.json new file mode 100644 index 0000000..171a022 --- /dev/null +++ b/angular-starter/tsconfig.json @@ -0,0 +1,46 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noEmit": true, + "noEmitHelpers": true, + "importHelpers": true, + "strictNullChecks": false, + "lib": [ + "dom", + "es6" + ], + "baseUrl": "./src", + "paths": { + "@angular/*": ["node_modules/@angular/*"] + }, + "typeRoots": [ + "node_modules/@types" + ], + "types": [ + "hammerjs", + "jasmine", + "node", + "uglify-js", + "webpack" + ] + }, + "exclude": [ + "node_modules", + "dist" + ], + "awesomeTypescriptLoaderOptions": { + "forkChecker": true, + "useWebpackText": true + }, + "compileOnSave": false, + "buildOnSave": false, + "atom": { + "rewriteTsconfig": false + } +} diff --git a/angular-starter/tsconfig.webpack.json b/angular-starter/tsconfig.webpack.json new file mode 100644 index 0000000..2779a59 --- /dev/null +++ b/angular-starter/tsconfig.webpack.json @@ -0,0 +1,43 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "es2015", + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "sourceMap": true, + "noEmitHelpers": true, + "importHelpers": true, + "strictNullChecks": false, + "lib": [ + "es2015", + "dom" + ], + "baseUrl": "./src", + "paths": { + "@angular/*": ["node_modules/@angular/*"] + }, + "typeRoots": [ + "node_modules/@types" + ], + "types": [ + "hammerjs", + "node" + ] + }, + "exclude": [ + "node_modules", + "dist", + "src/**/*.spec.ts", + "src/**/*.e2e.ts" + ], + "angularCompilerOptions": { + "skipMetadataEmit": true + }, + "compileOnSave": false, + "buildOnSave": false, + "atom": { + "rewriteTsconfig": false + } +} diff --git a/angular-starter/tslint.json b/angular-starter/tslint.json new file mode 100644 index 0000000..8df8a50 --- /dev/null +++ b/angular-starter/tslint.json @@ -0,0 +1,62 @@ +{ + "extends": [ + "tslint:recommended" + ], + "linterOptions": { + "exclude": [ + "src/*.d.ts" + ] + }, + "rulesDirectory": [ + "node_modules/codelyzer" + ], + "rules": { + // Custom + "trailing-comma": [false, {"multiline": "always", "singleline": "never"}], + "interface-name": [false, "always-prefix"], + // Angular 2 + "component-class-suffix": true, + // "component-selector": [true, "element", "my", "kebab-case"], + "directive-class-suffix": true, + // "directive-selector": [true, "attribute", "my", "camelCase"], + "import-destructuring-spacing": true, + "no-output-on-prefix-name": true, + "no-attribute-parameter-decorator": true, + "no-forward-ref": true, + "no-input-rename": true, + "no-output-rename": true, + "only-arrow-functions": false, + "pipe-naming": [true, "camelCase", "my"], + "use-host-property-decorator": true, + "use-input-property-decorator": true, + "use-life-cycle-interface": true, + "use-output-property-decorator": true, + "use-pipe-transform-interface": true, + // General + "no-console": [true, + "time", + "timeEnd", + "trace" + ], + "max-line-length": [ + true, + 100 + ], + "no-string-literal": false, + "no-use-before-declare": true, + "object-literal-sort-keys": false, + "ordered-imports": false, + "quotemark": [ + true, + "single", + "avoid-escape" + ], + "variable-name": [ + true, + "allow-leading-underscore", + "allow-pascal-case", + "ban-keywords", + "check-format" + ] + } +} diff --git a/angular-starter/typedoc.json b/angular-starter/typedoc.json new file mode 100644 index 0000000..5546b06 --- /dev/null +++ b/angular-starter/typedoc.json @@ -0,0 +1,15 @@ +{ + "mode": "modules", + "out": "doc", + "theme": "default", + "ignoreCompilerErrors": "true", + "experimentalDecorators": "true", + "emitDecoratorMetadata": "true", + "target": "ES5", + "moduleResolution": "node", + "preserveConstEnums": "true", + "stripInternal": "true", + "suppressExcessPropertyErrors": "true", + "suppressImplicitAnyIndexErrors": "true", + "module": "commonjs" +} diff --git a/angular-starter/webpack.config.js b/angular-starter/webpack.config.js new file mode 100644 index 0000000..810987f --- /dev/null +++ b/angular-starter/webpack.config.js @@ -0,0 +1,21 @@ +/** + * @author: tipe.io + */ + +/** + * Look in ./config folder for webpack.dev.js + */ +switch (process.env.NODE_ENV) { + case 'prod': + case 'production': + module.exports = require('./config/webpack.prod')({env: 'production'}); + break; + case 'test': + case 'testing': + module.exports = require('./config/webpack.test')({env: 'test'}); + break; + case 'dev': + case 'development': + default: + module.exports = require('./config/webpack.dev')({env: 'development'}); +} diff --git a/angular-starter/yarn.lock b/angular-starter/yarn.lock new file mode 100644 index 0000000..02ba904 --- /dev/null +++ b/angular-starter/yarn.lock @@ -0,0 +1,8910 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/build-optimizer@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.3.2.tgz#77d4d1e4fcd09575f0200e2d6d21c1a3f995096f" + dependencies: + loader-utils "^1.1.0" + source-map "^0.5.6" + typescript "~2.6.2" + webpack-sources "^1.0.1" + +"@angular-devkit/core@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-0.3.2.tgz#b6fd6aa2e4f4ac3c39478198ba91a53d4c0f88d5" + dependencies: + ajv "~5.5.1" + chokidar "^1.7.0" + rxjs "^5.5.6" + source-map "^0.5.6" + +"@angular-devkit/schematics@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-0.3.2.tgz#09a2268fad61f4f956f42db87913b8748c512a78" + dependencies: + "@ngtools/json-schema" "^1.1.0" + rxjs "^5.5.6" + +"@angular/animations@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-5.2.7.tgz#a99fe128f3809e3f8082441a6e676992b9352db7" + dependencies: + tslib "^1.7.1" + +"@angular/cli@^1.7.1": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-1.7.2.tgz#7539285cb83f33cc1b34aec47a5ef6e8656c8450" + dependencies: + "@angular-devkit/build-optimizer" "0.3.2" + "@angular-devkit/core" "0.3.2" + "@angular-devkit/schematics" "0.3.2" + "@ngtools/json-schema" "1.2.0" + "@ngtools/webpack" "1.10.1" + "@schematics/angular" "0.3.2" + "@schematics/package-update" "0.3.2" + ajv "^6.1.1" + autoprefixer "^7.2.3" + cache-loader "^1.2.0" + chalk "~2.2.0" + circular-dependency-plugin "^4.2.1" + clean-css "^4.1.9" + common-tags "^1.3.1" + copy-webpack-plugin "~4.4.1" + core-object "^3.1.0" + denodeify "^1.2.1" + ember-cli-string-utils "^1.0.0" + extract-text-webpack-plugin "^3.0.2" + file-loader "^1.1.5" + fs-extra "^4.0.0" + glob "^7.0.3" + html-webpack-plugin "^2.29.0" + istanbul-instrumenter-loader "^3.0.0" + karma-source-map-support "^1.2.0" + less "^2.7.2" + less-loader "^4.0.5" + license-webpack-plugin "^1.0.0" + loader-utils "1.1.0" + lodash "^4.11.1" + memory-fs "^0.4.1" + minimatch "^3.0.4" + node-modules-path "^1.0.0" + nopt "^4.0.1" + opn "~5.1.0" + portfinder "~1.0.12" + postcss "^6.0.16" + postcss-import "^11.0.0" + postcss-loader "^2.0.10" + postcss-url "^7.1.2" + raw-loader "^0.5.1" + resolve "^1.1.7" + rxjs "^5.5.6" + sass-loader "^6.0.6" + semver "^5.1.0" + silent-error "^1.0.0" + source-map-support "^0.4.1" + style-loader "^0.19.1" + stylus "^0.54.5" + stylus-loader "^3.0.1" + uglifyjs-webpack-plugin "^1.1.8" + url-loader "^0.6.2" + webpack "~3.11.0" + webpack-dev-middleware "~1.12.0" + webpack-dev-server "~2.11.0" + webpack-merge "^4.1.0" + webpack-sources "^1.0.0" + webpack-subresource-integrity "^1.0.1" + optionalDependencies: + node-sass "^4.7.2" + +"@angular/common@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.2.7.tgz#11bb9f00afe91af8d772ecdff83c2e179f9a67a0" + dependencies: + tslib "^1.7.1" + +"@angular/compiler-cli@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.2.7.tgz#3bad9d5e4c25ebc51e1bb67b71b26a97d6d3bbc5" + dependencies: + chokidar "^1.4.2" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + tsickle "^0.27.2" + +"@angular/compiler@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.2.7.tgz#31dcc7ac18cc23cb115e76c541b982737ff93ec9" + dependencies: + tslib "^1.7.1" + +"@angular/core@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.2.7.tgz#e5607fc39d90f9fe4fbaaeeeb6cdb9371966bfe3" + dependencies: + tslib "^1.7.1" + +"@angular/forms@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-5.2.7.tgz#a0c41fdb6b8ba2c32653cc3058d5fa47db91fbf8" + dependencies: + tslib "^1.7.1" + +"@angular/language-service@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-5.2.7.tgz#065fc0d3f8d58b3439e1bafc10c85420e4391756" + +"@angular/platform-browser-dynamic@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.7.tgz#91f903c1f73de2fba1004bc31ed1c3117c7f0406" + dependencies: + tslib "^1.7.1" + +"@angular/platform-browser@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.2.7.tgz#cfd86040c25380aabf0322ef47aecc61f23cc532" + dependencies: + tslib "^1.7.1" + +"@angular/platform-server@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-5.2.7.tgz#e2eb290952dbe6ab04b4edae115a0d02b8b2dc4c" + dependencies: + domino "^1.0.29" + tslib "^1.7.1" + xhr2 "^0.1.4" + +"@angular/router@^5.2.7": + version "5.2.7" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-5.2.7.tgz#691c375fe32f01bea56d169469ad8f254b136af9" + dependencies: + tslib "^1.7.1" + +"@compodoc/compodoc@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@compodoc/compodoc/-/compodoc-1.0.8.tgz#66a27dade58f548caf1b88937ffdb6ecc101aa6a" + dependencies: + "@compodoc/ngd-transformer" "^2.0.0" + chalk "^2.3.1" + cheerio "^1.0.0-rc.2" + chokidar "^2.0.2" + colors "^1.1.2" + commander "2.14.1" + fancy-log "^1.3.2" + findit2 "^2.2.3" + fs-extra "^5.0.0" + glob "^7.1.2" + handlebars "^4.0.11" + html-entities "^1.2.1" + json5 "^0.5.1" + live-server "1.1.0" + lodash "^4.17.5" + lunr "2.1.6" + marked "^0.3.17" + os-name "^2.0.1" + traverse "^0.6.6" + ts-simple-ast "6.12.0" + typescript "2.4.2" + +"@compodoc/ngd-core@~2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@compodoc/ngd-core/-/ngd-core-2.0.0.tgz#e31a6cbbdfa8de648b027aa4169468bc496544c9" + dependencies: + ansi-colors "^1.0.1" + fancy-log "^1.3.2" + typescript "^2.4.2" + +"@compodoc/ngd-transformer@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@compodoc/ngd-transformer/-/ngd-transformer-2.0.0.tgz#89e858dd332198cde262f0cf3648bd0969d0da62" + dependencies: + "@compodoc/ngd-core" "~2.0.0" + dot "^1.1.1" + fs-extra "^4.0.1" + viz.js "^1.8.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@ngtools/json-schema@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.2.0.tgz#06e5ecd29e9a37d260a447dd873ea2becd228c4f" + +"@ngtools/json-schema@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ngtools/json-schema/-/json-schema-1.1.0.tgz#c3a0c544d62392acc2813a42c8a0dc6f58f86922" + +"@ngtools/webpack@1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.10.0.tgz#1e4f60bdba8cdb8aeb93ebb976e63bf175acd279" + dependencies: + chalk "~2.2.0" + enhanced-resolve "^3.1.0" + loader-utils "^1.0.2" + magic-string "^0.22.3" + semver "^5.3.0" + source-map "^0.5.6" + tree-kill "^1.0.0" + webpack-sources "^1.1.0" + +"@ngtools/webpack@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-1.10.1.tgz#0af9de19a9716ce0247b6aad83ba9c5702766a03" + dependencies: + chalk "~2.2.0" + enhanced-resolve "^3.1.0" + loader-utils "^1.0.2" + magic-string "^0.22.3" + semver "^5.3.0" + source-map "^0.5.6" + tree-kill "^1.0.0" + webpack-sources "^1.1.0" + +"@schematics/angular@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-0.3.2.tgz#be209a032a3e4577992d94fbaa14bd4bfde485e2" + dependencies: + typescript "~2.6.2" + +"@schematics/package-update@0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@schematics/package-update/-/package-update-0.3.2.tgz#c5a299ceba8b9e56f3e1f804f86f07664ec6e01c" + dependencies: + rxjs "^5.5.6" + semver "^5.3.0" + semver-intersect "^1.1.2" + +"@types/events@*": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-1.2.0.tgz#81a6731ce4df43619e5c8c945383b3e62a89ea86" + +"@types/fs-extra@5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.0.tgz#d3e225b35eb5c6d3a5a782c28219df365c781413" + dependencies: + "@types/node" "*" + +"@types/glob@*": + version "5.0.35" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-5.0.35.tgz#1ae151c802cece940443b5ac246925c85189f32a" + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/hammerjs@^2.0.35": + version "2.0.35" + resolved "https://registry.yarnpkg.com/@types/hammerjs/-/hammerjs-2.0.35.tgz#7b7c950c7d54593e23bffc8d2b4feba9866a7277" + +"@types/handlebars@4.0.36": + version "4.0.36" + resolved "https://registry.yarnpkg.com/@types/handlebars/-/handlebars-4.0.36.tgz#ff57c77fa1ab6713bb446534ddc4d979707a3a79" + +"@types/highlight.js@9.12.2": + version "9.12.2" + resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.2.tgz#6ee7cd395effe5ec80b515d3ff1699068cd0cd1d" + +"@types/jasmine@2.8.6": + version "2.8.6" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-2.8.6.tgz#14445b6a1613cf4e05dd61c3c3256d0e95c0421e" + +"@types/lodash@4.14.99": + version "4.14.99" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.99.tgz#e6e10c0a4cc16c7409b3181f1e66880d2fb7d4dc" + +"@types/marked@0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@types/marked/-/marked-0.3.0.tgz#583c223dd33385a1dda01aaf77b0cd0411c4b524" + +"@types/minimatch@*", "@types/minimatch@3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + +"@types/minimist@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.0.tgz#69a23a3ad29caf0097f06eda59b361ee2f0639f6" + +"@types/node@*", "@types/node@^9.4.6": + version "9.4.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e" + +"@types/node@^6.0.46": + version "6.0.101" + resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.101.tgz#0c5911cfb434af4a51c0a499931fe6423207d921" + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + +"@types/selenium-webdriver@^2.53.35", "@types/selenium-webdriver@~2.53.39": + version "2.53.43" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-2.53.43.tgz#2de3d718819bc20165754c4a59afb7e9833f6707" + +"@types/shelljs@0.7.7": + version "0.7.7" + resolved "https://registry.yarnpkg.com/@types/shelljs/-/shelljs-0.7.7.tgz#1f7bfa28947661afea06365db9b1135bbc903ec4" + dependencies: + "@types/glob" "*" + "@types/node" "*" + +"@types/tapable@*": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-0.2.4.tgz#8181a228da46185439300e600c5ae3b3b3982585" + +"@types/uglify-js@*", "@types/uglify-js@^2.6.30": + version "2.6.30" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-2.6.30.tgz#257d2b6dd86673d60da476680fba90f2e30c6eef" + dependencies: + source-map "^0.6.1" + +"@types/webpack@^3.8.8": + version "3.8.9" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-3.8.9.tgz#c420c9428ba18e20e4fe8eff7bee4d04bace9182" + dependencies: + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + source-map "^0.6.0" + +JSONStream@^1.0.3: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +accepts@~1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + +acorn-node@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" + dependencies: + acorn "^5.4.1" + xtend "^4.0.1" + +acorn@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +acorn@^5.0.0, acorn@^5.2.1, acorn@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" + +add-asset-html-webpack-plugin@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/add-asset-html-webpack-plugin/-/add-asset-html-webpack-plugin-2.1.3.tgz#1bb8cd9cf9bd612833a502397bb75da66b77ba32" + dependencies: + globby "^8.0.0" + micromatch "^3.1.3" + p-each-series "^1.0.0" + +addressparser@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746" + +adm-zip@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.4.tgz#a61ed5ae6905c3aea58b3a657d25033091052736" + +adm-zip@^0.4.7: + version "0.4.7" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + +agent-base@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-2.1.1.tgz#d6de10d5af6132d5bd692427d46fc538539094c7" + dependencies: + extend "~3.0.0" + semver "~5.0.1" + +ajv-keywords@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.0.0, ajv@^5.1.0, ajv@~5.5.1: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0, ajv@^6.1.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.1.tgz#28a6abc493a2abe0fb4c8507acaedb43fa550671" + dependencies: + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +ambi@^2.2.0, ambi@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/ambi/-/ambi-2.5.0.tgz#7c8e372be48891157e7cea01cb6f9143d1f74220" + dependencies: + editions "^1.1.1" + typechecker "^4.3.0" + +amdefine@>=0.0.4, amdefine@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +amqplib@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.5.2.tgz#d2d7313c7ffaa4d10bcf1e6252de4591b6cc7b63" + dependencies: + bitsyntax "~0.0.4" + bluebird "^3.4.6" + buffer-more-ints "0.0.2" + readable-stream "1.x >=1.1.9" + safe-buffer "^5.0.1" + +angular2-template-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz#c0d44e90fff0fac95e8b23f043acda7fd1c51d7c" + dependencies: + loader-utils "^0.2.15" + +ansi-colors@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9" + dependencies: + ansi-wrap "^0.1.0" + +ansi-cyan@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" + dependencies: + ansi-wrap "0.1.0" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + dependencies: + ansi-wrap "0.1.0" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-red@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" + dependencies: + ansi-wrap "0.1.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.1.0, ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +ansi-wrap@0.1.0, ansi-wrap@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +apache-crypt@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/apache-crypt/-/apache-crypt-1.1.2.tgz#820782a33bb6a5fd2712082f0ed3a24e3c9b0214" + dependencies: + unix-crypt-td-js "^1.0.0" + +apache-md5@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.0.6.tgz#470239d40c54e7c32dd9d6eb11bc3578ecc903c2" + +app-root-path@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" + dependencies: + arr-flatten "^1.0.1" + array-slice "^0.2.3" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + +array-slice@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + +arrify@^1.0.0, arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1, assert@^1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assets-webpack-plugin@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz#931ce0d66d42e88ed5e7f18d65522943c57a387d" + dependencies: + camelcase "^1.2.1" + escape-string-regexp "^1.0.3" + lodash.assign "^3.2.0" + lodash.merge "^3.3.2" + mkdirp "^0.5.1" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +ast-types@0.x.x: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.2.tgz#cc4e1d15a36b39979a1986fe1e91321cbfae7783" + +astw@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" + dependencies: + acorn "^4.0.3" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-foreach@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@1.x, async@^1.4.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@2.6.0, async@^2.0.0, async@^2.1.2, async@^2.4.1, async@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" + +async@~2.1.2: + version "2.1.5" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc" + dependencies: + lodash "^4.14.0" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^7.2.3: + version "7.2.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" + dependencies: + browserslist "^2.11.3" + caniuse-lite "^1.0.30000805" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.17" + postcss-value-parser "^3.2.3" + +awesome-typescript-loader@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-3.5.0.tgz#4d4d10cba7a04ed433dfa0334250846fb11a1a5a" + dependencies: + chalk "^2.3.1" + enhanced-resolve "3.3.0" + loader-utils "^1.1.0" + lodash "^4.17.4" + micromatch "^3.0.3" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.15.3: + version "0.15.3" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.15.3.tgz#2c9d638b2e191a08ea1d6cc988eadd6ba5bdc053" + dependencies: + follow-redirects "1.0.0" + +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-generator@^6.18.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-runtime@^6.0.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + 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@^6.18.0, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + 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@^6.18.0, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + +base64-js@^1.0.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + +base64url@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + 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" + +basic-auth@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" + dependencies: + safe-buffer "5.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + dependencies: + callsite "1.0.0" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +bitsyntax@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/bitsyntax/-/bitsyntax-0.0.4.tgz#eb10cc6f82b8c490e3e85698f07e83d46e0cba82" + dependencies: + buffer-more-ints "0.0.2" + +bl@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" + dependencies: + readable-stream "~2.0.5" + +blob@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + dependencies: + minimist "^1.2.0" + +bluebird@^3.3.0, bluebird@^3.4.6, bluebird@^3.4.7, bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.18.2, body-parser@^1.16.1: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + 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" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + 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@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-0.1.5.tgz#c085711085291d8b75fdd74eab0f8597280711e6" + dependencies: + expand-range "^0.1.0" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + define-property "^1.0.0" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + kind-of "^6.0.2" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-pack@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.4.tgz#9a73beb3b48f9e36868be007b64400102c04a99f" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + +browser-resolve@^1.11.0, browser-resolve@^1.7.0: + version "1.11.2" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + 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@^0.2.0, browserify-zlib@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserify@^14.5.0: + version "14.5.0" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-14.5.0.tgz#0bbbce521acd6e4d1d54d8e9365008efb85a9cc5" + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^1.11.0" + browserify-zlib "~0.2.0" + buffer "^5.0.2" + cached-path-relative "^1.0.0" + concat-stream "~1.5.1" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "~1.1.0" + duplexer2 "~0.1.2" + events "~1.1.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + module-deps "^4.0.8" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^2.0.0" + string_decoder "~1.0.0" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "~0.0.0" + url "~0.11.0" + util "~0.10.1" + vm-browserify "~0.0.1" + xtend "^4.0.0" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^2.11.3: + version "2.11.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" + dependencies: + caniuse-lite "^1.0.30000792" + electron-to-chromium "^1.3.30" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + +buffer-more-ints@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-0.0.2.tgz#26b3885d10fa13db7fc01aae3aab870199e0124c" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffer@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +buildmail@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/buildmail/-/buildmail-4.0.1.tgz#877f7738b78729871c9a105e3b837d2be11a7a72" + dependencies: + addressparser "1.0.1" + libbase64 "0.1.0" + libmime "3.0.0" + libqp "1.1.0" + nodemailer-fetch "1.6.0" + nodemailer-shared "1.1.0" + punycode "1.4.1" + +builtin-modules@^1.0.0, builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +cacache@^10.0.1: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + 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@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + 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@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.2.tgz#6d5c38ded959a09cc5d58190ab5af6f73bd353f5" + dependencies: + loader-utils "^1.1.0" + mkdirp "^0.5.1" + neo-async "^2.5.0" + schema-utils "^0.4.2" + +cached-path-relative@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2, camelcase@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000813.tgz#e0a1c603f8880ad787b2a35652b2733f32a5e29a" + +caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz#7b25e27fdfb8d133f3c932b01f77452140fcc6c9" + +caseless@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + 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" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@~2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.2.tgz#4403f5cf18f35c05f51fbdf152bf588f956cf7cb" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.2" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash "^4.15.0" + parse5 "^3.0.1" + +chokidar@^1.4.1, chokidar@^1.4.2, chokidar@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^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" + optionalDependencies: + fsevents "^1.0.0" + +chokidar@^2.0.0, chokidar@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.2.tgz#4dc65139eeb2714977735b6a35d06e97b494dfd7" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + 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" + optionalDependencies: + fsevents "^1.0.0" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +circular-dependency-plugin@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/circular-dependency-plugin/-/circular-dependency-plugin-4.4.0.tgz#f8a1a746a3f6c8e57f4dae9b54d991cd2a582f5d" + +circular-json@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.1.tgz#b8942a09e535863dc21b04417a91971e1d9cd91f" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.1.x, clean-css@^4.1.9: + version "4.1.10" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.10.tgz#3dfc2c2569d5f03c14b41d875ad9bccae09cb89e" + dependencies: + source-map "0.5.x" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +clone-deep@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-2.0.2.tgz#00db3a1e173656730d1188c3d6aced6d7ea97713" + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.0" + shallow-clone "^1.0.0" + +clone@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +clone@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +co@~3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/co/-/co-3.0.6.tgz#1445f226c5eb956138e68c9ac30167ea7d2e6bda" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +code-block-writer@^6.2.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-6.6.0.tgz#4fedf70344fde47d944caa6ef0adb99824be9210" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +codelyzer@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-4.2.1.tgz#d56eaacefca7e8138aac0a630e484bdb09988544" + dependencies: + 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" + +coffee-script@^1.12.5: + version "1.12.7" + resolved "https://registry.yarnpkg.com/coffee-script/-/coffee-script-1.12.7.tgz#c05dae0cb79591d05b3070a8433a98c9a89ccc53" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.0.0, color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.1.0, colors@^1.1.2, colors@latest, colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combine-lists@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/combine-lists/-/combine-lists-1.0.1.tgz#458c07e09e0d900fc28b70a3fec2dacd1d2cb7f6" + dependencies: + lodash "^4.5.0" + +combine-source-map@~0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +commander@2.11.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commander@2.14.1, commander@2.14.x, commander@^2.12.1, commander@^2.9.0, commander@~2.14.1: + version "2.14.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +common-tags@^1.3.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.7.2.tgz#24d9768c63d253a56ecff93845b44b4df1d52771" + dependencies: + babel-runtime "^6.26.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + +component-emitter@1.2.1, component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + +compressible@~2.0.13: + version "2.0.13" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" + dependencies: + mime-db ">= 1.33.0 < 2" + +compression@^1.5.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + dependencies: + 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" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0, concat-stream@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.1.tgz#261b8f518301f1d834e36342b9fea095d2620a26" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@~1.5.0, concat-stream@~1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +connect@3.4.x: + version "3.4.1" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.4.1.tgz#a21361d3f4099ef761cda6dc4a973bb1ebb0a34d" + dependencies: + debug "~2.2.0" + finalhandler "0.4.1" + parseurl "~1.3.1" + utils-merge "1.0.0" + +connect@^3.6.0: + version "3.6.6" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + dependencies: + debug "2.6.9" + finalhandler "1.1.0" + parseurl "~1.3.2" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0, constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.5.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + 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@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +copy-webpack-plugin@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.0.tgz#9cb012163317666ea47479d2a8c57daca3557da5" + dependencies: + cacache "^10.0.1" + 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" + +copy-webpack-plugin@~4.4.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.4.3.tgz#65d56fb9e1936b39e129f9aa2aec097ce1fd44be" + dependencies: + cacache "^10.0.1" + 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@^2.2.0, core-js@^2.4.0, core-js@^2.4.1: + version "2.5.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + +core-js@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.3.0.tgz#fab83fbb0b2d8dc85fa636c4b9d34c75420c6d65" + +core-object@^3.1.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/core-object/-/core-object-3.1.5.tgz#fa627b87502adc98045e44678e9a8ec3b9c0d2a9" + dependencies: + chalk "^2.0.0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cors@latest: + version "2.8.4" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" + dependencies: + object-assign "^4" + vary "^1" + +corser@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" + +cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + dependencies: + 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" + +create-ecdh@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + 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-env@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.1.3.tgz#f8ae18faac87692b0a8b4d2f7000d4ec3a85dfd7" + dependencies: + cross-spawn "^5.1.0" + is-windows "^1.0.0" + +cross-spawn@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + 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" + +csextends@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/csextends/-/csextends-1.1.1.tgz#cc53c1349faf7f0ae6cdf6f6c4a4d9156d3c4ec1" + dependencies: + coffee-script "^1.12.5" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.28.10: + version "0.28.10" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.10.tgz#40282e79230f7bcb4e483efa631d670b735ebf42" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-parse@1.7.x: + version "1.7.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" + +css-select@^1.1.0, css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssauron@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + dependencies: + through X.X.X + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +data-uri-to-buffer@1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-1.2.0.tgz#77163ea9c20d8641b4707e8f18abdf9a78f34835" + +date-format@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^1.0.6: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +debug@*, debug@^3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@2, debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@~2.6.4, debug@~2.6.6: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +degenerator@~1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-1.0.4.tgz#fcf490a37ece266464d9cc431ab98c5819ced095" + dependencies: + ast-types "0.x.x" + escodegen "1.x.x" + esprima "3.x.x" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + 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" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + 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" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +deps-sort@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + dependencies: + JSONStream "^1.0.3" + shasum "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-node@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + +detective@^4.0.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + dependencies: + acorn "^5.2.1" + defined "^1.0.0" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + +diff@^3.1.0, diff@^3.2.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +domain-browser@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domhandler@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domino@^1.0.29: + version "1.0.30" + resolved "https://registry.yarnpkg.com/domino/-/domino-1.0.30.tgz#54a4154ecae968616680f8feba3cedff355c71f4" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/dot/-/dot-1.1.2.tgz#c7377019fc4e550798928b2b9afeb66abfa1f2f9" + +double-ended-queue@^2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + dependencies: + readable-stream "^2.0.2" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +duplexify@^3.4.2, duplexify@^3.5.3: + version "3.5.4" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +eachr@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eachr/-/eachr-3.2.0.tgz#2c35e43ea086516f7997cf80b7aa64d55a4a4484" + dependencies: + editions "^1.1.1" + typechecker "^4.3.0" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ecstatic@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ecstatic/-/ecstatic-3.2.0.tgz#1b1aee1ca7c6b99cfb5cf6c9b26b481b90c4409f" + dependencies: + he "^1.1.1" + mime "^1.4.1" + minimist "^1.1.0" + url-join "^2.0.2" + +editions@^1.1.1, editions@^1.3.3, editions@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.5.7: + version "2.5.7" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: + version "1.3.36" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz#0eabf71a9ebea9013fb1cc35a390e068624f27e8" + +elliptic@^6.0.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + 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" + +ember-cli-string-utils@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ember-cli-string-utils/-/ember-cli-string-utils-1.1.0.tgz#39b677fc2805f55173735376fcef278eaa4452a1" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.1, encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +engine.io-client@~3.1.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.5.tgz#85de17666560327ef1817978f6e3f8101ded2c47" + dependencies: + 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" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.2.tgz#4c0f4cff79aaeecbbdcfdea66a823c6085409196" + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.4" + has-binary2 "~1.0.2" + +engine.io@~3.1.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.5.tgz#0e7ef9d690eb0b35597f1d4ad02a26ca2dba3845" + dependencies: + 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" + optionalDependencies: + uws "~9.14.0" + +enhanced-resolve@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.3.0.tgz#950964ecc7f0332a42321b673b38dc8ff15535b3" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.5" + +enhanced-resolve@^3.1.0, enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +errno@^0.1.1, errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + 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@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.39" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +escodegen@1.x.x: + version "1.9.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@3.x.x, esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +estree-walker@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +event-stream@latest, event-stream@~3.3.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +eventemitter3@1.x.x: + version "1.2.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" + +events@^1.0.0, events@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-braces@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/expand-braces/-/expand-braces-0.1.2.tgz#488b1d1d2451cb3d3a6b192cfc030f44c5855fea" + dependencies: + array-slice "^0.2.3" + array-unique "^0.2.1" + braces "^0.1.2" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + 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" + +expand-range@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-0.1.1.tgz#4cb8eda0993ca56fa4f41fc42f3cbb4ccadff044" + dependencies: + is-number "^0.1.1" + repeat-string "^0.2.2" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +exports-loader@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/exports-loader/-/exports-loader-0.7.0.tgz#84881c784dea6036b8e1cd1dac3da9b6409e21a5" + dependencies: + loader-utils "^1.1.0" + source-map "0.5.0" + +expose-loader@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.4.tgz#9bcdd3878b5da9107930b55a03f65afe90b3314a" + +express@^4.16.2: + version "4.16.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + dependencies: + accepts "~1.3.4" + 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.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.0" + 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.2" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.1" + serve-static "1.13.1" + setprototypeof "1.1.0" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" + dependencies: + kind-of "^1.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@3, extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extendr@^3.2.0, extendr@^3.2.2: + version "3.3.0" + resolved "https://registry.yarnpkg.com/extendr/-/extendr-3.3.0.tgz#6a61ad3ad8b9b03afa561696c48bef47de053e37" + dependencies: + editions "^1.3.3" + typechecker "^4.4.1" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + 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" + +extract-opts@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/extract-opts/-/extract-opts-3.3.1.tgz#5abbedc98c0d5202e3278727f9192d7e086c6be1" + dependencies: + eachr "^3.2.0" + editions "^1.1.1" + typechecker "^4.3.0" + +extract-text-webpack-plugin@^3.0.2, extract-text-webpack-plugin@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + webpack-sources "^1.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fancy-log@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" + dependencies: + ansi-gray "^0.1.1" + color-support "^1.1.3" + time-stamp "^1.0.0" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-glob@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.1.0.tgz#50ee95e6a112f09e886cfff5215de69ca4a6a861" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.8" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@0.11.x, faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +file-loader@^1.1.5, file-loader@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +file-uri-to-path@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.1.tgz#85a17c6c59a94717d262d61230d4b0ebe3d4a14d" + dependencies: + debug "~2.2.0" + escape-html "~1.0.3" + on-finished "~2.3.0" + unpipe "~1.0.0" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + dependencies: + 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" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-root@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +findit2@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/findit2/-/findit2-2.2.3.tgz#58a466697df8a6205cdfdbf395536b8bd777a5f6" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +flush-write-stream@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +follow-redirects@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.0.0.tgz#8e34298cbd2e176f254effec75a1c78cc849fd37" + dependencies: + debug "^2.2.0" + +for-in@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.0.0.tgz#6f0aebadcc5da16c13e1ecc11137d85f9b883b25" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.11" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-access@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fs-access/-/fs-access-1.0.1.tgz#d6a87f262271cefebec30c553407fb995da8777a" + dependencies: + null-check "^1.0.0" + +fs-extra@^4.0.0, fs-extra@^4.0.1, fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.39" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +ftp@~0.3.10: + version "0.3.10" + resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" + dependencies: + readable-stream "1.1.x" + xregexp "2.0.0" + +function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + 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@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.2.tgz#847224677adb8870d679257ed3388fdb61e40105" + dependencies: + globule "^1.0.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-caller-file@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-uri@2: + version "2.0.1" + resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-2.0.1.tgz#dbdcacacd8c608a38316869368117697a1631c59" + dependencies: + data-uri-to-buffer "1" + debug "2" + extend "3" + file-uri-to-path "1" + ftp "~0.3.10" + readable-stream "2" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +gh-pages@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-1.1.0.tgz#738134d8e35e5323b39892cda28b8904e85f24b2" + dependencies: + async "2.6.0" + base64url "^2.0.0" + commander "2.11.0" + fs-extra "^4.0.2" + globby "^6.1.0" + graceful-fs "4.1.11" + rimraf "^2.6.2" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@7.0.x: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + 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" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + 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" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + 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" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + 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" + +globby@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globule@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.0.tgz#1dc49c6822dd9e8a2fa00ba2a295006e8664bd09" + dependencies: + glob "~7.1.1" + lodash "~4.17.4" + minimatch "~3.0.2" + +graceful-fs@*, graceful-fs@4.1.11, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +handlebars@^4.0.1, handlebars@^4.0.11, handlebars@^4.0.6: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + dependencies: + chalk "^1.1.1" + commander "^2.9.0" + is-my-json-valid "^2.12.4" + pinkie-promise "^2.0.0" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +he@1.1.x, he@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +highlight.js@^9.0.0: + version "9.12.0" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + +hipchat-notifier@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz#b6d249755437c191082367799d3ba9a0f23b231e" + dependencies: + lodash "^4.0.0" + request "^2.0.0" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-entities@^1.2.0, html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +html-minifier@^3.2.3: + version "3.5.10" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.10.tgz#8522c772c388db81aa5c26f62033302d906ea1c7" + dependencies: + camel-case "3.0.x" + clean-css "4.1.x" + commander "2.14.x" + he "1.1.x" + ncname "1.0.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.3.x" + +html-webpack-plugin@^2.29.0, html-webpack-plugin@^2.30.1: + version "2.30.1" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.30.1.tgz#7f9c421b7ea91ec460f56527d78df484ee7537d5" + dependencies: + bluebird "^3.4.7" + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + toposort "^1.0.0" + +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + +htmlparser2@^3.9.1: + version "3.9.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-auth@2.4.x: + version "2.4.11" + resolved "https://registry.yarnpkg.com/http-auth/-/http-auth-2.4.11.tgz#61f024a6e0e7c48934944895c87a1395509c619b" + dependencies: + apache-crypt "1.1.2" + apache-md5 "1.0.6" + node-uuid "^1.4.7" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-parser-js@>=0.4.0: + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + +http-proxy-agent@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-1.0.0.tgz#cc1ce38e453bf984a0f7702d2dd59c73d081284a" + dependencies: + agent-base "2" + debug "2" + extend "3" + +http-proxy-middleware@~0.17.4: + version "0.17.4" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" + dependencies: + http-proxy "^1.16.2" + is-glob "^3.1.0" + lodash "^4.17.2" + micromatch "^2.3.11" + +http-proxy@^1.13.0, http-proxy@^1.16.2, http-proxy@^1.8.1: + version "1.16.2" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" + dependencies: + eventemitter3 "1.x.x" + requires-port "1.x.x" + +http-server@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/http-server/-/http-server-0.11.1.tgz#2302a56a6ffef7f9abea0147d838a5e9b6b6a79b" + dependencies: + colors "1.0.3" + corser "~2.0.0" + ecstatic "^3.0.0" + http-proxy "^1.8.1" + opener "~1.4.0" + optimist "0.6.x" + portfinder "^1.0.13" + union "~0.4.3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +httpntlm@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/httpntlm/-/httpntlm-1.6.1.tgz#ad01527143a2e8773cfae6a96f58656bb52a34b2" + dependencies: + httpreq ">=0.4.22" + underscore "~1.7.0" + +httpreq@>=0.4.22: + version "0.4.24" + resolved "https://registry.yarnpkg.com/httpreq/-/httpreq-0.4.24.tgz#4335ffd82cd969668a39465c929ac61d6393627f" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +https-proxy-agent@1, https-proxy-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-1.0.0.tgz#35f7da6c48ce4ddbfa264891ac593ee5ff8671e6" + dependencies: + agent-base "2" + debug "2" + extend "3" + +iconv-lite@0.4.15: + version "0.4.15" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + +ie-shim@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ie-shim/-/ie-shim-0.1.0.tgz#d329de228e7dfe656feaea3e20748ef095363c5d" + +ieee754@^1.1.4: + version "1.1.8" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore@^3.3.5: + version "3.3.7" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + +ignorefs@^1.0.0, ignorefs@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ignorefs/-/ignorefs-1.2.0.tgz#da59fb858976e4a5e43702ccd1f282fdbc9e5756" + dependencies: + editions "^1.3.3" + ignorepatterns "^1.1.0" + +ignorepatterns@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ignorepatterns/-/ignorepatterns-1.1.0.tgz#ac8f436f2239b5dfb66d5f0d3a904a87ac67cc5e" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imports-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.8.0.tgz#030ea51b8ca05977c40a3abfd9b4088fe0be9a69" + dependencies: + loader-utils "^1.0.2" + source-map "^0.6.1" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +in-publish@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflection@~1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.10.0.tgz#5bffcb1197ad3e81050f8e17e21668087ee9eb2f" + +inflection@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.3.8.tgz#cbd160da9f75b14c3cc63578d4f396784bf3014e" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inline-manifest-webpack-plugin@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/inline-manifest-webpack-plugin/-/inline-manifest-webpack-plugin-3.0.1.tgz#ca2151063115298e2fd94b669ab76c7dd63e44ad" + dependencies: + source-map-url "0.4.0" + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + dependencies: + source-map "~0.5.3" + +insert-module-globals@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.2.tgz#012c56baa7d3307a8b417d4ec5270cf9741c18f4" + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.7.1" + concat-stream "~1.5.1" + is-buffer "^1.1.0" + lexical-scope "^1.2.0" + process "~0.11.0" + through2 "^2.0.0" + xtend "^4.0.0" + +internal-ip@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" + dependencies: + meow "^3.3.0" + +interpret@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +invariant@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" + dependencies: + loose-envify "^1.0.0" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + +ip@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.0.1.tgz#c7e356cdea225ae71b36d70f2e71a92ba4e42590" + +ip@^1.1.0, ip@^1.1.2, ip@^1.1.4, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.0, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-my-ip-valid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + +is-my-json-valid@^2.12.4: + version "2.17.2" + resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + dependencies: + 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@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-0.1.1.tgz#69a7af116963d47206ec9bd9b48a14216f1e3806" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-odd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + dependencies: + is-number "^4.0.0" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^1.0.0, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@0.0.1, isarray@~0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + +isbinaryfile@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.2.tgz#4a3e974ec0cba9004d3fc6cde7209ea69368a621" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-instrumenter-loader@^3.0.0, istanbul-instrumenter-loader@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.0.tgz#9f553923b22360bac95e617aaba01add1f7db0b2" + dependencies: + convert-source-map "^1.5.0" + istanbul-lib-instrument "^1.7.3" + loader-utils "^1.1.0" + schema-utils "^0.3.0" + +istanbul-lib-coverage@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" + +istanbul-lib-instrument@^1.7.3: + version "1.9.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" + dependencies: + 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.1.2" + semver "^5.3.0" + +istanbul@0.4.5, istanbul@^0.4.0: + version "0.4.5" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.4.5.tgz#65c7d73d4c4da84d4f3ac310b918fb0b8033733b" + dependencies: + 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" + +jasmine-core@^2.99.1: + version "2.99.1" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.99.1.tgz#e6400df1e6b56e130b61c4bcd093daa7f6e8ca15" + +jasmine-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + +js-base64@^2.1.8, js-base64@^2.1.9: + version "2.4.3" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@3.x, js-yaml@^3.4.3, js-yaml@^3.7.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + +json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@5.0.x, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.1.5" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.5.tgz#e3c2a6c6d706ac6e603314036d43cd40beefdf37" + dependencies: + core-js "~2.3.0" + es6-promise "~3.0.2" + lie "~3.1.0" + pako "~1.0.2" + readable-stream "~2.0.6" + +karma-chrome-launcher@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz#cf1b9d07136cc18fe239327d24654c3dbc368acf" + dependencies: + fs-access "^1.0.0" + which "^1.2.1" + +karma-coverage@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage/-/karma-coverage-1.1.1.tgz#5aff8b39cf6994dc22de4c84362c76001b637cf6" + dependencies: + dateformat "^1.0.6" + istanbul "^0.4.0" + lodash "^3.8.0" + minimatch "^3.0.0" + source-map "^0.5.1" + +karma-jasmine@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-1.1.1.tgz#6fe840e75a11600c9d91e84b33c458e1c46a3529" + +karma-mocha-reporter@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz#15120095e8ed819186e47a0b012f3cd741895560" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + strip-ansi "^4.0.0" + +karma-remap-coverage@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/karma-remap-coverage/-/karma-remap-coverage-0.1.5.tgz#d2e3bb2dd00adcd256603a702b08c371370fbc12" + dependencies: + remap-istanbul "^0.10" + +karma-source-map-support@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz#1bf81e7bb4b089627ab352ec4179e117c406a540" + dependencies: + source-map-support "^0.4.1" + +karma-sourcemap-loader@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.7.tgz#91322c77f8f13d46fed062b042e1009d4c4505d8" + dependencies: + graceful-fs "^4.1.2" + +karma-webpack@^2.0.11: + version "2.0.13" + resolved "https://registry.yarnpkg.com/karma-webpack/-/karma-webpack-2.0.13.tgz#cf56e3056c15b7747a0bb2140fc9a6be41dd9f02" + dependencies: + async "^2.0.0" + babel-runtime "^6.0.0" + loader-utils "^1.0.0" + lodash "^4.0.0" + source-map "^0.5.6" + webpack-dev-middleware "^1.12.0" + +karma@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/karma/-/karma-2.0.0.tgz#a02698dd7f0f05ff5eb66ab8f65582490b512e58" + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + browserify "^14.5.0" + 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 "^4.17.4" + log4js "^2.3.9" + 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 "2.0.4" + source-map "^0.6.1" + tmp "0.0.33" + useragent "^2.1.12" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +labeled-stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" + dependencies: + inherits "^2.0.1" + isarray "~0.0.1" + stream-splicer "^2.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lazy-cache@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + dependencies: + set-getter "^0.1.0" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + +less-loader@^4.0.5: + version "4.0.6" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-4.0.6.tgz#7bcfbb9053181c18d57e213e87346958e02b2769" + dependencies: + clone "^2.1.1" + loader-utils "^1.1.0" + pify "^3.0.0" + +less@^2.7.2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/less/-/less-2.7.3.tgz#cc1260f51c900a9ec0d91fb6998139e02507b63b" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.2.11" + mkdirp "^0.5.0" + promise "^7.1.1" + request "2.81.0" + source-map "^0.5.3" + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +lexical-scope@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + dependencies: + astw "^2.0.0" + +libbase64@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/libbase64/-/libbase64-0.1.0.tgz#62351a839563ac5ff5bd26f12f60e9830bb751e6" + +libmime@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/libmime/-/libmime-3.0.0.tgz#51a1a9e7448ecbd32cda54421675bb21bc093da6" + dependencies: + iconv-lite "0.4.15" + libbase64 "0.1.0" + libqp "1.1.0" + +libqp@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/libqp/-/libqp-1.1.0.tgz#f5e6e06ad74b794fb5b5b66988bf728ef1dedbe8" + +license-webpack-plugin@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-1.2.3.tgz#170272565db467d692ca782e4a6ad90cf81553ec" + dependencies: + ejs "^2.5.7" + +lie@~3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + dependencies: + immediate "~3.0.5" + +live-server@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/live-server/-/live-server-1.1.0.tgz#a69f0e6ca581e0391aa57941970e17c308dd4869" + dependencies: + colors latest + connect "3.4.x" + cors latest + event-stream latest + faye-websocket "0.11.x" + http-auth "2.4.x" + morgan "^1.6.1" + object-assign latest + opn latest + proxy-middleware latest + send latest + serve-index "^1.7.2" + watchr "2.6.x" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@1.1.0, loader-utils@^1.0.0, loader-utils@^1.0.1, loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +loader-utils@^0.2.15, loader-utils@^0.2.16, loader-utils@~0.2.2: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.clonedeep@^4.3.2, lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isplainobject@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" + dependencies: + lodash._basefor "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.istypedarray@^3.0.0: + version "3.0.6" + resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.keysin@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + +lodash.merge@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._createassigner "^3.0.0" + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.isplainobject "^3.0.0" + lodash.istypedarray "^3.0.0" + lodash.keys "^3.0.0" + lodash.keysin "^3.0.0" + lodash.toplainobject "^3.0.0" + +lodash.mergewith@^4.6.0: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.tail@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.tail/-/lodash.tail-4.1.1.tgz#d2333a36d9e7717c8ad2f7cacafec7c32b444664" + +lodash.toplainobject@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@^3.8.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0, lodash@~4.17.4: + version "4.17.5" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log4js@^2.3.9: + version "2.5.3" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-2.5.3.tgz#38bb7bde5e9c1c181bd75e8bc128c5cd0409caf1" + dependencies: + circular-json "^0.5.1" + date-format "^1.2.0" + debug "^3.1.0" + semver "^5.3.0" + streamroller "^0.7.0" + optionalDependencies: + amqplib "^0.5.2" + axios "^0.15.3" + hipchat-notifier "^1.1.0" + loggly "^1.1.0" + mailgun-js "^0.7.0" + nodemailer "^2.5.0" + redis "^2.7.1" + slack-node "~0.2.0" + +loggly@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/loggly/-/loggly-1.1.1.tgz#0a0fc1d3fa3a5ec44fdc7b897beba2a4695cebee" + dependencies: + json-stringify-safe "5.0.x" + request "2.75.x" + timespan "2.3.x" + +loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + +loglevelnext@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0, loud-rejection@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lru-cache@4.1.x, lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@~2.6.5: + version "2.6.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.6.5.tgz#e56d6354148ede8d7707b58d143220fd08df0fd5" + +lunr@2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.1.6.tgz#671d2321c4c5bc4c522914953d1c54d612f60aa7" + +macaddress@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" + +macos-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" + +magic-string@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.16.0.tgz#970ebb0da7193301285fb1aa650f39bdd81eb45a" + dependencies: + vlq "^0.2.1" + +magic-string@^0.22.3: + version "0.22.4" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" + dependencies: + vlq "^0.2.1" + +mailcomposer@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/mailcomposer/-/mailcomposer-4.0.1.tgz#0e1c44b2a07cf740ee17dc149ba009f19cadfeb4" + dependencies: + buildmail "4.0.1" + libmime "3.0.0" + +mailgun-js@^0.7.0: + version "0.7.15" + resolved "https://registry.yarnpkg.com/mailgun-js/-/mailgun-js-0.7.15.tgz#ee366a20dac64c3c15c03d6c1b3e0ed795252abb" + dependencies: + async "~2.1.2" + debug "~2.2.0" + form-data "~2.1.1" + inflection "~1.10.0" + is-stream "^1.1.0" + path-proxy "~1.0.0" + proxy-agent "~2.0.0" + q "~1.4.0" + tsscmp "~1.0.0" + +make-dir@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + dependencies: + pify "^3.0.0" + +make-error@^1.1.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.4.tgz#19978ed575f9e9545d2ff8c13e33b5d18a67d535" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +marked@^0.3.12, marked@^0.3.17: + version "0.3.17" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.17.tgz#607f06668b3c6b1246b28f13da76116ac1aa2d2b" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +memory-fs@^0.4.0, memory-fs@^0.4.1, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + +meow@^3.3.0, meow@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + 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" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge2@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.1.tgz#271d2516ff52d4af7f7b710b8bf3e16e183fef66" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5, micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + 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" + +micromatch@^3.0.3, micromatch@^3.1.3, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + dependencies: + 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.1" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + +mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + dependencies: + mime-db "~1.33.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mime@^1.2.11, mime@^1.3.4, mime@^1.4.1, mime@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + +mime@^2.0.3, mime@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.0.tgz#161e541965551d3b549fa1114391e3a3d55b923b" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + 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@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixin-object@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" + dependencies: + for-in "^0.1.3" + is-extendable "^0.1.1" + +mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +module-deps@^4.0.8: + version "4.1.1" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-4.1.1.tgz#23215833f1da13fd606ccb8087b44852dcb821fd" + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.0" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.1.3" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + +morgan@^1.6.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" + dependencies: + basic-auth "~2.0.0" + debug "2.6.9" + depd "~1.1.1" + on-finished "~2.3.0" + on-headers "~1.0.1" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + 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@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multimatch@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + +nan@^2.3.0, nan@^2.3.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" + +nanomatch@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-odd "^2.0.0" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +ncname@1.0.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + dependencies: + xml-char-classes "^1.0.0" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + +netmask@~1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/netmask/-/netmask-1.0.6.tgz#20297e89d86f6f6400f250d9f4f6b4c1945fcd35" + +ngc-webpack@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/ngc-webpack/-/ngc-webpack-4.1.2.tgz#1f28e0baab8af34d079cda4141145396d627daa0" + dependencies: + "@types/minimist" "^1.2.0" + loader-utils "^1.1.0" + magic-string "^0.22.3" + minimist "^1.2.0" + reflect-metadata "^0.1.10" + resolve "^1.5.0" + semver "^5.4.1" + source-map "^0.5.6" + ts-node "^3.2.0" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + +node-forge@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" + +node-gyp@^3.3.1: + version "3.6.2" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + dependencies: + fstream "^1.0.0" + glob "^7.0.3" + graceful-fs "^4.1.2" + minimatch "^3.0.2" + mkdirp "^0.5.0" + nopt "2 || 3" + npmlog "0 || 1 || 2 || 3 || 4" + osenv "0" + request "2" + rimraf "2" + semver "~5.3.0" + tar "^2.0.0" + which "1" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + 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.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.3" + vm-browserify "0.0.4" + +node-modules-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/node-modules-path/-/node-modules-path-1.0.1.tgz#40096b08ce7ad0ea14680863af449c7c75a5d1c8" + +node-pre-gyp@^0.6.39: + version "0.6.39" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-sass@^4.7.2: + version "4.7.2" + resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e" + dependencies: + 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.3.2" + 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" + +node-uuid@^1.4.7, node-uuid@~1.4.7: + version "1.4.8" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + +nodemailer-direct-transport@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz#e96fafb90358560947e569017d97e60738a50a86" + dependencies: + nodemailer-shared "1.1.0" + smtp-connection "2.12.0" + +nodemailer-fetch@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz#79c4908a1c0f5f375b73fe888da9828f6dc963a4" + +nodemailer-shared@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz#cf5994e2fd268d00f5cf0fa767a08169edb07ec0" + dependencies: + nodemailer-fetch "1.6.0" + +nodemailer-smtp-pool@2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz#2eb94d6cf85780b1b4725ce853b9cbd5e8da8c72" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-smtp-transport@2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz#03d71c76314f14ac7dbc7bf033a6a6d16d67fb77" + dependencies: + nodemailer-shared "1.1.0" + nodemailer-wellknown "0.1.10" + smtp-connection "2.12.0" + +nodemailer-wellknown@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz#586db8101db30cb4438eb546737a41aad0cf13d5" + +nodemailer@^2.5.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-2.7.2.tgz#f242e649aeeae39b6c7ed740ef7b061c404d30f9" + dependencies: + libmime "3.0.0" + mailcomposer "4.0.1" + nodemailer-direct-transport "3.3.2" + nodemailer-shared "1.1.0" + nodemailer-smtp-pool "2.8.2" + nodemailer-smtp-transport "2.7.2" + socks "1.1.9" + +"nopt@2 || 3", nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + 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@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-run-all@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" + dependencies: + ansi-styles "^3.2.0" + chalk "^2.1.0" + cross-spawn "^5.1.0" + memorystream "^0.3.1" + minimatch "^3.0.4" + ps-tree "^1.1.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +null-check@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/null-check/-/null-check-1.0.0.tgz#977dffd7176012b9ec30d2a39db5cf72a0439edd" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1, object-assign@latest: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +object.values@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.6.1" + function-bind "^1.1.0" + has "^1.0.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@1.x, once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +opener@~1.4.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + +opn@^5.1.0, opn@latest: + version "5.2.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + dependencies: + is-wsl "^1.1.0" + +opn@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.1.0.tgz#72ce2306a17dbea58ff1041853352b4a8fc77519" + dependencies: + is-wsl "^1.1.0" + +optimist@0.6.x, optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optimize-js-plugin@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/optimize-js-plugin/-/optimize-js-plugin-0.0.4.tgz#69e7a67e0f66c69f7fc0c7b25c5d33b2db6c2817" + dependencies: + optimize-js "^1.0.0" + webpack-sources "^0.1.2" + +optimize-js@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/optimize-js/-/optimize-js-1.0.3.tgz#4326af8657c4a5ff32daf726631754f72ab7fdbc" + dependencies: + acorn "^3.3.0" + concat-stream "^1.5.1" + estree-walker "^0.3.0" + magic-string "^0.16.0" + yargs "^4.8.1" + +optionator@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + 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@>=0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f" + +original@>=0.0.5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + dependencies: + url-parse "1.0.x" + +os-browserify@^0.3.0, os-browserify@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" + dependencies: + macos-release "^1.0.0" + win-release "^1.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@0, osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.0.0, p-limit@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +pac-proxy-agent@1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-1.1.0.tgz#34a385dfdf61d2f0ecace08858c745d3e791fd4d" + dependencies: + agent-base "2" + debug "2" + extend "3" + get-uri "2" + http-proxy-agent "1" + https-proxy-agent "1" + pac-resolver "~2.0.0" + raw-body "2" + socks-proxy-agent "2" + +pac-resolver@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-2.0.0.tgz#99b88d2f193fbdeefc1c9a529c1f3260ab5277cd" + dependencies: + co "~3.0.6" + degenerator "~1.0.2" + ip "1.0.1" + netmask "~1.0.4" + thunkify "~2.1.1" + +pako@~1.0.2, pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + dependencies: + path-platform "~0.11.15" + +parse-asn1@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + 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@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parse5@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + dependencies: + "@types/node" "*" + +parse5@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.1, parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0, path-browserify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + +path-proxy@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-proxy/-/path-proxy-1.0.0.tgz#18e8a36859fc9d2f1a53b48dee138543c020de5e" + dependencies: + inflection "~1.3.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + dependencies: + pify "^2.0.0" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pbkdf2@^3.0.3: + version "3.0.14" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + 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@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +plugin-error@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" + dependencies: + ansi-cyan "^0.1.1" + ansi-red "^0.1.1" + arr-diff "^1.0.1" + arr-union "^2.0.1" + extend-shallow "^1.1.2" + +portfinder@^1.0.13, portfinder@^1.0.9, portfinder@~1.0.12: + version "1.0.13" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + dependencies: + postcss "^5.0.4" + uniqid "^4.0.0" + +postcss-import@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/postcss-import/-/postcss-import-11.1.0.tgz#55c9362c9192994ec68865d224419df1db2981f0" + dependencies: + postcss "^6.0.1" + postcss-value-parser "^3.2.3" + read-cache "^1.0.0" + resolve "^1.1.7" + +postcss-load-config@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + postcss-load-options "^1.2.0" + postcss-load-plugins "^2.3.0" + +postcss-load-options@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + dependencies: + cosmiconfig "^2.1.0" + object-assign "^4.1.0" + +postcss-load-plugins@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + dependencies: + cosmiconfig "^2.1.1" + object-assign "^4.1.0" + +postcss-loader@^2.0.10: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.1.tgz#208935af3b1d65e1abb1a870a912dd12e7b36895" + dependencies: + loader-utils "^1.1.0" + postcss "^6.0.0" + postcss-load-config "^1.2.0" + schema-utils "^0.4.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-url@^7.1.2: + version "7.3.1" + resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-7.3.1.tgz#b43ae0f0dae4cd06c831fa3aeac2d7a5b73754ed" + dependencies: + mime "^1.4.1" + minimatch "^3.0.4" + mkdirp "^0.5.0" + postcss "^6.0.1" + xxhashjs "^0.2.1" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.16, postcss@^6.0.17: + version "6.0.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" + dependencies: + chalk "^2.3.1" + source-map "^0.6.1" + supports-color "^5.2.0" + +preload-webpack-plugin@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/preload-webpack-plugin/-/preload-webpack-plugin-2.3.0.tgz#2923d8caff44dead93d1fe5eaab31f3b18ca0de9" + dependencies: + object-assign "^4.1.1" + object.values "^1.0.4" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10, process@~0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +protractor@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.3.0.tgz#5df98201cbdaeb50826af6d05630ef1945bf9c32" + dependencies: + "@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.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "~1.3.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "^1.0.0" + webdriver-manager "^12.0.6" + +proxy-addr@~2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.6.0" + +proxy-agent@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-2.0.0.tgz#57eb5347aa805d74ec681cb25649dba39c933499" + dependencies: + agent-base "2" + debug "2" + extend "3" + http-proxy-agent "1" + https-proxy-agent "1" + lru-cache "~2.6.5" + pac-proxy-agent "1" + socks-proxy-agent "2" + +proxy-middleware@latest: + version "0.15.0" + resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +ps-tree@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + 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@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + dependencies: + duplexify "^3.5.3" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@1.4.1, punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@1.4.1, q@~1.4.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + +q@^1.1.2, q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + +qs@6.5.1, qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-2.3.3.tgz#e9e85adbe75da0bbe4c8e0476a086290f863b404" + +qs@~6.2.0: + version "6.2.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" + +qs@~6.3.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0, querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +querystringify@0.0.x: + version "0.0.4" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" + +querystringify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@^1.2.0, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2, raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +raw-loader@0.5.1, raw-loader@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + +rc@^1.1.7: + version "1.2.5" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-cache@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + dependencies: + pify "^2.3.0" + +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + dependencies: + readable-stream "^2.0.2" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@1 || 2", readable-stream@2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.3: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" + dependencies: + 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.0.3" + util-deprecate "~1.0.1" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@1.1.x, "readable-stream@1.x >=1.1.9": + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.0.0, readable-stream@~2.0.5, readable-stream@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + dependencies: + 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" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + dependencies: + resolve "^1.1.6" + +redent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +redis-commands@^1.2.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.5.tgz#4495889414f1e886261180b1442e7295602d83a2" + +redis-parser@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" + +redis@^2.7.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" + dependencies: + double-ended-queue "^2.1.0-0" + redis-commands "^1.2.0" + redis-parser "^2.6.0" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +reflect-metadata@^0.1.10, reflect-metadata@^0.1.12, reflect-metadata@^0.1.2: + version "0.1.12" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.12.tgz#311bf0c6b63cd782f228a81abe146a2bfa9c56f2" + +regenerate@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +remap-istanbul@^0.10: + version "0.10.1" + resolved "https://registry.yarnpkg.com/remap-istanbul/-/remap-istanbul-0.10.1.tgz#3aa58dd5021d499f336d3ba5bf3bbb91c1b88e37" + dependencies: + amdefine "^1.0.0" + istanbul "0.4.5" + minimatch "^3.0.3" + plugin-error "^0.1.2" + source-map "^0.6.1" + through2 "2.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-0.2.2.tgz#c7a8d3236068362059a7e4651fc6884e8b1fb4ae" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2, request@^2.0.0, request@^2.74.0, request@^2.78.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +request@2.75.x: + version "2.75.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.75.0.tgz#d2b8268a286da13eaa5d01adf5d18cc90f657d93" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + bl "~1.1.2" + caseless "~0.11.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.0.0" + 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" + node-uuid "~1.4.7" + oauth-sign "~0.8.1" + qs "~6.2.0" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "~0.4.1" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@~2.79.0: + version "2.79.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + dependencies: + 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" + +requestretry@^1.2.2: + version "1.13.0" + resolved "https://registry.yarnpkg.com/requestretry/-/requestretry-1.13.0.tgz#213ec1006eeb750e8b8ce54176283d15a8d55d94" + dependencies: + extend "^3.0.0" + lodash "^4.15.0" + request "^2.74.0" + when "^3.7.7" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@1.1.7, resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@~2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +rxjs@^5.5.6: + version "5.5.6" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.6.tgz#e31fb96d6fd2ff1fd84bcea8ae9c02d007179c02" + dependencies: + symbol-observable "1.0.1" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +safefs@^3.1.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/safefs/-/safefs-3.2.2.tgz#8170c1444d7038e08caea05a374fae2fa349e15c" + dependencies: + graceful-fs "*" + +safefs@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/safefs/-/safefs-4.1.0.tgz#f82aeb4bdd7ae51f653eb20f6728b3058c8d6445" + dependencies: + editions "^1.1.1" + graceful-fs "^4.1.4" + +sass-graph@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" + dependencies: + glob "^7.0.0" + lodash "^4.0.0" + scss-tokenizer "^0.2.3" + yargs "^7.0.0" + +sass-loader@^6.0.6: + version "6.0.7" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-6.0.7.tgz#dd2fdb3e7eeff4a53f35ba6ac408715488353d00" + dependencies: + 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@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.3.0.tgz#d240e8009df7fa87306ec4578a69ba3b5c424fee" + dependencies: + https-proxy-agent "^1.0.0" + +sax@0.5.x: + version "0.5.8" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + +sax@0.6.x: + version "0.6.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.6.1.tgz#563b19c7c1de892e09bfc4f2fc30e3c27f0952b9" + +sax@>=0.6.0, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +scandirectory@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/scandirectory/-/scandirectory-2.5.0.tgz#6ce03f54a090b668e3cbedbf20edf9e310593e72" + dependencies: + ignorefs "^1.0.0" + safefs "^3.1.2" + taskgroup "^4.0.5" + +schema-utils@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + dependencies: + ajv "^5.0.0" + +schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +script-ext-html-webpack-plugin@^1.8.8: + version "1.8.8" + resolved "https://registry.yarnpkg.com/script-ext-html-webpack-plugin/-/script-ext-html-webpack-plugin-1.8.8.tgz#faa888a286ce746fcd06a5e0a9e39ed7b9d24f66" + dependencies: + debug "^3.1.0" + +scss-tokenizer@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" + dependencies: + js-base64 "^2.1.8" + source-map "^0.4.2" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selenium-webdriver@3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +selenium-webdriver@^2.53.2: + version "2.53.3" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz#d29ff5a957dff1a1b49dc457756e4e4bfbdce085" + dependencies: + adm-zip "0.4.4" + rimraf "^2.2.8" + tmp "0.0.24" + ws "^1.0.1" + xml2js "0.4.4" + +selfsigned@^1.9.1: + version "1.10.2" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + dependencies: + node-forge "0.7.1" + +semver-dsl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + dependencies: + semver "^5.3.0" + +semver-intersect@^1.1.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/semver-intersect/-/semver-intersect-1.3.1.tgz#8fa84a9e1028bd239e4530d1a3e181e698d884ba" + dependencies: + semver "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.0.1, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + +semver@~5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.0.3.tgz#77466de589cd5d3c95f138aa78bc569a3cb5d27a" + +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + 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" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +send@latest: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + 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.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serialize-javascript@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-getter@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + dependencies: + to-object-path "^0.3.0" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + 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.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: + version "2.4.10" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-1.0.0.tgz#4480cd06e882ef68b2ad88a3ea54832e2c48b571" + dependencies: + is-extendable "^0.1.1" + kind-of "^5.0.0" + mixin-object "^2.0.1" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +shell-quote@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shelljs@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.1.tgz#729e038c413a2254c4078b95ed46e0397154a9f1" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +silent-error@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/silent-error/-/silent-error-1.1.0.tgz#2209706f1c850a9f1d10d0d840918b46f26e1bc9" + dependencies: + debug "^2.2.0" + +slack-node@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/slack-node/-/slack-node-0.2.0.tgz#de4b8dddaa8b793f61dbd2938104fdabf37dfa30" + dependencies: + requestretry "^1.2.2" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +smart-buffer@^1.0.13, smart-buffer@^1.0.4: + version "1.1.15" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" + +smtp-connection@2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/smtp-connection/-/smtp-connection-2.12.0.tgz#d76ef9127cb23c2259edb1e8349c2e8d5e2d74c1" + dependencies: + httpntlm "1.6.1" + nodemailer-shared "1.1.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + dependencies: + 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 "^2.0.0" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +socket.io-adapter@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" + +socket.io-client@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~2.6.4" + engine.io-client "~3.1.0" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.1.1" + to-array "0.1.4" + +socket.io-parser@~3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + has-binary2 "~1.0.2" + isarray "2.0.1" + +socket.io@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" + dependencies: + debug "~2.6.6" + engine.io "~3.1.0" + socket.io-adapter "~1.1.0" + socket.io-client "2.0.4" + socket.io-parser "~3.1.1" + +sockjs-client@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +socks-proxy-agent@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-2.1.1.tgz#86ebb07193258637870e13b7bd99f26c663df3d3" + dependencies: + agent-base "2" + extend "3" + socks "~1.1.5" + +socks@1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.9.tgz#628d7e4d04912435445ac0b6e459376cb3e6d691" + dependencies: + ip "^1.1.2" + smart-buffer "^1.0.4" + +socks@~1.1.5: + version "1.1.10" + resolved "https://registry.yarnpkg.com/socks/-/socks-1.1.10.tgz#5b8b7fc7c8f341c53ed056e929b7bf4de8ba7b5a" + dependencies: + ip "^1.1.4" + smart-buffer "^1.0.13" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-list-map@~0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-map-loader@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-0.2.3.tgz#d4b0c8cd47d54edce3e6bfa0f523f452b5b0e521" + dependencies: + async "^2.5.0" + loader-utils "~0.2.2" + source-map "~0.6.1" + +source-map-resolve@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + dependencies: + atob "^2.0.0" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.0, source-map-support@^0.4.1, source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.0, source-map-support@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + +source-map-url@0.4.0, source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.1.x: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.0.tgz#0fe96503ac86a5adb5de63f4e412ae4872cdbe86" + +source-map@0.5.x, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + dependencies: + amdefine ">=0.0.4" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +spdy-transport@^2.0.18: + version "2.0.20" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d" + dependencies: + 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" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + 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" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sprintf-js@^1.0.3: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.1.tgz#36be78320afe5801f6cea3ee78b6e5aab940ea0c" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" + dependencies: + safe-buffer "^5.1.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.3.1 < 2", statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stdout-stream@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.0.tgz#a2c7c8587e54d9427ea9edb3ac3f2cd522df378b" + dependencies: + readable-stream "^2.0.1" + +stream-browserify@^2.0.0, stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-each@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.0.0, stream-http@^2.7.2: + version "2.8.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.3" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +stream-splicer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +streamroller@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-0.7.0.tgz#a1d1b7cf83d39afb0d63049a5acbf93493bdf64b" + dependencies: + date-format "^1.2.0" + debug "^3.1.0" + mkdirp "^0.5.1" + readable-stream "^2.3.0" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-replace-loader@~2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-replace-loader/-/string-replace-loader-2.1.1.tgz#b72e7b57b6ef04efe615aff0ad989b5c14ca63d1" + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.5" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.padend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.4.3" + function-bind "^1.0.2" + +string_decoder@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.0.tgz#384f322ee8a848e500effde99901bba849c5d403" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.1.tgz#591ffc80bcefe268b77c5d9ebc0505d772619f85" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.3.0" + +style-loader@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.2.tgz#851b373c187890331776e9cde359eea9c95ecd00" + dependencies: + loader-utils "^1.1.0" + schema-utils "^0.4.3" + +stylus-loader@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" + dependencies: + loader-utils "^1.0.2" + lodash.clonedeep "^4.5.0" + when "~3.6.x" + +stylus@^0.54.5: + version "0.54.5" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" + dependencies: + css-parse "1.7.x" + debug "*" + glob "7.0.x" + mkdirp "0.5.x" + sax "0.5.x" + source-map "0.1.x" + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + dependencies: + minimist "^1.1.0" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0, supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^4.0.0, supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +supports-color@^5.1.0, supports-color@^5.2.0, supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + dependencies: + acorn-node "^1.2.0" + +tapable@^0.2.5, tapable@^0.2.7: + version "0.2.8" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.0.0, tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +taskgroup@^4.0.5: + version "4.3.1" + resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-4.3.1.tgz#7de193febd768273c457730497024d512c27915a" + dependencies: + ambi "^2.2.0" + csextends "^1.0.3" + +taskgroup@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/taskgroup/-/taskgroup-5.0.1.tgz#08736c9b24683b1434774231eb4b73aa7c3f79b5" + dependencies: + ambi "^2.5.0" + eachr "^3.2.0" + editions "^1.1.1" + extendr "^3.2.0" + +through2@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.1.tgz#384e75314d49f32de12eebb8136b8eb6b5d59da9" + dependencies: + readable-stream "~2.0.0" + xtend "~4.0.0" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@2, "through@>=2.2.7 <3", through@X.X.X, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunkify@~2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d" + +thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +time-stamp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + dependencies: + process "~0.11.0" + +timers-browserify@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + dependencies: + setimmediate "^1.0.4" + +timespan@2.3.x: + version "2.3.0" + resolved "https://registry.yarnpkg.com/timespan/-/timespan-2.3.0.tgz#4902ce040bd13d845c8f59b27e9d59bad6f39929" + +tmp@0.0.24: + version "0.0.24" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.24.tgz#d6a5e198d14a9835cc6f2d7c3d9e302428c8cf12" + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.0.33, tmp@0.0.x: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +to-string-loader@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/to-string-loader/-/to-string-loader-1.1.5.tgz#7b7aa17891b7bb4947a7a11bfb03b5fde9c6e695" + dependencies: + loader-utils "^0.2.16" + +toposort@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" + +tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" + dependencies: + punycode "^1.4.1" + +traverse@^0.6.6: + version "0.6.6" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.6.6.tgz#cbdf560fd7b9af632502fed40f918c157ea97137" + +tree-kill@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +"true-case-path@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62" + dependencies: + glob "^6.0.4" + +ts-node@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-3.3.0.tgz#c13c6a3024e30be1180dd53038fc209289d4bf69" + dependencies: + arrify "^1.0.0" + chalk "^2.0.0" + diff "^3.1.0" + make-error "^1.1.1" + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map-support "^0.4.0" + tsconfig "^6.0.0" + v8flags "^3.0.0" + yn "^2.0.0" + +ts-node@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-5.0.1.tgz#78e5d1cb3f704de1b641e43b76be2d4094f06f81" + dependencies: + 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" + +ts-simple-ast@6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ts-simple-ast/-/ts-simple-ast-6.12.0.tgz#bd232d7fc7e3f1ff121182554de1e4216f92582e" + dependencies: + code-block-writer "^6.2.0" + globby "^6.1.0" + multimatch "^2.1.0" + object-assign "^4.1.1" + typescript "^2.4.x" + +tsconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-6.0.0.tgz#6b0e8376003d7af1864f8df8f89dd0059ffcd032" + dependencies: + strip-bom "^3.0.0" + strip-json-comments "^2.0.0" + +tsickle@^0.27.2: + version "0.27.2" + resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.27.2.tgz#f33d46d046f73dd5c155a37922e422816e878736" + dependencies: + minimist "^1.2.0" + mkdirp "^0.5.1" + source-map "^0.6.0" + source-map-support "^0.5.0" + +tslib@^1.7.1, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" + +tslint-loader@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/tslint-loader/-/tslint-loader-3.6.0.tgz#12ed4d5ef57d68be25cd12692fb2108b66469d76" + dependencies: + loader-utils "^1.0.2" + mkdirp "^0.5.1" + object-assign "^4.1.1" + rimraf "^2.4.4" + semver "^5.3.0" + +tslint@^5.9.1: + version "5.9.1" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" + dependencies: + 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" + +tsscmp@~1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" + +tsutils@^2.12.1: + version "2.22.2" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.22.2.tgz#0b9f3d87aa3eb95bd32d26ce2b88aa329a657951" + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tty-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.1: + version "0.4.3" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-is@~1.6.15: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typechecker@^4.3.0, typechecker@^4.4.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/typechecker/-/typechecker-4.5.0.tgz#c382920097812364bbaf4595b0ab6588244117a6" + dependencies: + editions "^1.3.4" + +typedarray@^0.0.6, typedarray@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +typedoc-default-themes@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.5.0.tgz#6dc2433e78ed8bea8e887a3acde2f31785bd6227" + +typedoc@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.11.0.tgz#727362fa792f13ddf3c27c1ccbb85181d6fe40fd" + dependencies: + "@types/fs-extra" "5.0.0" + "@types/handlebars" "4.0.36" + "@types/highlight.js" "9.12.2" + "@types/lodash" "4.14.99" + "@types/marked" "0.3.0" + "@types/minimatch" "3.0.3" + "@types/shelljs" "0.7.7" + fs-extra "^5.0.0" + handlebars "^4.0.6" + highlight.js "^9.0.0" + lodash "^4.13.1" + marked "^0.3.12" + minimatch "^3.0.0" + progress "^2.0.0" + shelljs "^0.8.1" + typedoc-default-themes "^0.5.0" + typescript "2.7.1" + +typescript@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" + +typescript@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.1.tgz#bb3682c2c791ac90e7c6210b26478a8da085c359" + +typescript@^2.4.2, typescript@^2.4.x: + version "2.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" + +typescript@~2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.3.x: + version "3.3.13" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf" + dependencies: + commander "~2.14.1" + source-map "~0.6.1" + +uglify-js@^2.6, uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + +uglifyjs-webpack-plugin@^1.1.8, uglifyjs-webpack-plugin@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz#e7516d4367afdb715c3847841eb46f94c45ca2b9" + dependencies: + cacache "^10.0.1" + find-cache-dir "^1.0.0" + schema-utils "^0.4.2" + 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" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +ultron@1.0.x: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa" + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + +umd@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" + +underscore@~1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +union@~0.4.3: + version "0.4.6" + resolved "https://registry.yarnpkg.com/union/-/union-0.4.6.tgz#198fbdaeba254e788b0efcb630bc11f24a2959e0" + dependencies: + qs "~2.3.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqid@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" + dependencies: + macaddress "^0.2.8" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + +unix-crypt-td-js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz#1c0824150481bc7a01d49e98f1ec668d82412f3b" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728" + +url-loader@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" + dependencies: + loader-utils "^1.0.2" + mime "^1.4.1" + schema-utils "^0.3.0" + +url-loader@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^0.4.3" + +url-parse@1.0.x: + version "1.0.5" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" + dependencies: + querystringify "0.0.x" + requires-port "1.0.x" + +url-parse@^1.1.8: + version "1.2.0" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" + dependencies: + querystringify "~1.0.0" + requires-port "~1.0.0" + +url@^0.11.0, url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" + dependencies: + define-property "^0.2.5" + isobject "^3.0.0" + lazy-cache "^2.0.2" + +useragent@^2.1.12: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, util@^0.10.3, util@~0.10.1: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +utils-merge@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + +uws@~9.14.0: + version "9.14.0" + resolved "https://registry.yarnpkg.com/uws/-/uws-9.14.0.tgz#fac8386befc33a7a3705cbd58dc47b430ca4dd95" + +v8flags@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.0.2.tgz#ad6a78a20a6b23d03a8debc11211e3cc23149477" + dependencies: + homedir-polyfill "^1.0.1" + +validate-npm-package-license@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +vendors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +viz.js@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/viz.js/-/viz.js-1.8.0.tgz#e0cb5ad241368e35b1a6e960691eba454c24951f" + +vlq@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + +vm-browserify@0.0.4, vm-browserify@~0.0.1: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + +watchpack@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +watchr@2.6.x: + version "2.6.0" + resolved "https://registry.yarnpkg.com/watchr/-/watchr-2.6.0.tgz#e75c423b10be79267a0c3ef76e2ea104fe0267a5" + dependencies: + eachr "^3.2.0" + extendr "^3.2.2" + extract-opts "^3.3.1" + ignorefs "^1.1.1" + safefs "^4.1.0" + scandirectory "^2.5.0" + taskgroup "^5.0.1" + typechecker "^4.3.0" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe" + dependencies: + minimalistic-assert "^1.0.0" + +webdriver-js-extender@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-1.0.0.tgz#81c533a9e33d5bfb597b4e63e2cdb25b54777515" + dependencies: + "@types/selenium-webdriver" "^2.53.35" + selenium-webdriver "^2.53.2" + +webdriver-manager@^12.0.6: + version "12.0.6" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.0.6.tgz#3df1a481977010b4cbf8c9d85c7a577828c0e70b" + dependencies: + 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" + +webpack-core@^0.6.8: + version "0.6.9" + resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + dependencies: + source-list-map "~0.1.7" + source-map "~0.4.1" + +webpack-dev-middleware@1.12.2, webpack-dev-middleware@^1.12.0, webpack-dev-middleware@~1.12.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" + dependencies: + memory-fs "~0.4.1" + mime "^1.5.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + time-stamp "^2.0.0" + +webpack-dev-middleware@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz#a51692801e8310844ef3e3790e1eacfe52326fd4" + dependencies: + 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 "^2.0.2" + webpack-log "^1.0.1" + +webpack-dev-server@~2.11.0, webpack-dev-server@~2.11.1: + version "2.11.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.11.2.tgz#1f4f4c78bf1895378f376815910812daf79a216f" + dependencies: + 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.17.4" + import-local "^1.0.0" + internal-ip "1.2.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" + 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 "1.12.2" + yargs "6.6.0" + +webpack-log@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.1.2.tgz#cdc76016537eed24708dc6aa3d1e52189efee107" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@^4.1.0, webpack-merge@~4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + dependencies: + lodash "^4.17.5" + +webpack-sources@^0.1.2: + version "0.1.5" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.1.5.tgz#aa1f3abf0f0d74db7111c40e500b84f966640750" + dependencies: + source-list-map "~0.1.7" + source-map "~0.5.3" + +webpack-sources@^1.0.0, webpack-sources@^1.0.1, webpack-sources@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack-subresource-integrity@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/webpack-subresource-integrity/-/webpack-subresource-integrity-1.0.4.tgz#8fac8a7e8eb59fc6a16768a85c9d94ee7f9d0edb" + dependencies: + webpack-core "^0.6.8" + +webpack@^3.10.0, webpack@~3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +when@^3.7.7: + version "3.7.8" + resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82" + +when@~3.6.x: + version "3.6.4" + resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@1, which@^1.1.1, which@^1.2.1, which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + dependencies: + semver "^5.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@^1.0.0, wordwrap@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +worker-farm@^1.5.2: + version "1.5.4" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.4.tgz#4debbe46b40edefcc717ebde74a90b1ae1e909a1" + dependencies: + errno "~0.1.7" + xtend "~4.0.1" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +ws@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.5.tgz#cbd9e6e75e09fc5d2c90015f21f0c40875e0dd51" + dependencies: + options ">=0.0.5" + ultron "1.0.x" + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xhr2@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" + +xml-char-classes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + +xml2js@0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.4.tgz#3111010003008ae19240eba17497b57c729c555d" + dependencies: + sax "0.6.x" + xmlbuilder ">=1.0.0" + +xml2js@^0.4.17: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" + dependencies: + sax ">=0.6.0" + xmlbuilder "~9.0.1" + +xmlbuilder@>=1.0.0, xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + +xregexp@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +xxhashjs@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + dependencies: + cuint "^0.2.2" + +y18n@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^4.2.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + dependencies: + camelcase "^3.0.0" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@6.6.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + dependencies: + 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 "^4.2.0" + +yargs@^4.8.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + dependencies: + 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" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" + +zone.js@^0.8.19: + version "0.8.20" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.20.tgz#a218c48db09464b19ff6fc8f0d4bb5b1046e185d" From 94372494c3acc360cc4f052ea6682575f763ce5d Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 20 Mar 2018 16:24:35 +0300 Subject: [PATCH 002/108] AMP/task1/features: try template --- angular-starter/package-lock.json | 2 +- .../app/angular-intro/courses/courses.component.css | 5 +++++ .../angular-intro/courses/courses.component.html | 3 +++ .../app/angular-intro/courses/courses.component.ts | 13 +++++++++++++ .../src/app/angular-intro/courses/index.ts | 1 + angular-starter/src/app/angular-intro/index.ts | 1 + angular-starter/src/app/app.module.ts | 6 +++++- angular-starter/src/app/home/home.component.html | 1 - 8 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/courses/courses.component.css create mode 100644 angular-starter/src/app/angular-intro/courses/courses.component.html create mode 100644 angular-starter/src/app/angular-intro/courses/courses.component.ts create mode 100644 angular-starter/src/app/angular-intro/courses/index.ts create mode 100644 angular-starter/src/app/angular-intro/index.ts diff --git a/angular-starter/package-lock.json b/angular-starter/package-lock.json index b67a987..45e9986 100644 --- a/angular-starter/package-lock.json +++ b/angular-starter/package-lock.json @@ -1,6 +1,6 @@ { "name": "angular-starter", - "version": "7.0.0", + "version": "7.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css new file mode 100644 index 0000000..c04fc42 --- /dev/null +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -0,0 +1,5 @@ +p { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html new file mode 100644 index 0000000..8ef7e60 --- /dev/null +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -0,0 +1,3 @@ +

diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts new file mode 100644 index 0000000..d38f12b --- /dev/null +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'courses', + templateUrl: './courses.component.html', + styleUrls: ['./courses.component.css'] +}) +export class CoursesComponent { + protected text = 'Courses TEXT'; + constructor() { + console.log('courses-constructor'); + } +} diff --git a/angular-starter/src/app/angular-intro/courses/index.ts b/angular-starter/src/app/angular-intro/courses/index.ts new file mode 100644 index 0000000..9b88ab4 --- /dev/null +++ b/angular-starter/src/app/angular-intro/courses/index.ts @@ -0,0 +1 @@ +export * from './courses.component'; diff --git a/angular-starter/src/app/angular-intro/index.ts b/angular-starter/src/app/angular-intro/index.ts new file mode 100644 index 0000000..bf06a82 --- /dev/null +++ b/angular-starter/src/app/angular-intro/index.ts @@ -0,0 +1 @@ +export * from './courses'; diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 7a537c8..34a6432 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -20,6 +20,8 @@ import { NoContentComponent } from './no-content'; import { XLargeDirective } from './home/x-large'; import { DevModuleModule } from './+dev-module'; +import { CoursesComponent } from './angular-intro'; + import '../styles/styles.scss'; import '../styles/headings.css'; @@ -45,7 +47,9 @@ interface StoreType { AboutComponent, HomeComponent, NoContentComponent, - XLargeDirective + XLargeDirective, + + CoursesComponent ], /** * Import Angular's modules. diff --git a/angular-starter/src/app/home/home.component.html b/angular-starter/src/app/home/home.component.html index f37acb2..0834810 100644 --- a/angular-starter/src/app/home/home.component.html +++ b/angular-starter/src/app/home/home.component.html @@ -1,6 +1,5 @@

Your Content Here

-
From e763c283b2f9b1968159db4e5bb43a15bf05e3b4 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 10:15:09 +0300 Subject: [PATCH 003/108] AMP/angular-starter/features: add simple-component in app --- angular-starter/src/app/app.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/angular-starter/src/app/app.component.ts b/angular-starter/src/app/app.component.ts index b210cb7..2be011e 100644 --- a/angular-starter/src/app/app.component.ts +++ b/angular-starter/src/app/app.component.ts @@ -45,6 +45,7 @@ import { AppState } from './app.service';
+

this.appState.state = {{ appState.state | json }}
From 60e4e6d979e67ab8a64706afa12383546717a00a Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 11:50:46 +0300 Subject: [PATCH 004/108] AMP/angular-starter/features: header-footer components --- angular-starter/src/app/app.component.html | 45 +++++++++++++++ angular-starter/src/app/app.component.ts | 45 +-------------- angular-starter/src/app/app.module.ts | 10 +++- .../src/app/footer/footer.component.css | 4 ++ .../src/app/footer/footer.component.html | 3 + .../src/app/footer/footer.component.ts | 57 +++++++++++++++++++ angular-starter/src/app/footer/index.ts | 1 + .../src/app/header/header.component.css | 4 ++ .../src/app/header/header.component.html | 3 + .../src/app/header/header.component.ts | 57 +++++++++++++++++++ angular-starter/src/app/header/index.ts | 1 + 11 files changed, 183 insertions(+), 47 deletions(-) create mode 100644 angular-starter/src/app/app.component.html create mode 100644 angular-starter/src/app/footer/footer.component.css create mode 100644 angular-starter/src/app/footer/footer.component.html create mode 100644 angular-starter/src/app/footer/footer.component.ts create mode 100644 angular-starter/src/app/footer/index.ts create mode 100644 angular-starter/src/app/header/header.component.css create mode 100644 angular-starter/src/app/header/header.component.html create mode 100644 angular-starter/src/app/header/header.component.ts create mode 100644 angular-starter/src/app/header/index.ts diff --git a/angular-starter/src/app/app.component.html b/angular-starter/src/app/app.component.html new file mode 100644 index 0000000..a59f963 --- /dev/null +++ b/angular-starter/src/app/app.component.html @@ -0,0 +1,45 @@ +
+ + + +
+ +

+
+ +
this.appState.state = {{ appState.state | json }}
+ + diff --git a/angular-starter/src/app/app.component.ts b/angular-starter/src/app/app.component.ts index 2be011e..744cbeb 100644 --- a/angular-starter/src/app/app.component.ts +++ b/angular-starter/src/app/app.component.ts @@ -15,50 +15,7 @@ import { AppState } from './app.service'; styleUrls: [ './app.component.css' ], - template: ` - - -
- -

-
- -
this.appState.state = {{ appState.state | json }}
- - - ` + templateUrl: './app.component.html' }) export class AppComponent implements OnInit { public name = 'Angular Starter'; diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 34a6432..f1fd215 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -20,11 +20,13 @@ import { NoContentComponent } from './no-content'; import { XLargeDirective } from './home/x-large'; import { DevModuleModule } from './+dev-module'; -import { CoursesComponent } from './angular-intro'; - import '../styles/styles.scss'; import '../styles/headings.css'; +import { CoursesComponent } from './angular-intro'; +import { FooterComponent } from './footer'; +import { HeaderComponent } from './header'; + // Application wide providers const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, @@ -49,7 +51,9 @@ interface StoreType { NoContentComponent, XLargeDirective, - CoursesComponent + CoursesComponent, + FooterComponent, + HeaderComponent, ], /** * Import Angular's modules. diff --git a/angular-starter/src/app/footer/footer.component.css b/angular-starter/src/app/footer/footer.component.css new file mode 100644 index 0000000..bc4fc3b --- /dev/null +++ b/angular-starter/src/app/footer/footer.component.css @@ -0,0 +1,4 @@ +div { + border: 1px solid black; + text-align: center; +} diff --git a/angular-starter/src/app/footer/footer.component.html b/angular-starter/src/app/footer/footer.component.html new file mode 100644 index 0000000..3a9eee9 --- /dev/null +++ b/angular-starter/src/app/footer/footer.component.html @@ -0,0 +1,3 @@ +
+

copyright 2018

+
diff --git a/angular-starter/src/app/footer/footer.component.ts b/angular-starter/src/app/footer/footer.component.ts new file mode 100644 index 0000000..a40fad1 --- /dev/null +++ b/angular-starter/src/app/footer/footer.component.ts @@ -0,0 +1,57 @@ +import { + Component, + OnInit +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'app-footer', + styleUrls: [ + './footer.component.css' + ], + templateUrl: './footer.component.html' +}) +export class FooterComponent implements OnInit { + + public localState: any; + constructor( + public route: ActivatedRoute + ) {} + + public ngOnInit() { + this.route + .data + .subscribe((data: any) => { + /** + * Your resolved data from route. + */ + this.localState = data.yourData; + }); + + console.log('hello `Footer` component'); + /** + * static data that is bundled + * var mockData = require('assets/mock-data/mock-data.json'); + * console.log('mockData', mockData); + * if you're working with mock data you can also use http.get('assets/mock-data/mock-data.json') + */ + this.asyncDataWithWebpack(); + } + private asyncDataWithWebpack() { + /** + * you can also async load mock data with 'es6-promise-loader' + * you would do this if you don't want the mock-data bundled + * remember that 'es6-promise-loader' is a promise + */ + setTimeout(() => { + + System.import('../../assets/mock-data/mock-data.json') + .then((json) => { + console.log('async mockData', json); + this.localState = json; + }); + + }); + } + +} diff --git a/angular-starter/src/app/footer/index.ts b/angular-starter/src/app/footer/index.ts new file mode 100644 index 0000000..a50d573 --- /dev/null +++ b/angular-starter/src/app/footer/index.ts @@ -0,0 +1 @@ +export * from './footer.component'; diff --git a/angular-starter/src/app/header/header.component.css b/angular-starter/src/app/header/header.component.css new file mode 100644 index 0000000..bc4fc3b --- /dev/null +++ b/angular-starter/src/app/header/header.component.css @@ -0,0 +1,4 @@ +div { + border: 1px solid black; + text-align: center; +} diff --git a/angular-starter/src/app/header/header.component.html b/angular-starter/src/app/header/header.component.html new file mode 100644 index 0000000..04e58e3 --- /dev/null +++ b/angular-starter/src/app/header/header.component.html @@ -0,0 +1,3 @@ +
+

I'm header

+
diff --git a/angular-starter/src/app/header/header.component.ts b/angular-starter/src/app/header/header.component.ts new file mode 100644 index 0000000..1e862c8 --- /dev/null +++ b/angular-starter/src/app/header/header.component.ts @@ -0,0 +1,57 @@ +import { + Component, + OnInit +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'app-header', + styleUrls: [ + './header.component.css' + ], + templateUrl: './header.component.html' +}) +export class HeaderComponent implements OnInit { + + public localState: any; + constructor( + public route: ActivatedRoute + ) {} + + public ngOnInit() { + this.route + .data + .subscribe((data: any) => { + /** + * Your resolved data from route. + */ + this.localState = data.yourData; + }); + + console.log('hello `Header` component'); + /** + * static data that is bundled + * var mockData = require('assets/mock-data/mock-data.json'); + * console.log('mockData', mockData); + * if you're working with mock data you can also use http.get('assets/mock-data/mock-data.json') + */ + this.asyncDataWithWebpack(); + } + private asyncDataWithWebpack() { + /** + * you can also async load mock data with 'es6-promise-loader' + * you would do this if you don't want the mock-data bundled + * remember that 'es6-promise-loader' is a promise + */ + setTimeout(() => { + + System.import('../../assets/mock-data/mock-data.json') + .then((json) => { + console.log('async mockData', json); + this.localState = json; + }); + + }); + } + +} diff --git a/angular-starter/src/app/header/index.ts b/angular-starter/src/app/header/index.ts new file mode 100644 index 0000000..be62c26 --- /dev/null +++ b/angular-starter/src/app/header/index.ts @@ -0,0 +1 @@ +export * from './header.component'; From a3e2cd5365b1bf2df379d53c781a2077551b19a9 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 12:43:40 +0300 Subject: [PATCH 005/108] AMP/angular-starter/features: first custom module --- angular-starter/src/app/app.component.css | 5 +++++ angular-starter/src/app/app.component.html | 10 +++++---- angular-starter/src/app/app.module.ts | 3 +++ angular-starter/src/app/toolbar/index.ts | 1 + .../src/app/toolbar/toolbar.component.css | 3 +++ .../src/app/toolbar/toolbar.component.html | 3 +++ .../src/app/toolbar/toolbar.component.ts | 16 ++++++++++++++ .../src/app/toolbar/toolbar.module.ts | 22 +++++++++++++++++++ 8 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 angular-starter/src/app/toolbar/index.ts create mode 100644 angular-starter/src/app/toolbar/toolbar.component.css create mode 100644 angular-starter/src/app/toolbar/toolbar.component.html create mode 100644 angular-starter/src/app/toolbar/toolbar.component.ts create mode 100644 angular-starter/src/app/toolbar/toolbar.module.ts diff --git a/angular-starter/src/app/app.component.css b/angular-starter/src/app/app.component.css index f78b9d9..281a358 100644 --- a/angular-starter/src/app/app.component.css +++ b/angular-starter/src/app/app.component.css @@ -6,3 +6,8 @@ html, body{ a.active { background-color: gray; } + +.myContent { + border: 2px solid navy; + padding: 15px; +} diff --git a/angular-starter/src/app/app.component.html b/angular-starter/src/app/app.component.html index a59f963..57f0f75 100644 --- a/angular-starter/src/app/app.component.html +++ b/angular-starter/src/app/app.component.html @@ -25,11 +25,14 @@ - -
-

+
+ + +

+ +
this.appState.state = {{ appState.state | json }}
@@ -41,5 +44,4 @@
- diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index f1fd215..9758af5 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -26,6 +26,7 @@ import '../styles/headings.css'; import { CoursesComponent } from './angular-intro'; import { FooterComponent } from './footer'; import { HeaderComponent } from './header'; +import { ToolbarModule } from './toolbar'; // Application wide providers const APP_PROVIDERS = [ @@ -68,6 +69,8 @@ interface StoreType { preloadingStrategy: PreloadAllModules }), + ToolbarModule, + /** * This section will import the `DevModuleModule` only in certain build types. * When the module is not imported it will get tree shaked. diff --git a/angular-starter/src/app/toolbar/index.ts b/angular-starter/src/app/toolbar/index.ts new file mode 100644 index 0000000..8808858 --- /dev/null +++ b/angular-starter/src/app/toolbar/index.ts @@ -0,0 +1 @@ +export * from './toolbar.module'; diff --git a/angular-starter/src/app/toolbar/toolbar.component.css b/angular-starter/src/app/toolbar/toolbar.component.css new file mode 100644 index 0000000..c703673 --- /dev/null +++ b/angular-starter/src/app/toolbar/toolbar.component.css @@ -0,0 +1,3 @@ +div { + background-color: purple; +} diff --git a/angular-starter/src/app/toolbar/toolbar.component.html b/angular-starter/src/app/toolbar/toolbar.component.html new file mode 100644 index 0000000..9fd02e6 --- /dev/null +++ b/angular-starter/src/app/toolbar/toolbar.component.html @@ -0,0 +1,3 @@ +
+

I'm toolbar

+
diff --git a/angular-starter/src/app/toolbar/toolbar.component.ts b/angular-starter/src/app/toolbar/toolbar.component.ts new file mode 100644 index 0000000..127fcb1 --- /dev/null +++ b/angular-starter/src/app/toolbar/toolbar.component.ts @@ -0,0 +1,16 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +@Component({ + selector: 'tools', + templateUrl: './toolbar.component.html', + styleUrls: ['./toolbar.component.css'] +}) + +export class ToolbarComponent implements OnInit { + public ngOnInit() { + console.log('hello `Detail` component'); + } +} diff --git a/angular-starter/src/app/toolbar/toolbar.module.ts b/angular-starter/src/app/toolbar/toolbar.module.ts new file mode 100644 index 0000000..c4752a1 --- /dev/null +++ b/angular-starter/src/app/toolbar/toolbar.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { ToolbarComponent } from './toolbar.component'; + +console.log('`Tools` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + ToolbarComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + ToolbarComponent, + ], +}) +export class ToolbarModule {} From 7e8991eb70c4b04de781c2087c3236014c02e3d4 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 13:14:24 +0300 Subject: [PATCH 006/108] AMP/angular-starter/features: intro-module --- .../angular-intro/angular-intro.component.css | 4 +++ .../angular-intro.component.html | 6 ++++ .../angular-intro/angular-intro.component.ts | 16 +++++++++ .../app/angular-intro/angular-intro.module.ts | 33 +++++++++++++++++++ .../footer/footer.component.css | 0 .../footer/footer.component.html | 0 .../footer/footer.component.ts | 3 +- .../app/{ => angular-intro}/footer/index.ts | 0 .../header/header.component.css | 0 .../header/header.component.html | 0 .../header/header.component.ts | 3 +- .../app/{ => angular-intro}/header/index.ts | 0 .../src/app/angular-intro/index.ts | 2 +- .../app/{ => angular-intro}/toolbar/index.ts | 0 .../toolbar/toolbar.component.css | 0 .../toolbar/toolbar.component.html | 0 .../toolbar/toolbar.component.ts | 0 .../toolbar/toolbar.module.ts | 0 angular-starter/src/app/app.component.css | 5 --- angular-starter/src/app/app.component.html | 7 +--- angular-starter/src/app/app.module.ts | 13 ++------ 21 files changed, 68 insertions(+), 24 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/angular-intro.component.css create mode 100644 angular-starter/src/app/angular-intro/angular-intro.component.html create mode 100644 angular-starter/src/app/angular-intro/angular-intro.component.ts create mode 100644 angular-starter/src/app/angular-intro/angular-intro.module.ts rename angular-starter/src/app/{ => angular-intro}/footer/footer.component.css (100%) rename angular-starter/src/app/{ => angular-intro}/footer/footer.component.html (100%) rename angular-starter/src/app/{ => angular-intro}/footer/footer.component.ts (91%) rename angular-starter/src/app/{ => angular-intro}/footer/index.ts (100%) rename angular-starter/src/app/{ => angular-intro}/header/header.component.css (100%) rename angular-starter/src/app/{ => angular-intro}/header/header.component.html (100%) rename angular-starter/src/app/{ => angular-intro}/header/header.component.ts (91%) rename angular-starter/src/app/{ => angular-intro}/header/index.ts (100%) rename angular-starter/src/app/{ => angular-intro}/toolbar/index.ts (100%) rename angular-starter/src/app/{ => angular-intro}/toolbar/toolbar.component.css (100%) rename angular-starter/src/app/{ => angular-intro}/toolbar/toolbar.component.html (100%) rename angular-starter/src/app/{ => angular-intro}/toolbar/toolbar.component.ts (100%) rename angular-starter/src/app/{ => angular-intro}/toolbar/toolbar.module.ts (100%) diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.css b/angular-starter/src/app/angular-intro/angular-intro.component.css new file mode 100644 index 0000000..1079679 --- /dev/null +++ b/angular-starter/src/app/angular-intro/angular-intro.component.css @@ -0,0 +1,4 @@ +div { + border: 2px solid navy; + padding: 15px; +} diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html new file mode 100644 index 0000000..c92e6cd --- /dev/null +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -0,0 +1,6 @@ +
+ + +

+ +
diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.ts b/angular-starter/src/app/angular-intro/angular-intro.component.ts new file mode 100644 index 0000000..c3dd6be --- /dev/null +++ b/angular-starter/src/app/angular-intro/angular-intro.component.ts @@ -0,0 +1,16 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +@Component({ + selector: 'intro', + templateUrl: './angular-intro.component.html', + styleUrls: ['./angular-intro.component.css'] +}) + +export class IntroComponent implements OnInit { + public ngOnInit() { + console.log('hello `INTRO` component'); + } +} diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts new file mode 100644 index 0000000..e3870de --- /dev/null +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -0,0 +1,33 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { HeaderComponent } from './header'; +import { ToolbarModule } from './toolbar'; +import { CoursesComponent } from './courses'; +import { FooterComponent } from './footer'; + +import { IntroComponent } from './angular-intro.component'; + +console.log('`INTRO` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + + HeaderComponent, + CoursesComponent, + FooterComponent, + + IntroComponent, + ], + imports: [ + CommonModule, + ToolbarModule, + ], + exports: [ + IntroComponent + ], +}) +export class IntroModule {} diff --git a/angular-starter/src/app/footer/footer.component.css b/angular-starter/src/app/angular-intro/footer/footer.component.css similarity index 100% rename from angular-starter/src/app/footer/footer.component.css rename to angular-starter/src/app/angular-intro/footer/footer.component.css diff --git a/angular-starter/src/app/footer/footer.component.html b/angular-starter/src/app/angular-intro/footer/footer.component.html similarity index 100% rename from angular-starter/src/app/footer/footer.component.html rename to angular-starter/src/app/angular-intro/footer/footer.component.html diff --git a/angular-starter/src/app/footer/footer.component.ts b/angular-starter/src/app/angular-intro/footer/footer.component.ts similarity index 91% rename from angular-starter/src/app/footer/footer.component.ts rename to angular-starter/src/app/angular-intro/footer/footer.component.ts index a40fad1..5810dff 100644 --- a/angular-starter/src/app/footer/footer.component.ts +++ b/angular-starter/src/app/angular-intro/footer/footer.component.ts @@ -45,7 +45,8 @@ export class FooterComponent implements OnInit { */ setTimeout(() => { - System.import('../../assets/mock-data/mock-data.json') + // System.import('../../assets/mock-data/mock-data.json') + System.import('../../../assets/mock-data/mock-data.json') .then((json) => { console.log('async mockData', json); this.localState = json; diff --git a/angular-starter/src/app/footer/index.ts b/angular-starter/src/app/angular-intro/footer/index.ts similarity index 100% rename from angular-starter/src/app/footer/index.ts rename to angular-starter/src/app/angular-intro/footer/index.ts diff --git a/angular-starter/src/app/header/header.component.css b/angular-starter/src/app/angular-intro/header/header.component.css similarity index 100% rename from angular-starter/src/app/header/header.component.css rename to angular-starter/src/app/angular-intro/header/header.component.css diff --git a/angular-starter/src/app/header/header.component.html b/angular-starter/src/app/angular-intro/header/header.component.html similarity index 100% rename from angular-starter/src/app/header/header.component.html rename to angular-starter/src/app/angular-intro/header/header.component.html diff --git a/angular-starter/src/app/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts similarity index 91% rename from angular-starter/src/app/header/header.component.ts rename to angular-starter/src/app/angular-intro/header/header.component.ts index 1e862c8..014d433 100644 --- a/angular-starter/src/app/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -45,7 +45,8 @@ export class HeaderComponent implements OnInit { */ setTimeout(() => { - System.import('../../assets/mock-data/mock-data.json') + // System.import('../../assets/mock-data/mock-data.json') + System.import('../../../assets/mock-data/mock-data.json') .then((json) => { console.log('async mockData', json); this.localState = json; diff --git a/angular-starter/src/app/header/index.ts b/angular-starter/src/app/angular-intro/header/index.ts similarity index 100% rename from angular-starter/src/app/header/index.ts rename to angular-starter/src/app/angular-intro/header/index.ts diff --git a/angular-starter/src/app/angular-intro/index.ts b/angular-starter/src/app/angular-intro/index.ts index bf06a82..5547aac 100644 --- a/angular-starter/src/app/angular-intro/index.ts +++ b/angular-starter/src/app/angular-intro/index.ts @@ -1 +1 @@ -export * from './courses'; +export * from './angular-intro.module'; diff --git a/angular-starter/src/app/toolbar/index.ts b/angular-starter/src/app/angular-intro/toolbar/index.ts similarity index 100% rename from angular-starter/src/app/toolbar/index.ts rename to angular-starter/src/app/angular-intro/toolbar/index.ts diff --git a/angular-starter/src/app/toolbar/toolbar.component.css b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.css similarity index 100% rename from angular-starter/src/app/toolbar/toolbar.component.css rename to angular-starter/src/app/angular-intro/toolbar/toolbar.component.css diff --git a/angular-starter/src/app/toolbar/toolbar.component.html b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html similarity index 100% rename from angular-starter/src/app/toolbar/toolbar.component.html rename to angular-starter/src/app/angular-intro/toolbar/toolbar.component.html diff --git a/angular-starter/src/app/toolbar/toolbar.component.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts similarity index 100% rename from angular-starter/src/app/toolbar/toolbar.component.ts rename to angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts diff --git a/angular-starter/src/app/toolbar/toolbar.module.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts similarity index 100% rename from angular-starter/src/app/toolbar/toolbar.module.ts rename to angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts diff --git a/angular-starter/src/app/app.component.css b/angular-starter/src/app/app.component.css index 281a358..f78b9d9 100644 --- a/angular-starter/src/app/app.component.css +++ b/angular-starter/src/app/app.component.css @@ -6,8 +6,3 @@ html, body{ a.active { background-color: gray; } - -.myContent { - border: 2px solid navy; - padding: 15px; -} diff --git a/angular-starter/src/app/app.component.html b/angular-starter/src/app/app.component.html index 57f0f75..fb630c1 100644 --- a/angular-starter/src/app/app.component.html +++ b/angular-starter/src/app/app.component.html @@ -27,12 +27,7 @@
-
- - -

- -
+
this.appState.state = {{ appState.state | json }}
diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 9758af5..3c28942 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -20,14 +20,11 @@ import { NoContentComponent } from './no-content'; import { XLargeDirective } from './home/x-large'; import { DevModuleModule } from './+dev-module'; +import { IntroModule } from './angular-intro'; + import '../styles/styles.scss'; import '../styles/headings.css'; -import { CoursesComponent } from './angular-intro'; -import { FooterComponent } from './footer'; -import { HeaderComponent } from './header'; -import { ToolbarModule } from './toolbar'; - // Application wide providers const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, @@ -51,10 +48,6 @@ interface StoreType { HomeComponent, NoContentComponent, XLargeDirective, - - CoursesComponent, - FooterComponent, - HeaderComponent, ], /** * Import Angular's modules. @@ -69,7 +62,7 @@ interface StoreType { preloadingStrategy: PreloadAllModules }), - ToolbarModule, + IntroModule, /** * This section will import the `DevModuleModule` only in certain build types. From 74325dfd7d706c4f0600aef378190e7294aef7ee Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 14:17:37 +0300 Subject: [PATCH 007/108] AMP/angular-starter/features: subModule --- .../app/angular-intro/angular-intro.module.ts | 7 ++++-- .../angular-intro/cours/cours.component.css | 5 ++++ .../angular-intro/cours/cours.component.html | 3 +++ .../angular-intro/cours/cours.component.ts | 13 ++++++++++ .../app/angular-intro/cours/cours.module.ts | 22 +++++++++++++++++ .../src/app/angular-intro/cours/index.ts | 1 + .../courses/courses.component.css | 4 ++++ .../courses/courses.component.html | 5 +++- .../angular-intro/courses/courses.module.ts | 24 +++++++++++++++++++ .../src/app/angular-intro/courses/index.ts | 2 +- 10 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/cours/cours.component.css create mode 100644 angular-starter/src/app/angular-intro/cours/cours.component.html create mode 100644 angular-starter/src/app/angular-intro/cours/cours.component.ts create mode 100644 angular-starter/src/app/angular-intro/cours/cours.module.ts create mode 100644 angular-starter/src/app/angular-intro/cours/index.ts create mode 100644 angular-starter/src/app/angular-intro/courses/courses.module.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index e3870de..e8f1bee 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -3,7 +3,8 @@ import { NgModule } from '@angular/core'; import { HeaderComponent } from './header'; import { ToolbarModule } from './toolbar'; -import { CoursesComponent } from './courses'; +import { CoursesModule } from './courses'; +import { CoursModule } from './cours'; import { FooterComponent } from './footer'; import { IntroComponent } from './angular-intro.component'; @@ -17,14 +18,16 @@ console.log('`INTRO` bundle loaded asynchronously'); */ HeaderComponent, - CoursesComponent, FooterComponent, IntroComponent, ], imports: [ CommonModule, + ToolbarModule, + CoursesModule, + CoursModule, ], exports: [ IntroComponent diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.css b/angular-starter/src/app/angular-intro/cours/cours.component.css new file mode 100644 index 0000000..c04fc42 --- /dev/null +++ b/angular-starter/src/app/angular-intro/cours/cours.component.css @@ -0,0 +1,5 @@ +p { + color: #369; + font-family: Arial, Helvetica, sans-serif; + font-size: 250%; +} diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html new file mode 100644 index 0000000..2e27e9f --- /dev/null +++ b/angular-starter/src/app/angular-intro/cours/cours.component.html @@ -0,0 +1,3 @@ +
+

CourS componernt {{ text }}

+
diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/cours/cours.component.ts new file mode 100644 index 0000000..84b036a --- /dev/null +++ b/angular-starter/src/app/angular-intro/cours/cours.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'cours', + templateUrl: './cours.component.html', + styleUrls: ['./cours.component.css'] +}) +export class CoursComponent { + protected text = 'CourS TEXT'; + constructor() { + console.log('cours-constructor'); + } +} diff --git a/angular-starter/src/app/angular-intro/cours/cours.module.ts b/angular-starter/src/app/angular-intro/cours/cours.module.ts new file mode 100644 index 0000000..38b6207 --- /dev/null +++ b/angular-starter/src/app/angular-intro/cours/cours.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { CoursComponent } from './cours.component'; + +console.log('`CourS` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + CoursComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + CoursComponent, + ], +}) +export class CoursModule {} diff --git a/angular-starter/src/app/angular-intro/cours/index.ts b/angular-starter/src/app/angular-intro/cours/index.ts new file mode 100644 index 0000000..b888bed --- /dev/null +++ b/angular-starter/src/app/angular-intro/cours/index.ts @@ -0,0 +1 @@ +export * from './cours.module'; diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css index c04fc42..6528e9d 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.css +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -3,3 +3,7 @@ p { font-family: Arial, Helvetica, sans-serif; font-size: 250%; } +.box { + border: 5px solid mediumslateblue; + padding: 15px; +} diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 8ef7e60..6d65878 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -1,3 +1,6 @@
-

Courses componernt {{ text }}

+

Courses component {{ text }}

+
+ +
diff --git a/angular-starter/src/app/angular-intro/courses/courses.module.ts b/angular-starter/src/app/angular-intro/courses/courses.module.ts new file mode 100644 index 0000000..85336cc --- /dev/null +++ b/angular-starter/src/app/angular-intro/courses/courses.module.ts @@ -0,0 +1,24 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { CoursesComponent } from './courses.component'; +import { CoursModule } from '../cours'; + +console.log('`Courses` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + CoursesComponent, + ], + imports: [ + CommonModule, + CoursModule, + ], + exports: [ + CoursesComponent, + ], +}) +export class CoursesModule {} diff --git a/angular-starter/src/app/angular-intro/courses/index.ts b/angular-starter/src/app/angular-intro/courses/index.ts index 9b88ab4..f64ff84 100644 --- a/angular-starter/src/app/angular-intro/courses/index.ts +++ b/angular-starter/src/app/angular-intro/courses/index.ts @@ -1 +1 @@ -export * from './courses.component'; +export * from './courses.module'; From ff15874900bd11961ac239942ca4c413a4dbe9b9 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 15:45:17 +0300 Subject: [PATCH 008/108] AMP/angular-starter/features: props --- .../angular-intro.component.html | 5 +- .../angular-intro/cours/cours.component.css | 3 + .../angular-intro/cours/cours.component.html | 11 +++- .../angular-intro/cours/cours.component.ts | 12 +++- .../src/app/angular-intro/course.ts | 8 +++ .../courses/courses.component.html | 5 +- .../courses/courses.component.ts | 3 + .../angular-intro/courses/courses.module.ts | 2 +- .../src/app/angular-intro/mock-courses.ts | 64 +++++++++++++++++++ angular-starter/src/app/angular-intro/time.ts | 5 ++ 10 files changed, 113 insertions(+), 5 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/course.ts create mode 100644 angular-starter/src/app/angular-intro/mock-courses.ts create mode 100644 angular-starter/src/app/angular-intro/time.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index c92e6cd..2501a85 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -1,6 +1,9 @@
+
-

+
+ +
diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.css b/angular-starter/src/app/angular-intro/cours/cours.component.css index c04fc42..143441b 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.css +++ b/angular-starter/src/app/angular-intro/cours/cours.component.css @@ -3,3 +3,6 @@ p { font-family: Arial, Helvetica, sans-serif; font-size: 250%; } +.tags { + border: 1px solid green; +} diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html index 2e27e9f..c20e319 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.html +++ b/angular-starter/src/app/angular-intro/cours/cours.component.html @@ -1,3 +1,12 @@
-

CourS componernt {{ text }}

+

CourS component {{ text }}

+
+

ID: {{coursItem.id}}

+

Name: {{coursItem.name}}

+

Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s

+

+ + {{tag}} + +

diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/cours/cours.component.ts index 84b036a..5cf708f 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.ts +++ b/angular-starter/src/app/angular-intro/cours/cours.component.ts @@ -1,4 +1,8 @@ -import { Component } from '@angular/core'; +import { + Component, + Input, +} from '@angular/core'; +import { Course } from '../course'; @Component({ selector: 'cours', @@ -6,6 +10,12 @@ import { Component } from '@angular/core'; styleUrls: ['./cours.component.css'] }) export class CoursComponent { + @Input() public coursItem: Course = { + id: 0, + name: 'NoName', + duration: { hours: -1, minuts: -1, seconds: -1 }, + tags: ['error'], + }; protected text = 'CourS TEXT'; constructor() { console.log('cours-constructor'); diff --git a/angular-starter/src/app/angular-intro/course.ts b/angular-starter/src/app/angular-intro/course.ts new file mode 100644 index 0000000..2c1a40c --- /dev/null +++ b/angular-starter/src/app/angular-intro/course.ts @@ -0,0 +1,8 @@ +import { Time } from './time'; + +export class Course { + public id: number; + public name: string; + public duration: Time; + public tags: string[]; +} diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 6d65878..1e45aeb 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -1,6 +1,9 @@

Courses component {{ text }}

- + +
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index d38f12b..613ba5f 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,5 +1,7 @@ import { Component } from '@angular/core'; +import { COURSES } from '../mock-courses'; + @Component({ selector: 'courses', templateUrl: './courses.component.html', @@ -7,6 +9,7 @@ import { Component } from '@angular/core'; }) export class CoursesComponent { protected text = 'Courses TEXT'; + protected couresArr = COURSES; constructor() { console.log('courses-constructor'); } diff --git a/angular-starter/src/app/angular-intro/courses/courses.module.ts b/angular-starter/src/app/angular-intro/courses/courses.module.ts index 85336cc..7c91e73 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.module.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.module.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { CoursesComponent } from './courses.component'; +import { CoursesComponent } from './courses.component'; import { CoursModule } from '../cours'; console.log('`Courses` bundle loaded asynchronously'); diff --git a/angular-starter/src/app/angular-intro/mock-courses.ts b/angular-starter/src/app/angular-intro/mock-courses.ts new file mode 100644 index 0000000..3757a82 --- /dev/null +++ b/angular-starter/src/app/angular-intro/mock-courses.ts @@ -0,0 +1,64 @@ +import { Course } from './course'; + +export const COURSES: Course[] = [ + { + id: 11, + name: 'Mr. Nice', + duration: { hours: 12, minuts: 20, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + }, + { + id: 12, + name: 'Narco', + duration: { hours: 1, minuts: 30, seconds: 25 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + }, + { + id: 13, + name: 'Bombasto', + duration: { hours: 2, minuts: 50, seconds: 10 }, + tags: ['mock-course', 'tag1'] + }, + { + id: 14, + name: 'Celeritas', + duration: { hours: 5, minuts: 5, seconds: 8 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + }, + { + id: 15, + name: 'Magneta', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + }, + { + id: 16, + name: 'RubberMan', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2'], + }, + { + id: 17, + name: 'Dynama', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2'], + }, + { + id: 18, + name: 'Dr IQ', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + }, + { + id: 19, + name: 'Magma', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3'], + }, + { + id: 20, + name: 'Tornado', + duration: { hours: 0, minuts: 0, seconds: 0 }, + tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + }, +]; diff --git a/angular-starter/src/app/angular-intro/time.ts b/angular-starter/src/app/angular-intro/time.ts new file mode 100644 index 0000000..c3797b9 --- /dev/null +++ b/angular-starter/src/app/angular-intro/time.ts @@ -0,0 +1,5 @@ +export class Time { + public hours: number; + public minuts: number; + public seconds: number; +} From ba5bb4a909ca4a3875d3219a3ad5e8f2abef76ca Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 21 Mar 2018 18:32:00 +0300 Subject: [PATCH 009/108] AMP/angular-starter/features: try to bind handler --- .../angular-intro/cours/cours.component.html | 13 ++++++++----- .../app/angular-intro/cours/cours.component.ts | 4 ++-- .../app/angular-intro/cours/cours.module.ts | 3 ++- .../src/app/angular-intro/course.ts | 1 + .../courses/courses.component.html | 5 ++++- .../angular-intro/courses/courses.component.ts | 18 ++++++++++++++++++ .../src/app/angular-intro/mock-courses.ts | 12 +++++++++++- 7 files changed, 46 insertions(+), 10 deletions(-) diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html index c20e319..9132014 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.html +++ b/angular-starter/src/app/angular-intro/cours/cours.component.html @@ -1,9 +1,12 @@
-

CourS component {{ text }}

-
-

ID: {{coursItem.id}}

-

Name: {{coursItem.name}}

-

Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s

+

+ ID: {{coursItem.id}} + Name: {{coursItem.name}} + Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s +

+

{{tag}} diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/cours/cours.component.ts index 5cf708f..bbcb3a8 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.ts +++ b/angular-starter/src/app/angular-intro/cours/cours.component.ts @@ -10,13 +10,13 @@ import { Course } from '../course'; styleUrls: ['./cours.component.css'] }) export class CoursComponent { - @Input() public coursItem: Course = { + @Input() protected coursItem: Course = { id: 0, name: 'NoName', duration: { hours: -1, minuts: -1, seconds: -1 }, tags: ['error'], + isAccept: false, }; - protected text = 'CourS TEXT'; constructor() { console.log('cours-constructor'); } diff --git a/angular-starter/src/app/angular-intro/cours/cours.module.ts b/angular-starter/src/app/angular-intro/cours/cours.module.ts index 38b6207..86b6cfe 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.module.ts +++ b/angular-starter/src/app/angular-intro/cours/cours.module.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; - +import { FormsModule } from '@angular/forms'; import { CoursComponent } from './cours.component'; console.log('`CourS` bundle loaded asynchronously'); @@ -14,6 +14,7 @@ console.log('`CourS` bundle loaded asynchronously'); ], imports: [ CommonModule, + FormsModule, ], exports: [ CoursComponent, diff --git a/angular-starter/src/app/angular-intro/course.ts b/angular-starter/src/app/angular-intro/course.ts index 2c1a40c..8afb695 100644 --- a/angular-starter/src/app/angular-intro/course.ts +++ b/angular-starter/src/app/angular-intro/course.ts @@ -5,4 +5,5 @@ export class Course { public name: string; public duration: Time; public tags: string[]; + public isAccept: boolean; } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 1e45aeb..d9e2d01 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -1,9 +1,12 @@

Courses component {{ text }}

+

Accepted count: {{count}}

+
+ -
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 613ba5f..528105c 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -10,7 +10,25 @@ import { COURSES } from '../mock-courses'; export class CoursesComponent { protected text = 'Courses TEXT'; protected couresArr = COURSES; + protected count = 0; + constructor() { console.log('courses-constructor'); + this.count = this.couresArr + .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); + } + + public recalc(): number { + console.log('recalculate count'); + return this.count = this.couresArr + .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } + + public toggle(id: number): void { + console.log(`toggle by id=${id}`); + const cours = this.couresArr.find((item) => item.id === id); + cours.isAccept = !cours.isAccept; + this.recalc(); + } + } diff --git a/angular-starter/src/app/angular-intro/mock-courses.ts b/angular-starter/src/app/angular-intro/mock-courses.ts index 3757a82..887e890 100644 --- a/angular-starter/src/app/angular-intro/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/mock-courses.ts @@ -6,59 +6,69 @@ export const COURSES: Course[] = [ name: 'Mr. Nice', duration: { hours: 12, minuts: 20, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + isAccept: true, }, { id: 12, name: 'Narco', duration: { hours: 1, minuts: 30, seconds: 25 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + isAccept: false, }, { id: 13, name: 'Bombasto', duration: { hours: 2, minuts: 50, seconds: 10 }, - tags: ['mock-course', 'tag1'] + tags: ['mock-course', 'tag1'], + isAccept: true, }, { id: 14, name: 'Celeritas', duration: { hours: 5, minuts: 5, seconds: 8 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], + isAccept: false, }, { id: 15, name: 'Magneta', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + isAccept: false, }, { id: 16, name: 'RubberMan', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2'], + isAccept: false, }, { id: 17, name: 'Dynama', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2'], + isAccept: false, }, { id: 18, name: 'Dr IQ', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + isAccept: false, }, { id: 19, name: 'Magma', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3'], + isAccept: false, }, { id: 20, name: 'Tornado', duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], + isAccept: true, }, ]; From e138932da8823395df6278483e0997ff55c419de Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 22 Mar 2018 13:50:22 +0300 Subject: [PATCH 010/108] AMP/angular-starter/features: implement accept-counter --- .../src/app/angular-intro/core/entities/1.ts | 0 .../{ => core/entities}/course.ts | 0 .../app/angular-intro/core/entities/index.ts | 1 + .../angular-intro/{ => core/entities}/time.ts | 0 .../src/app/angular-intro/core/index.ts | 2 ++ .../src/app/angular-intro/core/mocks/index.ts | 1 + .../{ => core/mocks}/mock-courses.ts | 2 +- .../angular-intro/cours/cours.component.html | 2 +- .../angular-intro/cours/cours.component.ts | 15 +++++++++++++- .../courses/courses.component.css | 5 +++++ .../courses/courses.component.html | 20 +++++++++---------- .../courses/courses.component.ts | 16 +++++++-------- 12 files changed, 42 insertions(+), 22 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/core/entities/1.ts rename angular-starter/src/app/angular-intro/{ => core/entities}/course.ts (100%) create mode 100644 angular-starter/src/app/angular-intro/core/entities/index.ts rename angular-starter/src/app/angular-intro/{ => core/entities}/time.ts (100%) create mode 100644 angular-starter/src/app/angular-intro/core/index.ts create mode 100644 angular-starter/src/app/angular-intro/core/mocks/index.ts rename angular-starter/src/app/angular-intro/{ => core/mocks}/mock-courses.ts (97%) diff --git a/angular-starter/src/app/angular-intro/core/entities/1.ts b/angular-starter/src/app/angular-intro/core/entities/1.ts new file mode 100644 index 0000000..e69de29 diff --git a/angular-starter/src/app/angular-intro/course.ts b/angular-starter/src/app/angular-intro/core/entities/course.ts similarity index 100% rename from angular-starter/src/app/angular-intro/course.ts rename to angular-starter/src/app/angular-intro/core/entities/course.ts diff --git a/angular-starter/src/app/angular-intro/core/entities/index.ts b/angular-starter/src/app/angular-intro/core/entities/index.ts new file mode 100644 index 0000000..8e278d1 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/entities/index.ts @@ -0,0 +1 @@ +export * from './course'; diff --git a/angular-starter/src/app/angular-intro/time.ts b/angular-starter/src/app/angular-intro/core/entities/time.ts similarity index 100% rename from angular-starter/src/app/angular-intro/time.ts rename to angular-starter/src/app/angular-intro/core/entities/time.ts diff --git a/angular-starter/src/app/angular-intro/core/index.ts b/angular-starter/src/app/angular-intro/core/index.ts new file mode 100644 index 0000000..22b2396 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/index.ts @@ -0,0 +1,2 @@ +export * from './entities'; +export * from './mocks'; diff --git a/angular-starter/src/app/angular-intro/core/mocks/index.ts b/angular-starter/src/app/angular-intro/core/mocks/index.ts new file mode 100644 index 0000000..b02b60f --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/mocks/index.ts @@ -0,0 +1 @@ +export * from './mock-courses'; diff --git a/angular-starter/src/app/angular-intro/mock-courses.ts b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts similarity index 97% rename from angular-starter/src/app/angular-intro/mock-courses.ts rename to angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts index 887e890..ee9526b 100644 --- a/angular-starter/src/app/angular-intro/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts @@ -1,4 +1,4 @@ -import { Course } from './course'; +import { Course } from '../entities'; export const COURSES: Course[] = [ { diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html index 9132014..5e90263 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.html +++ b/angular-starter/src/app/angular-intro/cours/cours.component.html @@ -6,7 +6,7 @@

+ (click)="localAccept(coursItem.id)">Accepted

{{tag}} diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/cours/cours.component.ts index bbcb3a8..fdca4f8 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.ts +++ b/angular-starter/src/app/angular-intro/cours/cours.component.ts @@ -1,8 +1,10 @@ import { Component, Input, + Output, + EventEmitter, } from '@angular/core'; -import { Course } from '../course'; +import { Course } from '../core'; @Component({ selector: 'cours', @@ -17,7 +19,18 @@ export class CoursComponent { tags: ['error'], isAccept: false, }; + + @Output('handler') protected handler = new EventEmitter(); + constructor() { console.log('cours-constructor'); } + + protected localAccept(id: number) { + console.log(`cours-local method from id=${id}; this.coursItem=`); + console.log(this.coursItem); + this.handler.emit({ + value: id, + }); + } } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css index 6528e9d..78a70f1 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.css +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -7,3 +7,8 @@ p { border: 5px solid mediumslateblue; padding: 15px; } + +:host /deep/ cours:not(:last-child) div{ + border-bottom: 3px solid rgb(41, 51, 189); + margin-bottom: 7px; +} diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index d9e2d01..5d63066 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -1,12 +1,10 @@ -

-

Courses component {{ text }}

-
-

Accepted count: {{count}}

-
- - -
+

Courses component {{ text }}

+
+

Accepted count: {{count}}

+
+ +
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 528105c..87c0ef0 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; -import { COURSES } from '../mock-courses'; +import { COURSES } from '../core/mocks'; @Component({ selector: 'courses', @@ -14,19 +14,19 @@ export class CoursesComponent { constructor() { console.log('courses-constructor'); - this.count = this.couresArr - .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); + this.recalc(); } - public recalc(): number { + public recalc() { console.log('recalculate count'); - return this.count = this.couresArr - .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); + this.count = this.couresArr + .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } - public toggle(id: number): void { + public toggle(id: number) { console.log(`toggle by id=${id}`); - const cours = this.couresArr.find((item) => item.id === id); + const cours = this.couresArr + .find((item) => item.id === id); cours.isAccept = !cours.isAccept; this.recalc(); } From 11b9b9e616fc472e23471674b02653fd1d12b17f Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 22 Mar 2018 14:20:24 +0300 Subject: [PATCH 011/108] AMP/angular-starter/feature: hog for items|need fix --- .../src/app/angular-intro/cours/cours.component.css | 2 +- .../src/app/angular-intro/cours/cours.component.html | 7 ++----- .../src/app/angular-intro/cours/cours.component.ts | 1 + .../app/angular-intro/courses/courses.component.ts | 11 +++++++++-- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.css b/angular-starter/src/app/angular-intro/cours/cours.component.css index 143441b..7c28367 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.css +++ b/angular-starter/src/app/angular-intro/cours/cours.component.css @@ -4,5 +4,5 @@ p { font-size: 250%; } .tags { - border: 1px solid green; + border: 3px solid green; } diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html index 5e90263..7bb495f 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.html +++ b/angular-starter/src/app/angular-intro/cours/cours.component.html @@ -1,9 +1,6 @@
-

- ID: {{coursItem.id}} - Name: {{coursItem.name}} - Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s -

+

ID: {{coursItem.id}} | Name: {{coursItem.name}}

+

Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s

diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/cours/cours.component.ts index fdca4f8..32eb877 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.ts +++ b/angular-starter/src/app/angular-intro/cours/cours.component.ts @@ -27,6 +27,7 @@ export class CoursComponent { } protected localAccept(id: number) { + this.coursItem.isAccept = !this.coursItem.isAccept; console.log(`cours-local method from id=${id}; this.coursItem=`); console.log(this.coursItem); this.handler.emit({ diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 87c0ef0..442fd58 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -26,9 +26,16 @@ export class CoursesComponent { public toggle(id: number) { console.log(`toggle by id=${id}`); const cours = this.couresArr - .find((item) => item.id === id); - cours.isAccept = !cours.isAccept; + // .find((item) => item.id === id); + // cours.isAccept = !cours.isAccept; + .filter((item) => item.id <= id) + .forEach((element) => { + element.isAccept = true; + }); + console.log('forcibly:'); this.recalc(); + console.log('look this:'); + console.log(this.couresArr); } } From 60cd4dd6e0e457916407de71287594d52c533d6a Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 22 Mar 2018 15:30:58 +0300 Subject: [PATCH 012/108] AMP/angular-starter/fix: cours-> course --- .../app/angular-intro/angular-intro.module.ts | 4 ++-- .../angular-intro/cours/cours.component.html | 12 ------------ .../src/app/angular-intro/cours/index.ts | 1 - .../course.component.css} | 0 .../angular-intro/course/course.component.html | 12 ++++++++++++ .../course.component.ts} | 18 +++++++++--------- .../course.module.ts} | 10 +++++----- .../src/app/angular-intro/course/index.ts | 1 + .../courses/courses.component.html | 8 ++++---- .../angular-intro/courses/courses.component.ts | 4 ++-- .../angular-intro/courses/courses.module.ts | 4 ++-- 11 files changed, 37 insertions(+), 37 deletions(-) delete mode 100644 angular-starter/src/app/angular-intro/cours/cours.component.html delete mode 100644 angular-starter/src/app/angular-intro/cours/index.ts rename angular-starter/src/app/angular-intro/{cours/cours.component.css => course/course.component.css} (100%) create mode 100644 angular-starter/src/app/angular-intro/course/course.component.html rename angular-starter/src/app/angular-intro/{cours/cours.component.ts => course/course.component.ts} (53%) rename angular-starter/src/app/angular-intro/{cours/cours.module.ts => course/course.module.ts} (62%) create mode 100644 angular-starter/src/app/angular-intro/course/index.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index e8f1bee..51e7a65 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -4,7 +4,7 @@ import { NgModule } from '@angular/core'; import { HeaderComponent } from './header'; import { ToolbarModule } from './toolbar'; import { CoursesModule } from './courses'; -import { CoursModule } from './cours'; +import { CourseModule } from './course'; import { FooterComponent } from './footer'; import { IntroComponent } from './angular-intro.component'; @@ -27,7 +27,7 @@ console.log('`INTRO` bundle loaded asynchronously'); ToolbarModule, CoursesModule, - CoursModule, + CourseModule, ], exports: [ IntroComponent diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.html b/angular-starter/src/app/angular-intro/cours/cours.component.html deleted file mode 100644 index 7bb495f..0000000 --- a/angular-starter/src/app/angular-intro/cours/cours.component.html +++ /dev/null @@ -1,12 +0,0 @@ -
-

ID: {{coursItem.id}} | Name: {{coursItem.name}}

-

Duration: {{coursItem.duration.hours}}h {{coursItem.duration.minuts}}m {{coursItem.duration.seconds}}s

- -

- - {{tag}} - -

-
diff --git a/angular-starter/src/app/angular-intro/cours/index.ts b/angular-starter/src/app/angular-intro/cours/index.ts deleted file mode 100644 index b888bed..0000000 --- a/angular-starter/src/app/angular-intro/cours/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './cours.module'; diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.css b/angular-starter/src/app/angular-intro/course/course.component.css similarity index 100% rename from angular-starter/src/app/angular-intro/cours/cours.component.css rename to angular-starter/src/app/angular-intro/course/course.component.css diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html new file mode 100644 index 0000000..bb028b4 --- /dev/null +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -0,0 +1,12 @@ +
+

ID: {{courseItem.id}} | Name: {{courseItem.name}}

+

Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

+ +

+ + {{tag}} + +

+
diff --git a/angular-starter/src/app/angular-intro/cours/cours.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts similarity index 53% rename from angular-starter/src/app/angular-intro/cours/cours.component.ts rename to angular-starter/src/app/angular-intro/course/course.component.ts index 32eb877..32a9704 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -7,12 +7,12 @@ import { import { Course } from '../core'; @Component({ - selector: 'cours', - templateUrl: './cours.component.html', - styleUrls: ['./cours.component.css'] + selector: 'course', + templateUrl: './course.component.html', + styleUrls: ['./course.component.css'] }) -export class CoursComponent { - @Input() protected coursItem: Course = { +export class CourseComponent { + @Input() protected courseItem: Course = { id: 0, name: 'NoName', duration: { hours: -1, minuts: -1, seconds: -1 }, @@ -23,13 +23,13 @@ export class CoursComponent { @Output('handler') protected handler = new EventEmitter(); constructor() { - console.log('cours-constructor'); + console.log('course-constructor'); } protected localAccept(id: number) { - this.coursItem.isAccept = !this.coursItem.isAccept; - console.log(`cours-local method from id=${id}; this.coursItem=`); - console.log(this.coursItem); + this.courseItem.isAccept = !this.courseItem.isAccept; + console.log(`course-local method from id=${id}; this.courseItem=`); + console.log(this.courseItem); this.handler.emit({ value: id, }); diff --git a/angular-starter/src/app/angular-intro/cours/cours.module.ts b/angular-starter/src/app/angular-intro/course/course.module.ts similarity index 62% rename from angular-starter/src/app/angular-intro/cours/cours.module.ts rename to angular-starter/src/app/angular-intro/course/course.module.ts index 86b6cfe..63e1604 100644 --- a/angular-starter/src/app/angular-intro/cours/cours.module.ts +++ b/angular-starter/src/app/angular-intro/course/course.module.ts @@ -1,23 +1,23 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; -import { CoursComponent } from './cours.component'; +import { CourseComponent } from './course.component'; -console.log('`CourS` bundle loaded asynchronously'); +console.log('`CoursE` bundle loaded asynchronously'); @NgModule({ declarations: [ /** * Components / Directives/ Pipes */ - CoursComponent, + CourseComponent, ], imports: [ CommonModule, FormsModule, ], exports: [ - CoursComponent, + CourseComponent, ], }) -export class CoursModule {} +export class CourseModule {} diff --git a/angular-starter/src/app/angular-intro/course/index.ts b/angular-starter/src/app/angular-intro/course/index.ts new file mode 100644 index 0000000..1aa8533 --- /dev/null +++ b/angular-starter/src/app/angular-intro/course/index.ts @@ -0,0 +1 @@ +export * from './course.module'; diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 5d63066..e627815 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -2,9 +2,9 @@

Accepted count: {{count}}


- - + + >
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 442fd58..1afb7a2 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -25,9 +25,9 @@ export class CoursesComponent { public toggle(id: number) { console.log(`toggle by id=${id}`); - const cours = this.couresArr + const course = this.couresArr // .find((item) => item.id === id); - // cours.isAccept = !cours.isAccept; + // course.isAccept = !course.isAccept; .filter((item) => item.id <= id) .forEach((element) => { element.isAccept = true; diff --git a/angular-starter/src/app/angular-intro/courses/courses.module.ts b/angular-starter/src/app/angular-intro/courses/courses.module.ts index 7c91e73..be8ed6b 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.module.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.module.ts @@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { CoursesComponent } from './courses.component'; -import { CoursModule } from '../cours'; +import { CourseModule } from '../course'; console.log('`Courses` bundle loaded asynchronously'); @@ -15,7 +15,7 @@ console.log('`Courses` bundle loaded asynchronously'); ], imports: [ CommonModule, - CoursModule, + CourseModule, ], exports: [ CoursesComponent, From 2e684d75b092f42d1aa95bd1296ab86272d1689e Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 22 Mar 2018 16:14:09 +0300 Subject: [PATCH 013/108] AMP/angular-starter/features: ngModel --- .../course/course.component.html | 7 +++--- .../angular-intro/course/course.component.ts | 1 + .../courses/courses.component.ts | 25 +++---------------- 3 files changed, 9 insertions(+), 24 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index bb028b4..cca4914 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -1,9 +1,10 @@

ID: {{courseItem.id}} | Name: {{courseItem.name}}

Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

- + +

{{tag}} diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 32a9704..45a9ff0 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -4,6 +4,7 @@ import { Output, EventEmitter, } from '@angular/core'; +import { NgForm } from '@angular/forms'; import { Course } from '../core'; @Component({ diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 1afb7a2..f3aeee4 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -10,32 +10,15 @@ import { COURSES } from '../core/mocks'; export class CoursesComponent { protected text = 'Courses TEXT'; protected couresArr = COURSES; - protected count = 0; constructor() { - console.log('courses-constructor'); - this.recalc(); + console.log('courses-constructor, Arr:'); + console.log(this.couresArr); } - - public recalc() { + get count() { console.log('recalculate count'); - this.count = this.couresArr + return this.couresArr .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } - public toggle(id: number) { - console.log(`toggle by id=${id}`); - const course = this.couresArr - // .find((item) => item.id === id); - // course.isAccept = !course.isAccept; - .filter((item) => item.id <= id) - .forEach((element) => { - element.isAccept = true; - }); - console.log('forcibly:'); - this.recalc(); - console.log('look this:'); - console.log(this.couresArr); - } - } From fac7bb4f2e037390253461cb0df2d260ae3fc03d Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 23 Mar 2018 12:16:13 +0300 Subject: [PATCH 014/108] AMP/angular-starter/features: task1-templates --- .../angular-intro.component.html | 3 --- .../app/angular-intro/angular-intro.module.ts | 5 ++-- .../src/app/angular-intro/core/entities/1.ts | 0 .../app/angular-intro/core/entities/course.ts | 8 +++--- .../app/angular-intro/core/entities/date.ts | 16 ++++++++++++ .../app/angular-intro/core/entities/index.ts | 1 + .../app/angular-intro/core/entities/time.ts | 2 +- .../angular-intro/core/mocks/mock-courses.ts | 21 ++++++++++++++++ .../angular-intro/course/course.component.css | 13 +++++++++- .../course/course.component.html | 22 +++++++++------- .../angular-intro/course/course.component.ts | 3 +++ .../src/app/angular-intro/course/index.ts | 1 + .../courses/courses.component.css | 2 +- .../courses/courses.component.html | 2 +- .../src/app/angular-intro/courses/index.ts | 1 + .../angular-intro/header/header.component.css | 25 ++++++++++++++++++- .../header/header.component.html | 12 ++++++++- .../angular-intro/header/header.component.ts | 6 ++--- .../app/angular-intro/header/header.module.ts | 24 ++++++++++++++++++ .../src/app/angular-intro/header/index.ts | 1 + .../src/app/angular-intro/index.ts | 1 + .../src/app/angular-intro/loginform/index.ts | 2 ++ .../loginform/loginform.component.css | 4 +++ .../loginform/loginform.component.html | 5 ++++ .../loginform/loginform.component.ts | 16 ++++++++++++ .../loginform/loginform.module.ts | 22 ++++++++++++++++ .../src/app/angular-intro/toolbar/index.ts | 1 + .../app/angular-intro/toolbar/search/index.ts | 1 + .../toolbar/search/search.component.css | 3 +++ .../toolbar/search/search.component.html | 4 +++ .../toolbar/search/search.component.ts | 12 +++++++++ .../toolbar/toolbar.component.css | 2 ++ .../toolbar/toolbar.component.html | 3 ++- .../toolbar/toolbar.component.ts | 2 +- .../angular-intro/toolbar/toolbar.module.ts | 3 ++- 35 files changed, 219 insertions(+), 30 deletions(-) delete mode 100644 angular-starter/src/app/angular-intro/core/entities/1.ts create mode 100644 angular-starter/src/app/angular-intro/core/entities/date.ts create mode 100644 angular-starter/src/app/angular-intro/header/header.module.ts create mode 100644 angular-starter/src/app/angular-intro/loginform/index.ts create mode 100644 angular-starter/src/app/angular-intro/loginform/loginform.component.css create mode 100644 angular-starter/src/app/angular-intro/loginform/loginform.component.html create mode 100644 angular-starter/src/app/angular-intro/loginform/loginform.component.ts create mode 100644 angular-starter/src/app/angular-intro/loginform/loginform.module.ts create mode 100644 angular-starter/src/app/angular-intro/toolbar/search/index.ts create mode 100644 angular-starter/src/app/angular-intro/toolbar/search/search.component.css create mode 100644 angular-starter/src/app/angular-intro/toolbar/search/search.component.html create mode 100644 angular-starter/src/app/angular-intro/toolbar/search/search.component.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index 2501a85..a8ccb31 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -1,9 +1,6 @@

-
-
-
diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index 51e7a65..6fa5597 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { HeaderComponent } from './header'; +import { HeaderModule } from './header'; import { ToolbarModule } from './toolbar'; import { CoursesModule } from './courses'; import { CourseModule } from './course'; @@ -17,7 +17,7 @@ console.log('`INTRO` bundle loaded asynchronously'); * Components / Directives/ Pipes */ - HeaderComponent, + // HeaderComponent, FooterComponent, IntroComponent, @@ -25,6 +25,7 @@ console.log('`INTRO` bundle loaded asynchronously'); imports: [ CommonModule, + HeaderModule, ToolbarModule, CoursesModule, CourseModule, diff --git a/angular-starter/src/app/angular-intro/core/entities/1.ts b/angular-starter/src/app/angular-intro/core/entities/1.ts deleted file mode 100644 index e69de29..0000000 diff --git a/angular-starter/src/app/angular-intro/core/entities/course.ts b/angular-starter/src/app/angular-intro/core/entities/course.ts index 8afb695..5391ff6 100644 --- a/angular-starter/src/app/angular-intro/core/entities/course.ts +++ b/angular-starter/src/app/angular-intro/core/entities/course.ts @@ -1,9 +1,11 @@ -import { Time } from './time'; - +import { MyTime } from './time'; +import { MyDate } from './date'; export class Course { public id: number; public name: string; - public duration: Time; + public duration: MyTime; + public date: MyDate; public tags: string[]; public isAccept: boolean; + public text: string; } diff --git a/angular-starter/src/app/angular-intro/core/entities/date.ts b/angular-starter/src/app/angular-intro/core/entities/date.ts new file mode 100644 index 0000000..a397b5e --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/entities/date.ts @@ -0,0 +1,16 @@ +export class MyDate { + public day: number; + public month: string; + public year: number; + + constructor(d: number, m: string, y: number) { + this.day = d; + this.month = m; + this.year = y; + } + + public toString() { + console.log('tostring'); + return `d:${this.day} m:${this.month} y:${this.year}`; + } +} diff --git a/angular-starter/src/app/angular-intro/core/entities/index.ts b/angular-starter/src/app/angular-intro/core/entities/index.ts index 8e278d1..eac4c03 100644 --- a/angular-starter/src/app/angular-intro/core/entities/index.ts +++ b/angular-starter/src/app/angular-intro/core/entities/index.ts @@ -1 +1,2 @@ export * from './course'; +export * from './time'; diff --git a/angular-starter/src/app/angular-intro/core/entities/time.ts b/angular-starter/src/app/angular-intro/core/entities/time.ts index c3797b9..cf82594 100644 --- a/angular-starter/src/app/angular-intro/core/entities/time.ts +++ b/angular-starter/src/app/angular-intro/core/entities/time.ts @@ -1,4 +1,4 @@ -export class Time { +export class MyTime { public hours: number; public minuts: number; public seconds: number; diff --git a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts index ee9526b..e946efc 100644 --- a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts @@ -1,4 +1,5 @@ import { Course } from '../entities'; +import { MyDate } from '../entities/date'; export const COURSES: Course[] = [ { @@ -7,6 +8,8 @@ export const COURSES: Course[] = [ duration: { hours: 12, minuts: 20, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: true, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 12, @@ -14,6 +17,8 @@ export const COURSES: Course[] = [ duration: { hours: 1, minuts: 30, seconds: 25 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 13, @@ -21,6 +26,8 @@ export const COURSES: Course[] = [ duration: { hours: 2, minuts: 50, seconds: 10 }, tags: ['mock-course', 'tag1'], isAccept: true, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 14, @@ -28,6 +35,8 @@ export const COURSES: Course[] = [ duration: { hours: 5, minuts: 5, seconds: 8 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 15, @@ -35,6 +44,8 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 16, @@ -42,6 +53,8 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 17, @@ -49,6 +62,8 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 18, @@ -56,6 +71,8 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 19, @@ -63,6 +80,8 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3'], isAccept: false, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, { id: 20, @@ -70,5 +89,7 @@ export const COURSES: Course[] = [ duration: { hours: 0, minuts: 0, seconds: 0 }, tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: true, + text: 'Just course description, or any other text.', + date: new MyDate(0, '###', 9999), }, ]; diff --git a/angular-starter/src/app/angular-intro/course/course.component.css b/angular-starter/src/app/angular-intro/course/course.component.css index 7c28367..12c9c5d 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.css +++ b/angular-starter/src/app/angular-intro/course/course.component.css @@ -4,5 +4,16 @@ p { font-size: 250%; } .tags { - border: 3px solid green; + padding: 5px; + display: flex; + justify-content: center; + background-color: lawngreen; +} +.tags>span:not(:last-child)::after{ + content: "|"; +} + +.controls { + display: flex; + justify-content: space-around; } diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index cca4914..368d026 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -1,13 +1,17 @@
-

ID: {{courseItem.id}} | Name: {{courseItem.name}}

-

Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

- - +

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

+

Date: {{courseItem.date}}

+
+ + + + +

- - {{tag}} - + {{tag}}

+

{{courseItem.text}}

diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 45a9ff0..0f7a172 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -6,6 +6,7 @@ import { } from '@angular/core'; import { NgForm } from '@angular/forms'; import { Course } from '../core'; +import { MyDate } from '../core/entities/date'; @Component({ selector: 'course', @@ -19,6 +20,8 @@ export class CourseComponent { duration: { hours: -1, minuts: -1, seconds: -1 }, tags: ['error'], isAccept: false, + text: 'error: it is an empty text', + date: new MyDate (-1, '$$$', 1111), }; @Output('handler') protected handler = new EventEmitter(); diff --git a/angular-starter/src/app/angular-intro/course/index.ts b/angular-starter/src/app/angular-intro/course/index.ts index 1aa8533..d3837c7 100644 --- a/angular-starter/src/app/angular-intro/course/index.ts +++ b/angular-starter/src/app/angular-intro/course/index.ts @@ -1 +1,2 @@ +export * from './course.component'; export * from './course.module'; diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css index 78a70f1..b23cfaf 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.css +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -8,7 +8,7 @@ p { padding: 15px; } -:host /deep/ cours:not(:last-child) div{ +:host /deep/ course:not(:last-child)>div{ border-bottom: 3px solid rgb(41, 51, 189); margin-bottom: 7px; } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index e627815..866357b 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -2,7 +2,7 @@

Accepted count: {{count}}


- + null div { border: 1px solid black; + padding: 15px; text-align: center; + display: flex; + justify-content: space-between; +} + +.logo-box { + position: relative; + width: 100px; /* Произвольная ширина, которая требуется для блока */ +} +.logo-box::before { + content: ""; + display: block; + padding-top: 100%; /* С помощью этого padding мы задаем высоту равную ширине блока */ +} +.logo-content { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + background-size: cover; /* Растягиваем фон под размеры блока, если требуется */ + border: 3px solid red; + background-color: rgba(255, 0, 0, 0.925); } diff --git a/angular-starter/src/app/angular-intro/header/header.component.html b/angular-starter/src/app/angular-intro/header/header.component.html index 04e58e3..6fe4c5b 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.html +++ b/angular-starter/src/app/angular-intro/header/header.component.html @@ -1,3 +1,13 @@
-

I'm header

+
+
+

logo-img

+

not found

+
+
+
+

courses

+

which element is it?

+
+
diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index 014d433..26e4633 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -6,10 +6,8 @@ import { ActivatedRoute } from '@angular/router'; @Component({ selector: 'app-header', - styleUrls: [ - './header.component.css' - ], - templateUrl: './header.component.html' + templateUrl: './header.component.html', + styleUrls: ['./header.component.css'], }) export class HeaderComponent implements OnInit { diff --git a/angular-starter/src/app/angular-intro/header/header.module.ts b/angular-starter/src/app/angular-intro/header/header.module.ts new file mode 100644 index 0000000..4e8c748 --- /dev/null +++ b/angular-starter/src/app/angular-intro/header/header.module.ts @@ -0,0 +1,24 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { HeaderComponent } from './header.component'; +import { LoginFormModule } from '../loginform'; + +console.log('`Header` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + HeaderComponent, + ], + imports: [ + CommonModule, + LoginFormModule, + ], + exports: [ + HeaderComponent, + ], +}) +export class HeaderModule {} diff --git a/angular-starter/src/app/angular-intro/header/index.ts b/angular-starter/src/app/angular-intro/header/index.ts index be62c26..3dd1ca5 100644 --- a/angular-starter/src/app/angular-intro/header/index.ts +++ b/angular-starter/src/app/angular-intro/header/index.ts @@ -1 +1,2 @@ export * from './header.component'; +export * from './header.module'; diff --git a/angular-starter/src/app/angular-intro/index.ts b/angular-starter/src/app/angular-intro/index.ts index 5547aac..49caabd 100644 --- a/angular-starter/src/app/angular-intro/index.ts +++ b/angular-starter/src/app/angular-intro/index.ts @@ -1 +1,2 @@ +export * from './angular-intro.component'; export * from './angular-intro.module'; diff --git a/angular-starter/src/app/angular-intro/loginform/index.ts b/angular-starter/src/app/angular-intro/loginform/index.ts new file mode 100644 index 0000000..677e81f --- /dev/null +++ b/angular-starter/src/app/angular-intro/loginform/index.ts @@ -0,0 +1,2 @@ +export * from './loginform.component'; +export * from './loginform.module'; diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.css b/angular-starter/src/app/angular-intro/loginform/loginform.component.css new file mode 100644 index 0000000..24ac126 --- /dev/null +++ b/angular-starter/src/app/angular-intro/loginform/loginform.component.css @@ -0,0 +1,4 @@ +div { + background-color: lightgreen; + padding: 15px; +} diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.html b/angular-starter/src/app/angular-intro/loginform/loginform.component.html new file mode 100644 index 0000000..451ab5a --- /dev/null +++ b/angular-starter/src/app/angular-intro/loginform/loginform.component.html @@ -0,0 +1,5 @@ +
+

I'm loginform

+

User Login

+ +
diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.ts b/angular-starter/src/app/angular-intro/loginform/loginform.component.ts new file mode 100644 index 0000000..a8ea1ab --- /dev/null +++ b/angular-starter/src/app/angular-intro/loginform/loginform.component.ts @@ -0,0 +1,16 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +@Component({ + selector: 'login', + templateUrl: './loginform.component.html', + styleUrls: ['./loginform.component.css'] +}) + +export class LoginFormComponent implements OnInit { + public ngOnInit() { + console.log('hello `loginform` component'); + } +} diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.module.ts b/angular-starter/src/app/angular-intro/loginform/loginform.module.ts new file mode 100644 index 0000000..310d3cb --- /dev/null +++ b/angular-starter/src/app/angular-intro/loginform/loginform.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { LoginFormComponent } from './loginform.component'; + +console.log('`loginform` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + LoginFormComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + LoginFormComponent, + ], +}) +export class LoginFormModule {} diff --git a/angular-starter/src/app/angular-intro/toolbar/index.ts b/angular-starter/src/app/angular-intro/toolbar/index.ts index 8808858..31975f1 100644 --- a/angular-starter/src/app/angular-intro/toolbar/index.ts +++ b/angular-starter/src/app/angular-intro/toolbar/index.ts @@ -1 +1,2 @@ +export * from './toolbar.component'; export * from './toolbar.module'; diff --git a/angular-starter/src/app/angular-intro/toolbar/search/index.ts b/angular-starter/src/app/angular-intro/toolbar/search/index.ts new file mode 100644 index 0000000..47e1c98 --- /dev/null +++ b/angular-starter/src/app/angular-intro/toolbar/search/index.ts @@ -0,0 +1 @@ +export * from './search.component'; diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.css b/angular-starter/src/app/angular-intro/toolbar/search/search.component.css new file mode 100644 index 0000000..8dd9bda --- /dev/null +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.css @@ -0,0 +1,3 @@ +:host>div { + background-color: lawngreen; +} diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.html b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html new file mode 100644 index 0000000..5bd8c04 --- /dev/null +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html @@ -0,0 +1,4 @@ +
+ + +
diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts new file mode 100644 index 0000000..2be21c6 --- /dev/null +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts @@ -0,0 +1,12 @@ +import { + Component, + OnInit +} from '@angular/core'; +import { ActivatedRoute } from '@angular/router'; + +@Component({ + selector: 'search', + templateUrl: './search.component.html', + styleUrls: ['./search.component.css'], +}) +export class SearchComponent {} diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.css b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.css index c703673..febd25b 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.css +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.css @@ -1,3 +1,5 @@ div { background-color: purple; + display: flex; + justify-content: space-around; } diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html index 9fd02e6..a7f03b4 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html @@ -1,3 +1,4 @@
-

I'm toolbar

+ +
diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts index 127fcb1..95c683a 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts @@ -11,6 +11,6 @@ import { export class ToolbarComponent implements OnInit { public ngOnInit() { - console.log('hello `Detail` component'); + console.log('hello `Toolbar` component'); } } diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts index c4752a1..c87c691 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts @@ -1,6 +1,6 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; - +import { SearchComponent } from './search'; import { ToolbarComponent } from './toolbar.component'; console.log('`Tools` bundle loaded asynchronously'); @@ -11,6 +11,7 @@ console.log('`Tools` bundle loaded asynchronously'); * Components / Directives/ Pipes */ ToolbarComponent, + SearchComponent, ], imports: [ CommonModule, From 04949f9e56989df3a0438f527093074a889e66c7 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 23 Mar 2018 13:23:53 +0300 Subject: [PATCH 015/108] AMP/task2/features: logo block --- .../angular-intro/header/header.component.css | 23 +++++++------------ .../header/header.component.html | 6 +++-- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/angular-starter/src/app/angular-intro/header/header.component.css b/angular-starter/src/app/angular-intro/header/header.component.css index 9abfc89..a435d3e 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.css +++ b/angular-starter/src/app/angular-intro/header/header.component.css @@ -4,24 +4,17 @@ text-align: center; display: flex; justify-content: space-between; + align-items: center; } .logo-box { - position: relative; - width: 100px; /* Произвольная ширина, которая требуется для блока */ -} -.logo-box::before { - content: ""; - display: block; - padding-top: 100%; /* С помощью этого padding мы задаем высоту равную ширине блока */ + display: flex; + justify-content: center; + align-items: center; } .logo-content { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - background-size: cover; /* Растягиваем фон под размеры блока, если требуется */ - border: 3px solid red; - background-color: rgba(255, 0, 0, 0.925); + max-width: 200px; +} +.logo-content img { + width: 100%; } diff --git a/angular-starter/src/app/angular-intro/header/header.component.html b/angular-starter/src/app/angular-intro/header/header.component.html index 6fe4c5b..9012484 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.html +++ b/angular-starter/src/app/angular-intro/header/header.component.html @@ -1,8 +1,10 @@
-

logo-img

-

not found

+ +
+
+

Angular

From 31a3803c64d039406ef9ae364d8f5e1e2ee7a0d7 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 23 Mar 2018 13:48:02 +0300 Subject: [PATCH 016/108] AMP/task2/features: Toolbox component --- .../toolbar/search/search.component.html | 4 ++-- .../toolbar/search/search.component.ts | 18 +++++++++++++++--- .../toolbar/toolbar.component.html | 2 +- .../angular-intro/toolbar/toolbar.module.ts | 4 ++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.html b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html index 5bd8c04..e87e742 100644 --- a/angular-starter/src/app/angular-intro/toolbar/search/search.component.html +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html @@ -1,4 +1,4 @@
- - + +
diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts index 2be21c6..2294970 100644 --- a/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts @@ -1,12 +1,24 @@ +import { ActivatedRoute } from '@angular/router'; import { Component, - OnInit + OnInit, + NgModule, } from '@angular/core'; -import { ActivatedRoute } from '@angular/router'; +import { FormsModule } from '@angular/forms'; @Component({ selector: 'search', templateUrl: './search.component.html', styleUrls: ['./search.component.css'], }) -export class SearchComponent {} +export class SearchComponent { + protected searchText: string; + + constructor() { + this.searchText = ''; + } + + public find() { + console.log(`search:'${this.searchText}'`); + } +} diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html index a7f03b4..2fb9ec2 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.html @@ -1,4 +1,4 @@
- +
diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts index c87c691..d9cb585 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.module.ts @@ -1,5 +1,8 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; + +import { FormsModule } from '@angular/forms'; + import { SearchComponent } from './search'; import { ToolbarComponent } from './toolbar.component'; @@ -15,6 +18,7 @@ console.log('`Tools` bundle loaded asynchronously'); ], imports: [ CommonModule, + FormsModule, ], exports: [ ToolbarComponent, From 257c5a72675c8a77deeb1f0d6c9bc4ee815d7599 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 23 Mar 2018 14:02:50 +0300 Subject: [PATCH 017/108] AMP/task2/features: Course item --- .../src/app/angular-intro/course/course.component.html | 4 ++-- .../src/app/angular-intro/course/course.component.ts | 6 ++++++ .../src/app/angular-intro/courses/courses.component.html | 3 ++- .../src/app/angular-intro/courses/courses.component.ts | 8 ++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 368d026..3cb3e1d 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -3,10 +3,10 @@

Date: {{courseItem.date}}

- - +

null

diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index f3aeee4..cf36ef4 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -21,4 +21,12 @@ export class CoursesComponent { .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } + protected handler(id: number) { + console.log(`courses.handler id=${id}`); + } + + protected deletter(id: number) { + console.log(`courses.deletter id=${id}`); + } + } From f5759a200151c6db34b0a2ff451d2e2447ef74ad Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 23 Mar 2018 14:11:45 +0300 Subject: [PATCH 018/108] AMP/task2/features: done --- .../app/angular-intro/courses/courses.component.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index cf36ef4..3a10324 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { COURSES } from '../core/mocks'; @@ -7,14 +7,19 @@ import { COURSES } from '../core/mocks'; templateUrl: './courses.component.html', styleUrls: ['./courses.component.css'] }) -export class CoursesComponent { +export class CoursesComponent implements OnInit{ protected text = 'Courses TEXT'; - protected couresArr = COURSES; + protected couresArr = []; constructor() { console.log('courses-constructor, Arr:'); console.log(this.couresArr); } + public ngOnInit() { + console.log('OnInit'); + this.couresArr = [...COURSES]; + console.log(this.couresArr); + } get count() { console.log('recalculate count'); return this.couresArr From 2713f6860105b31f34d27666e44c3aede9457451 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 10:37:39 +0300 Subject: [PATCH 019/108] AMP/task3/features: \GetList service --- .../app/angular-intro/angular-intro.module.ts | 5 +++++ .../src/app/angular-intro/core/index.ts | 1 + .../app/angular-intro/core/services/getlist.ts | 16 ++++++++++++++++ .../src/app/angular-intro/core/services/index.ts | 1 + .../angular-intro/courses/courses.component.ts | 9 +++++---- 5 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/core/services/getlist.ts create mode 100644 angular-starter/src/app/angular-intro/core/services/index.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index 6fa5597..dbab484 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -7,6 +7,8 @@ import { CoursesModule } from './courses'; import { CourseModule } from './course'; import { FooterComponent } from './footer'; +import { GetList } from './core/services'; + import { IntroComponent } from './angular-intro.component'; console.log('`INTRO` bundle loaded asynchronously'); @@ -33,5 +35,8 @@ console.log('`INTRO` bundle loaded asynchronously'); exports: [ IntroComponent ], + providers: [ + GetList + ], }) export class IntroModule {} diff --git a/angular-starter/src/app/angular-intro/core/index.ts b/angular-starter/src/app/angular-intro/core/index.ts index 22b2396..eefedf5 100644 --- a/angular-starter/src/app/angular-intro/core/index.ts +++ b/angular-starter/src/app/angular-intro/core/index.ts @@ -1,2 +1,3 @@ export * from './entities'; +export * from './services'; export * from './mocks'; diff --git a/angular-starter/src/app/angular-intro/core/services/getlist.ts b/angular-starter/src/app/angular-intro/core/services/getlist.ts new file mode 100644 index 0000000..00451e9 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/services/getlist.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@angular/core'; + +import { COURSES } from '../mocks'; +import { Course } from '../entities'; + +@Injectable() +export class GetList { + protected couresArr: Course[] = []; + constructor() { + console.log('GetList constructor'); + this.couresArr = [...COURSES]; + } + public getData(): Course[] { + return this.couresArr; + } +} diff --git a/angular-starter/src/app/angular-intro/core/services/index.ts b/angular-starter/src/app/angular-intro/core/services/index.ts new file mode 100644 index 0000000..8b64de1 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/services/index.ts @@ -0,0 +1 @@ +export * from './getlist'; diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 3a10324..c586f88 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,23 +1,24 @@ import { Component, OnInit } from '@angular/core'; -import { COURSES } from '../core/mocks'; +import { GetList } from '../core'; @Component({ selector: 'courses', templateUrl: './courses.component.html', styleUrls: ['./courses.component.css'] }) -export class CoursesComponent implements OnInit{ +export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; protected couresArr = []; - constructor() { + constructor(private getList: GetList) { console.log('courses-constructor, Arr:'); console.log(this.couresArr); } public ngOnInit() { console.log('OnInit'); - this.couresArr = [...COURSES]; + // this.couresArr = [...COURSES]; + this.couresArr = this.getList.getData(); console.log(this.couresArr); } get count() { From 94ae67144b922479f097a53858fb173f49c89429 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 12:39:49 +0300 Subject: [PATCH 020/108] AMP/task3/fix: course service --- .../src/app/angular-intro/angular-intro.module.ts | 4 ++-- .../core/services/{getlist.ts => course.services.ts} | 4 ++-- .../src/app/angular-intro/core/services/index.ts | 2 +- .../src/app/angular-intro/courses/courses.component.ts | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) rename angular-starter/src/app/angular-intro/core/services/{getlist.ts => course.services.ts} (83%) diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index dbab484..f2e2676 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -7,7 +7,7 @@ import { CoursesModule } from './courses'; import { CourseModule } from './course'; import { FooterComponent } from './footer'; -import { GetList } from './core/services'; +import { CourseServices } from './core/services'; import { IntroComponent } from './angular-intro.component'; @@ -36,7 +36,7 @@ console.log('`INTRO` bundle loaded asynchronously'); IntroComponent ], providers: [ - GetList + CourseServices, ], }) export class IntroModule {} diff --git a/angular-starter/src/app/angular-intro/core/services/getlist.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts similarity index 83% rename from angular-starter/src/app/angular-intro/core/services/getlist.ts rename to angular-starter/src/app/angular-intro/core/services/course.services.ts index 00451e9..4b711c4 100644 --- a/angular-starter/src/app/angular-intro/core/services/getlist.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -4,13 +4,13 @@ import { COURSES } from '../mocks'; import { Course } from '../entities'; @Injectable() -export class GetList { +export class CourseServices { protected couresArr: Course[] = []; constructor() { console.log('GetList constructor'); this.couresArr = [...COURSES]; } - public getData(): Course[] { + public getList(): Course[] { return this.couresArr; } } diff --git a/angular-starter/src/app/angular-intro/core/services/index.ts b/angular-starter/src/app/angular-intro/core/services/index.ts index 8b64de1..ee98a9f 100644 --- a/angular-starter/src/app/angular-intro/core/services/index.ts +++ b/angular-starter/src/app/angular-intro/core/services/index.ts @@ -1 +1 @@ -export * from './getlist'; +export * from './course.services'; diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index c586f88..61f3c25 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { GetList } from '../core'; +import { CourseServices } from '../core'; @Component({ selector: 'courses', @@ -11,14 +11,14 @@ export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; protected couresArr = []; - constructor(private getList: GetList) { + constructor(private courseServices: CourseServices) { console.log('courses-constructor, Arr:'); console.log(this.couresArr); } public ngOnInit() { console.log('OnInit'); // this.couresArr = [...COURSES]; - this.couresArr = this.getList.getData(); + this.couresArr = this.courseServices.getList(); console.log(this.couresArr); } get count() { From dec5933c7d9cb003c5933e2227a327d072892a1c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 13:18:47 +0300 Subject: [PATCH 021/108] AMP/task3/features: implement course servicies --- .../app/angular-intro/angular-intro.module.ts | 8 ++--- .../core/services/course.services.ts | 33 ++++++++++++++++++- .../courses/courses.component.ts | 2 +- angular-starter/src/app/app.module.ts | 4 ++- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index f2e2676..b9493b1 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -7,7 +7,7 @@ import { CoursesModule } from './courses'; import { CourseModule } from './course'; import { FooterComponent } from './footer'; -import { CourseServices } from './core/services'; +// import { CourseServices } from './core/services'; import { IntroComponent } from './angular-intro.component'; @@ -35,8 +35,8 @@ console.log('`INTRO` bundle loaded asynchronously'); exports: [ IntroComponent ], - providers: [ - CourseServices, - ], + // providers: [ + // CourseServices, + // ], }) export class IntroModule {} diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index 4b711c4..f08d496 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -3,14 +3,45 @@ import { Injectable } from '@angular/core'; import { COURSES } from '../mocks'; import { Course } from '../entities'; +// i think that it is all (or part??) logic for work with enity + @Injectable() export class CourseServices { protected couresArr: Course[] = []; constructor() { - console.log('GetList constructor'); + console.log('### CourseServices constructor ###'); this.couresArr = [...COURSES]; } public getList(): Course[] { + console.log('### CourseServices.getList ###'); return this.couresArr; } + public createCourse(): number { + console.log('### CourseServices.createCourse ###'); + return this.couresArr + .reduce((prev, item) => item.id > prev ? item.id : prev, 0) + + 1; + } + public getItemById(id: number): Course { + console.log('### CourseServices.getItemById ###'); + return this.couresArr.find((item) => item.id === id); + } + // obj: {id: updateCourseId[, updateField: newValue,] } + public updateItem(obj): void { + console.log('### CourseServices.updateItem ###'); + let current = this.getItemById(obj.id); + current = { + ...current, + ...obj, + }; + } + public removeItem(id: number): void { + console.log('### CourseServices.removeItem ###'); + const currentID = this.couresArr.findIndex((item) => item.id === id); + if (currentID > 0) { + this.couresArr.splice(currentID, 1); + } else { + console.log('### CourseServices.removeItem:ERROR: wrong ID###'); + } + } } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 61f3c25..822dcdd 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -17,7 +17,6 @@ export class CoursesComponent implements OnInit { } public ngOnInit() { console.log('OnInit'); - // this.couresArr = [...COURSES]; this.couresArr = this.courseServices.getList(); console.log(this.couresArr); } @@ -33,6 +32,7 @@ export class CoursesComponent implements OnInit { protected deletter(id: number) { console.log(`courses.deletter id=${id}`); + this.courseServices.removeItem(id); } } diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 3c28942..06404c7 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -21,6 +21,7 @@ import { XLargeDirective } from './home/x-large'; import { DevModuleModule } from './+dev-module'; import { IntroModule } from './angular-intro'; +import { CourseServices } from './angular-intro/core'; import '../styles/styles.scss'; import '../styles/headings.css'; @@ -28,7 +29,8 @@ import '../styles/headings.css'; // Application wide providers const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, - AppState + AppState, + CourseServices, ]; interface StoreType { From b3614c8dc9a913975b5c3619834de599d56ef087 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 15:50:14 +0300 Subject: [PATCH 022/108] AMP/task3/features: confirm v.0.1 --- .../angular-intro.component.html | 1 + .../app/angular-intro/angular-intro.module.ts | 5 +- .../core/services/course.services.ts | 2 +- .../core/services/modalWindow.service.ts | 27 +++++++++ .../angular-intro/course/course.component.ts | 14 ++++- .../app/angular-intro/course/course.module.ts | 2 +- .../app/angular-intro/modalWindow/index.ts | 2 + .../modalWindow/modalWindow.component.css | 16 ++++++ .../modalWindow/modalWindow.component.html | 7 +++ .../modalWindow/modalWindow.component.ts | 55 +++++++++++++++++++ .../modalWindow/modalWindow.module.ts | 22 ++++++++ angular-starter/src/app/app.module.ts | 2 + 12 files changed, 148 insertions(+), 7 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts create mode 100644 angular-starter/src/app/angular-intro/modalWindow/index.ts create mode 100644 angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css create mode 100644 angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html create mode 100644 angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts create mode 100644 angular-starter/src/app/angular-intro/modalWindow/modalWindow.module.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index a8ccb31..2ad6891 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -3,4 +3,5 @@ +
diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index b9493b1..a4718dc 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -6,10 +6,8 @@ import { ToolbarModule } from './toolbar'; import { CoursesModule } from './courses'; import { CourseModule } from './course'; import { FooterComponent } from './footer'; - -// import { CourseServices } from './core/services'; - import { IntroComponent } from './angular-intro.component'; +import { ModalWindowModule } from './modalWindow'; console.log('`INTRO` bundle loaded asynchronously'); @@ -31,6 +29,7 @@ console.log('`INTRO` bundle loaded asynchronously'); ToolbarModule, CoursesModule, CourseModule, + ModalWindowModule, ], exports: [ IntroComponent diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index f08d496..ee1aab9 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -38,7 +38,7 @@ export class CourseServices { public removeItem(id: number): void { console.log('### CourseServices.removeItem ###'); const currentID = this.couresArr.findIndex((item) => item.id === id); - if (currentID > 0) { + if (currentID >= 0) { this.couresArr.splice(currentID, 1); } else { console.log('### CourseServices.removeItem:ERROR: wrong ID###'); diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts new file mode 100644 index 0000000..5f68303 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class ModalWindowServices { + // protected visible = false; + public visible = false; + // protected message = 'Are you shure?'; + public message = 'Are you shure?'; + protected callback: (message: string) => void; + + constructor() { + console.log('### ModalWindowServices constructor ###'); + } + + public show(message: string, callback: (message: string) => void) { + console.log('### ModalWindowServices.show ###'); + this.message = message; + this.visible = true; + this.callback = callback; + } + + public answer(message: string) { + console.log(`### ModalWindowServices.answer:message: ${message} ###`); + this.callback(message); + this.visible = false; + } +} diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index dcaa379..4a1ed8e 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -7,6 +7,7 @@ import { import { NgForm } from '@angular/forms'; import { Course } from '../core'; import { MyDate } from '../core/entities/date'; +import { ModalWindowServices } from '../core/services/modalWindow.service'; @Component({ selector: 'course', @@ -27,7 +28,7 @@ export class CourseComponent { @Output('handler') protected handler = new EventEmitter(); @Output('deletter') protected deletter = new EventEmitter(); - constructor() { + constructor(private modalWindowService: ModalWindowServices) { console.log('course-constructor'); } @@ -42,6 +43,15 @@ export class CourseComponent { protected del(id: number) { console.log(`del from child, id:${id}`); - this.deletter.emit({value: id}); + + this.modalWindowService.show(`HEY! are you shure? id=${id}`, + (message: string) => { + if (message === 'Yes') { + this.deletter.emit({value: id}); + } else { + console.log('modal was declined'); + } + } + ); } } diff --git a/angular-starter/src/app/angular-intro/course/course.module.ts b/angular-starter/src/app/angular-intro/course/course.module.ts index 63e1604..00d1888 100644 --- a/angular-starter/src/app/angular-intro/course/course.module.ts +++ b/angular-starter/src/app/angular-intro/course/course.module.ts @@ -1,7 +1,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; -import { CourseComponent } from './course.component'; +import { CourseComponent } from './course.component'; console.log('`CoursE` bundle loaded asynchronously'); diff --git a/angular-starter/src/app/angular-intro/modalWindow/index.ts b/angular-starter/src/app/angular-intro/modalWindow/index.ts new file mode 100644 index 0000000..3ac1eb0 --- /dev/null +++ b/angular-starter/src/app/angular-intro/modalWindow/index.ts @@ -0,0 +1,2 @@ +export * from './modalWindow.component'; +export * from './modalWindow.module'; diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css new file mode 100644 index 0000000..248525a --- /dev/null +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css @@ -0,0 +1,16 @@ +.view { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: dimgrey; + display: flex; + justify-content: center; + align-items: center; +} + +.view .message { + position: relative; + background-color: darksalmon; +} diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html new file mode 100644 index 0000000..5d121ac --- /dev/null +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -0,0 +1,7 @@ +
+
+

{{message}}

+ + +
+
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts new file mode 100644 index 0000000..8cfa6bc --- /dev/null +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -0,0 +1,55 @@ +import { + Component, + // Input, + // Output, + // EventEmitter, +} from '@angular/core'; + +import { ModalWindowServices } from '../core/services/modalWindow.service'; + +@Component({ + selector: 'modalWindow', + templateUrl: './modalWindow.component.html', + styleUrls: ['./modalWindow.component.css'] +}) +export class ModalWindowComponent { + // @Input() protected visible = false; + // @Input() protected message = 'You are shure?'; + // @Output('confirm') protected confirm = new EventEmitter(); + + constructor(private modalWindowServices: ModalWindowServices) { + console.log('ModalWindowComponent constructor'); + } + + // ------------------------------ + // protected accept() { + // console.log('modal accept'); + // this.confirm.emit({ + // value: true, + // }); + // this.visible = false; + // } + // protected decline() { + // console.log('modal decline'); + // this.confirm.emit({ + // value: false, + // }); + // this.visible = false; + // } + // ------------------------------ + + protected handler(result: string) { + console.log(`modal ${result}`); + // this.confirm.emit({ + // value: result, + // }); + // this.visible = false; + this.modalWindowServices.answer(result); + } + get visible() { + return this.modalWindowServices.visible; + } + get message() { + return this.modalWindowServices.message; + } +} diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.module.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.module.ts new file mode 100644 index 0000000..a155863 --- /dev/null +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { ModalWindowComponent } from './modalWindow.component'; + +console.log('`ModalWindow` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + ModalWindowComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + ModalWindowComponent, + ], +}) +export class ModalWindowModule {} diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 06404c7..32618db 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -25,12 +25,14 @@ import { CourseServices } from './angular-intro/core'; import '../styles/styles.scss'; import '../styles/headings.css'; +import { ModalWindowServices } from './angular-intro/core/services/modalWindow.service'; // Application wide providers const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, AppState, CourseServices, + ModalWindowServices, ]; interface StoreType { From 83b2c094e45bbd1068b36262a6660927f06035b3 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 16:12:44 +0300 Subject: [PATCH 023/108] AMP/task3_arr/features: array of answer --- .../core/services/modalWindow.service.ts | 7 ++-- .../modalWindow/modalWindow.component.html | 7 ++-- .../modalWindow/modalWindow.component.ts | 33 ++++--------------- 3 files changed, 14 insertions(+), 33 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 5f68303..76cb89e 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -2,21 +2,20 @@ import { Injectable } from '@angular/core'; @Injectable() export class ModalWindowServices { - // protected visible = false; public visible = false; - // protected message = 'Are you shure?'; public message = 'Are you shure?'; + public answerArr = ['Yes', 'No']; protected callback: (message: string) => void; constructor() { console.log('### ModalWindowServices constructor ###'); } - public show(message: string, callback: (message: string) => void) { + public show(message: string, callback: (message: string) => void, answerArr = ['Yes', 'No']) { console.log('### ModalWindowServices.show ###'); this.message = message; - this.visible = true; this.callback = callback; + this.visible = true; } public answer(message: string) { diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 5d121ac..0265ccf 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,7 +1,10 @@

{{message}}

- - + +
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 8cfa6bc..42c4f30 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -1,8 +1,5 @@ import { Component, - // Input, - // Output, - // EventEmitter, } from '@angular/core'; import { ModalWindowServices } from '../core/services/modalWindow.service'; @@ -13,37 +10,13 @@ import { ModalWindowServices } from '../core/services/modalWindow.service'; styleUrls: ['./modalWindow.component.css'] }) export class ModalWindowComponent { - // @Input() protected visible = false; - // @Input() protected message = 'You are shure?'; - // @Output('confirm') protected confirm = new EventEmitter(); constructor(private modalWindowServices: ModalWindowServices) { console.log('ModalWindowComponent constructor'); } - // ------------------------------ - // protected accept() { - // console.log('modal accept'); - // this.confirm.emit({ - // value: true, - // }); - // this.visible = false; - // } - // protected decline() { - // console.log('modal decline'); - // this.confirm.emit({ - // value: false, - // }); - // this.visible = false; - // } - // ------------------------------ - protected handler(result: string) { console.log(`modal ${result}`); - // this.confirm.emit({ - // value: result, - // }); - // this.visible = false; this.modalWindowServices.answer(result); } get visible() { @@ -52,4 +25,10 @@ export class ModalWindowComponent { get message() { return this.modalWindowServices.message; } + get answersArr() { + return this.modalWindowServices.answerArr + .map((item) => { + return {click: this.handler(item), text: item}; + }); + } } From 64fcb155f13cd7f7675dabf99ca6e67ac8de5135 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 16:27:22 +0300 Subject: [PATCH 024/108] AMP/task3/features: array of answers --- .../src/app/angular-intro/core/services/modalWindow.service.ts | 1 + .../app/angular-intro/modalWindow/modalWindow.component.html | 2 +- .../src/app/angular-intro/modalWindow/modalWindow.component.ts | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 76cb89e..01bbe21 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -14,6 +14,7 @@ export class ModalWindowServices { public show(message: string, callback: (message: string) => void, answerArr = ['Yes', 'No']) { console.log('### ModalWindowServices.show ###'); this.message = message; + this.answerArr = answerArr; this.callback = callback; this.visible = true; } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 0265ccf..186549a 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -4,7 +4,7 @@
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 42c4f30..8c8cb52 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -28,7 +28,7 @@ export class ModalWindowComponent { get answersArr() { return this.modalWindowServices.answerArr .map((item) => { - return {click: this.handler(item), text: item}; + return {click: (text) => this.handler(text), text: item}; }); } } From 6ce94921677c9ee0e2a139e67d6b91fc173bd128 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 26 Mar 2018 17:05:27 +0300 Subject: [PATCH 025/108] AMP/task3/refactor: css --- .../modalWindow/modalWindow.component.css | 17 +++++++++++++---- .../modalWindow/modalWindow.component.html | 14 +++++++------- .../modalWindow/modalWindow.component.ts | 2 +- angular-starter/src/app/app.module.ts | 2 +- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css index 248525a..bdf6225 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css @@ -1,16 +1,25 @@ -.view { +:host>div { position: fixed; width: 100%; height: 100%; top: 0; left: 0; - background-color: dimgrey; + background-color: rgba(0, 0, 0, 0.7); display: flex; justify-content: center; align-items: center; } -.view .message { +:host>div .message { + padding: 15px; + border-radius: 15px; position: relative; - background-color: darksalmon; + background-color: rgba(255, 255, 255, 0.7); +} + +:host>div .message>.buttons{ + width: 100%; + display: flex; + justify-content: space-around; + align-items: center; } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 186549a..3383c8c 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,10 +1,10 @@ -
+
-

{{message}}

- - +

{{message}}

+
+ +
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 8c8cb52..64630db 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -28,7 +28,7 @@ export class ModalWindowComponent { get answersArr() { return this.modalWindowServices.answerArr .map((item) => { - return {click: (text) => this.handler(text), text: item}; + return {click: () => this.handler(item), text: item}; }); } } diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 32618db..a8f0344 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -22,10 +22,10 @@ import { DevModuleModule } from './+dev-module'; import { IntroModule } from './angular-intro'; import { CourseServices } from './angular-intro/core'; +import { ModalWindowServices } from './angular-intro/core/services/modalWindow.service'; import '../styles/styles.scss'; import '../styles/headings.css'; -import { ModalWindowServices } from './angular-intro/core/services/modalWindow.service'; // Application wide providers const APP_PROVIDERS = [ From 220c7d980410756c47cb43f2b9dc741343149ff2 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 27 Mar 2018 18:00:20 +0300 Subject: [PATCH 026/108] AMP/task3/features: try callback->promise --- .../app/angular-intro/core/services/course.services.ts | 3 ++- .../src/app/angular-intro/courses/courses.component.ts | 8 ++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index ee1aab9..ea2ab4b 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -4,6 +4,7 @@ import { COURSES } from '../mocks'; import { Course } from '../entities'; // i think that it is all (or part??) logic for work with enity +// in this case entity = list of course @Injectable() export class CourseServices { @@ -36,7 +37,7 @@ export class CourseServices { }; } public removeItem(id: number): void { - console.log('### CourseServices.removeItem ###'); + console.log(`### CourseServices.removeItem id=${id}###`); const currentID = this.couresArr.findIndex((item) => item.id === id); if (currentID >= 0) { this.couresArr.splice(currentID, 1); diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 822dcdd..d1c10cd 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -35,4 +35,12 @@ export class CoursesComponent implements OnInit { this.courseServices.removeItem(id); } + protected deletter_promise(id: Promise) { + id.then((result) => { + console.log(`courses.deletter id=${result}`); + this.courseServices.removeItem(result); + }); + id.catch( (error) => { console.log(`courses.deletter ERROR: ${error}`); }); + } + } From f2b8db255317c57a2a1e5632fca4300dab2a193b Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 28 Mar 2018 10:37:05 +0300 Subject: [PATCH 027/108] AMP/task3/features: try promise instead callback --- .../core/services/modalWindow.service.ts | 15 +++++++++++---- .../angular-intro/course/course.component.html | 4 ++-- .../app/angular-intro/course/course.component.ts | 13 +++++++++---- .../modalWindow/modalWindow.component.ts | 2 +- 4 files changed, 23 insertions(+), 11 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 01bbe21..6d21a44 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -6,22 +6,29 @@ export class ModalWindowServices { public message = 'Are you shure?'; public answerArr = ['Yes', 'No']; protected callback: (message: string) => void; - + // protected result: Promise; constructor() { console.log('### ModalWindowServices constructor ###'); } - public show(message: string, callback: (message: string) => void, answerArr = ['Yes', 'No']) { + public show( + message: string, + callback: (message: string) => void, // how replace callback/promise? + answerArr = ['Yes', 'No'] + )/*: Promise*/ { console.log('### ModalWindowServices.show ###'); + // this.result = new Promise((res, rej) => { }); this.message = message; this.answerArr = answerArr; - this.callback = callback; + this.callback = callback; // what i must do after answer this.visible = true; + // return Promise...; // ?? } - public answer(message: string) { + public answer(message: string)/*: Promise*/ { console.log(`### ModalWindowServices.answer:message: ${message} ###`); this.callback(message); this.visible = false; + // return Promise.resolve(message); } } diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 3cb3e1d..9583c9d 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -2,11 +2,11 @@

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

Date: {{courseItem.date}}

- + - +

{ if (message === 'Yes') { - this.deletter.emit({value: id}); + this.deletter.emit({value: this.courseItem.id}); } else { console.log('modal was declined'); } } + // -------- ); + // ---------------- + } } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 64630db..a6065f2 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -16,7 +16,7 @@ export class ModalWindowComponent { } protected handler(result: string) { - console.log(`modal ${result}`); + console.log(`modal: ${result}`); this.modalWindowServices.answer(result); } get visible() { From d9e2c4c02f09f21d2102cbc85d7cac57abd34eb3 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 28 Mar 2018 11:16:40 +0300 Subject: [PATCH 028/108] AMP/task3/fix: comment, pause for observable --- .../core/services/modalWindow.service.ts | 6 +++--- .../app/angular-intro/course/course.component.ts | 14 ++++++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 6d21a44..244613e 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -5,8 +5,8 @@ export class ModalWindowServices { public visible = false; public message = 'Are you shure?'; public answerArr = ['Yes', 'No']; + public result: Promise; protected callback: (message: string) => void; - // protected result: Promise; constructor() { console.log('### ModalWindowServices constructor ###'); } @@ -17,12 +17,12 @@ export class ModalWindowServices { answerArr = ['Yes', 'No'] )/*: Promise*/ { console.log('### ModalWindowServices.show ###'); - // this.result = new Promise((res, rej) => { }); this.message = message; this.answerArr = answerArr; this.callback = callback; // what i must do after answer + // this.result = new Promise(() => {}); this.visible = true; - // return Promise...; // ?? + return Promise.resolve(''); // ?? } public answer(message: string)/*: Promise*/ { diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index a7850c7..31b4c73 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -48,10 +48,16 @@ export class CourseComponent { this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`, // callback (message: string) => { - if (message === 'Yes') { - this.deletter.emit({value: this.courseItem.id}); - } else { - console.log('modal was declined'); + switch (message) { + case 'Yes': { + this.deletter.emit({value: this.courseItem.id}); + break; + } + case 'No': { + console.log('modal was declined'); + break; + } + default: console.log(`unknown modal message:${message}`); } } // -------- From ac5cc56fd594088f3e37cd474fd0e912ec90a312 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 28 Mar 2018 12:49:58 +0300 Subject: [PATCH 029/108] AMP/task3/features: modalWindow: add close-button --- .../modalWindow/modalWindow.component.css | 10 ++++++++++ .../modalWindow/modalWindow.component.html | 5 +++++ .../angular-intro/modalWindow/modalWindow.component.ts | 4 ++++ 3 files changed, 19 insertions(+) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css index bdf6225..899ed39 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css @@ -23,3 +23,13 @@ justify-content: space-around; align-items: center; } + +:host>div .message .close{ + position: absolute; + top: 5px; + right: 5px; +} +:host>div .message .close:hover{ + background-color: rgb(250, 118, 10); + border-radius: 50%; +} diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 3383c8c..0c888de 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,3 +1,5 @@ + +

{{message}}

@@ -6,5 +8,8 @@

{{message}}

(click) = "item.click()" >{{item.text}}
+
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 64630db..2cecb3b 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -19,6 +19,10 @@ export class ModalWindowComponent { console.log(`modal ${result}`); this.modalWindowServices.answer(result); } + protected close() { + console.log(`modal was close without answer`); + this.modalWindowServices.answer('close'); + } get visible() { return this.modalWindowServices.visible; } From d6196c2ca5f3b4288ce8fa70196506a9f1668a09 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 28 Mar 2018 17:06:21 +0300 Subject: [PATCH 030/108] AMP/task3/features: more useful courses-handler --- .../src/app/angular-intro/course/course.component.ts | 8 ++++++-- .../app/angular-intro/courses/courses.component.html | 4 ++-- .../app/angular-intro/courses/courses.component.ts | 11 +++++++++-- .../modalWindow/modalWindow.component.ts | 4 ++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 31b4c73..4ca14b7 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -26,7 +26,7 @@ export class CourseComponent { }; @Output('handler') protected handler = new EventEmitter(); - @Output('deletter') protected deletter = new EventEmitter(); + // @Output('deletter') protected deletter = new EventEmitter(); constructor(private modalWindowService: ModalWindowServices) { console.log('course-constructor'); @@ -50,13 +50,17 @@ export class CourseComponent { (message: string) => { switch (message) { case 'Yes': { - this.deletter.emit({value: this.courseItem.id}); + this.handler.emit({type: 'deletter', value: this.courseItem.id}); break; } case 'No': { console.log('modal was declined'); break; } + case 'Close': { + console.log('courseComponent: modal was closed without answer'); + break; + } default: console.log(`unknown modal message:${message}`); } } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 46f2fd3..3c20951 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -5,7 +5,7 @@ null +
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index d1c10cd..aa1db75 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -26,8 +26,15 @@ export class CoursesComponent implements OnInit { .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } - protected handler(id: number) { - console.log(`courses.handler id=${id}`); + protected handler(emit: any) { + console.log(`courses.handler emit.type=${emit.type}`); + switch (emit.type) { + case 'deletter': { + // or this.courseServices.removeItem(emit.value); + this.deletter(emit.value); + break; + } + } } protected deletter(id: number) { diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index e24e57d..0490afe 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -20,8 +20,8 @@ export class ModalWindowComponent { this.modalWindowServices.answer(result); } protected close() { - console.log(`modal was close without answer`); - this.modalWindowServices.answer('close'); + console.log(`modalWindowComponent: modal was closed without answer`); + this.modalWindowServices.answer('Close'); } get visible() { return this.modalWindowServices.visible; From efd5bedeec86b518d13f10a8b9111be206d08171 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 28 Mar 2018 18:06:22 +0300 Subject: [PATCH 031/108] AMP/task3(6)/features: try modal service like observable, and recive data from modalWindowComponent --- .../app/angular-intro/angular-intro.module.ts | 4 - .../core/services/modalWindow.service.ts | 13 ++-- .../angular-intro/course/course.component.ts | 76 +++++++++++-------- .../courses/courses.component.html | 1 - 4 files changed, 52 insertions(+), 42 deletions(-) diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index a4718dc..9461f1d 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -17,7 +17,6 @@ console.log('`INTRO` bundle loaded asynchronously'); * Components / Directives/ Pipes */ - // HeaderComponent, FooterComponent, IntroComponent, @@ -34,8 +33,5 @@ console.log('`INTRO` bundle loaded asynchronously'); exports: [ IntroComponent ], - // providers: [ - // CourseServices, - // ], }) export class IntroModule {} diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 244613e..c2dfc59 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -1,11 +1,12 @@ import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; @Injectable() export class ModalWindowServices { public visible = false; public message = 'Are you shure?'; public answerArr = ['Yes', 'No']; - public result: Promise; + public result: Observable; protected callback: (message: string) => void; constructor() { console.log('### ModalWindowServices constructor ###'); @@ -13,16 +14,16 @@ export class ModalWindowServices { public show( message: string, - callback: (message: string) => void, // how replace callback/promise? answerArr = ['Yes', 'No'] - )/*: Promise*/ { + ): Observable { console.log('### ModalWindowServices.show ###'); this.message = message; this.answerArr = answerArr; - this.callback = callback; // what i must do after answer - // this.result = new Promise(() => {}); this.visible = true; - return Promise.resolve(''); // ?? + return Observable.create((observer) => { + observer.onNext('1'); + observer.onCompleted(); + }); } public answer(message: string)/*: Promise*/ { diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 4ca14b7..3029a10 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -14,6 +14,7 @@ import { ModalWindowServices } from '../core/services/modalWindow.service'; templateUrl: './course.component.html', styleUrls: ['./course.component.css'] }) + export class CourseComponent { @Input() protected courseItem: Course = { id: 0, @@ -26,47 +27,60 @@ export class CourseComponent { }; @Output('handler') protected handler = new EventEmitter(); - // @Output('deletter') protected deletter = new EventEmitter(); constructor(private modalWindowService: ModalWindowServices) { console.log('course-constructor'); } - protected localAccept(id: number) { - this.courseItem.isAccept = !this.courseItem.isAccept; - console.log(`course-local method from id=${id}; this.courseItem=`); - console.log(this.courseItem); - this.handler.emit({ - value: id, - }); - } - protected del() { console.log(`del from child, id:${this.courseItem.id}`); // using modalWindow via modalWindowService - this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`, - // callback - (message: string) => { - switch (message) { - case 'Yes': { - this.handler.emit({type: 'deletter', value: this.courseItem.id}); - break; - } - case 'No': { - console.log('modal was declined'); - break; - } - case 'Close': { - console.log('courseComponent: modal was closed without answer'); - break; - } - default: console.log(`unknown modal message:${message}`); - } - } - // -------- - ); + // this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`, + // // callback + // (message: string) => { + // switch (message) { + // case 'Yes': { // only in this case need call parent + // this.handler.emit({type: 'deletter', value: this.courseItem.id}); + // break; + // } + // case 'No': { + // console.log('modal was declined'); + // break; + // } + // case 'Close': { + // console.log('courseComponent: modal was closed without answer'); + // break; + // } + // default: console.log(`unknown modal message:${message}`); + // } + // } + // // -------- + // ); + // }); // ---------------- + this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) + .subscribe( + // callback ... o_O + (message: string) => { + switch (message) { + case 'Yes': { // only in this case need call parent + this.handler.emit({type: 'deletter', value: this.courseItem.id}); + break; + } + case 'No': { + console.log('modal was declined'); + break; + } + case 'Close': { + console.log('courseComponent: modal was closed without answer'); + break; + } + default: console.log(`unknown modal message:${message}`); + } + } + // -------- + ); } } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index 3c20951..dbedc1b 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -7,5 +7,4 @@ [courseItem] = "item" (handler) = "handler($event)" > -
From c91d6e1bc45a7121289b793ade56cc9ad8de806c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 16:04:04 +0300 Subject: [PATCH 032/108] AMP/task3/features: try observable, draft --- .../core/services/modalWindow.service.ts | 106 +++++++++++++++--- .../angular-intro/course/course.component.ts | 11 +- .../courses/courses.component.ts | 2 +- .../modalWindow/modalWindow.component.html | 2 +- .../modalWindow/modalWindow.component.ts | 69 +++++++++--- 5 files changed, 155 insertions(+), 35 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index c2dfc59..2792167 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -3,33 +3,107 @@ import { Observable } from 'rxjs/Observable'; @Injectable() export class ModalWindowServices { - public visible = false; - public message = 'Are you shure?'; - public answerArr = ['Yes', 'No']; - public result: Observable; - protected callback: (message: string) => void; + // public visible = false; + // public message = 'Are you shure?'; + // public answerArr = ['Yes', 'No']; + public data = { + visible: false, + // click: (answer: string) => Promise.resolve(answer), + message: 'Are you shure?', + answerArr: ['Yes', 'No'], + }; + + // public result: Promise; + + // protected callback: (message: string) => void; + protected source: Observable; + private sound: Observable; + constructor() { console.log('### ModalWindowServices constructor ###'); + // create observer + this.source = new Observable((observer) => { + console.warn('observ in modal-serv'); + console.log('### ModalWindowServices.observable ###'); + const listener = this.sound.subscribe( + (message) => observer.next(message), + (error) => console.error(`error modalWindow.service:${error}`), + () => { + console.log('### ModalWindowServices.observable: sound is done###'); + observer.complete(); + } + ); + console.warn('observ end in modal-serv'); + }); + + } + public click(answer: string) { + return Promise.resolve(answer); } public show( message: string, + // callback: (message: string) => void, // how replace callback/promise? answerArr = ['Yes', 'No'] ): Observable { console.log('### ModalWindowServices.show ###'); - this.message = message; - this.answerArr = answerArr; - this.visible = true; - return Observable.create((observer) => { - observer.onNext('1'); - observer.onCompleted(); + // this.message = message; + // this.answerArr = answerArr; + // // this.callback = callback; + // this.visible = true; + + // this.data = { + // // ...this.data, + // visible: true, + // message, + // answerArr, + // // .map((item) => { + // // return { + // // click: () => { + // // // this.handler(item); + // // console.log('WTF??'); + // // }, text: item}; + // // }) + // }; + this.data.visible = true; console.warn('show'); + this.data.message = message; + this.data.answerArr = answerArr; + + return new Observable((observer) => { + console.warn('observ in modal-serv-return'); + const listener = this.source.subscribe( + (x) => { // resend all from source in new Observable + console.log(`resent:${x}`); + observer.next(x); + }, + (error) => { console.log(`### ModalWindowServices.show.error: ${error} ###`); }, + () => { + console.log('### ModalWindowServices.done? ###'); + this.data.visible = false; + console.warn('hide'); + } + ); + // observer.next('---'); + console.warn('observ end in modal-serv-ret'); }); + + // return new Promise((res) => { + // this.data.visible = false; + // res(this.result); + // }); } - public answer(message: string)/*: Promise*/ { - console.log(`### ModalWindowServices.answer:message: ${message} ###`); - this.callback(message); - this.visible = false; - // return Promise.resolve(message); + // public answer(message: string)/*: Promise*/ { + // console.log(`### ModalWindowServices.answer:message: ${message} ###`); + // // this.callback(message); + + // // ----------------- + // // this.result = Promise.resolve(message); + // // this.visible = false; + // // return Promise.resolve(message); + // } + + public listenMe(source: Observable) { + this.sound = source; } } diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 3029a10..60388d8 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -60,7 +60,7 @@ export class CourseComponent { // }); // ---------------- - this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) + const listener = this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) .subscribe( // callback ... o_O (message: string) => { @@ -79,8 +79,17 @@ export class CourseComponent { } default: console.log(`unknown modal message:${message}`); } + }, + (error) => console.error(`error in course.component:${error}`), + () => { + console.log('course, done'); } // -------- ); + console.log('course, end, unsubsribe'); + listener.unsubscribe(); + console.log('course, end, unsubsribe-done'); + // ---------------- + } } diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index aa1db75..7af89e4 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -16,7 +16,7 @@ export class CoursesComponent implements OnInit { console.log(this.couresArr); } public ngOnInit() { - console.log('OnInit'); + console.log('courses.component OnInit'); this.couresArr = this.courseServices.getList(); console.log(this.couresArr); } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 0c888de..0123006 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -4,7 +4,7 @@

{{message}}

-
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 0490afe..4168af9 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -1,38 +1,75 @@ import { - Component, + Component, OnInit, } from '@angular/core'; import { ModalWindowServices } from '../core/services/modalWindow.service'; +import { Observable } from 'rxjs/Observable'; @Component({ selector: 'modalWindow', templateUrl: './modalWindow.component.html', styleUrls: ['./modalWindow.component.css'] }) -export class ModalWindowComponent { - +export class ModalWindowComponent implements OnInit { + protected source: Observable; + protected doIt: () => string; constructor(private modalWindowServices: ModalWindowServices) { console.log('ModalWindowComponent constructor'); + this.doIt = () => 'constructor'; + } + + public ngOnInit() { + console.log('ModalWindowComponent ngOnInit'); + this.source = new Observable((observer) => { + console.warn('observ in modal-comp'); + console.log('observable in modalWindowComponent'); + // observer.next('hello from observable modalWindowComponent'); + console.warn(`modal-window-comp: ${this['doIt']()}`); + + // observer.next(this['doIt']()); + // observer.complete(); + // console.warn('observ end in modal-comp'); + + setTimeout(() => observer.next(this['doIt']()), 10000); + }); + + this.modalWindowServices.listenMe(this.source); } protected handler(result: string) { console.log(`modal: ${result}`); - this.modalWindowServices.answer(result); + // this.modalWindowServices.answer(result); + this.doIt = () => result; } protected close() { console.log(`modalWindowComponent: modal was closed without answer`); - this.modalWindowServices.answer('Close'); + // this.modalWindowServices.answer('Close'); + this.doIt = () => 'Close'; } - get visible() { - return this.modalWindowServices.visible; - } - get message() { - return this.modalWindowServices.message; - } - get answersArr() { - return this.modalWindowServices.answerArr - .map((item) => { - return {click: () => this.handler(item), text: item}; - }); + // get visible() { + // return this.modalWindowServices.visible; + // } + // get message() { + // return this.modalWindowServices.message; + // } + // get answerArr() { + // return this.modalWindowServices.answerArr + // .map((item) => { + // return {click: () => this.handler(item), text: item}; + // }); + // } + + get data() { + const obj = this.modalWindowServices.data.answerArr + .map((item) => { + return {click: () => this.handler(item), text: item}; + }); + + const t = 1; + + return { + ...this.modalWindowServices.data, + answerArr: obj, + }; } } From 9b8270bb3bcbed7afb702c9ea19076c06a84f511 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 18:10:17 +0300 Subject: [PATCH 033/108] AMP/task3_observable/features: IT IS ALIVEgit add . --- .../core/services/modalWindow.service.ts | 44 +++++----- .../angular-intro/course/course.component.ts | 12 ++- .../modalWindow/modalWindow.component.html | 10 +-- .../modalWindow/modalWindow.component.ts | 82 +++++++++++++------ 4 files changed, 89 insertions(+), 59 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 2792167..e331bec 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -7,7 +7,7 @@ export class ModalWindowServices { // public message = 'Are you shure?'; // public answerArr = ['Yes', 'No']; public data = { - visible: false, + // visible: false, // click: (answer: string) => Promise.resolve(answer), message: 'Are you shure?', answerArr: ['Yes', 'No'], @@ -16,30 +16,26 @@ export class ModalWindowServices { // public result: Promise; // protected callback: (message: string) => void; - protected source: Observable; - private sound: Observable; + private source: Observable; constructor() { console.log('### ModalWindowServices constructor ###'); // create observer - this.source = new Observable((observer) => { - console.warn('observ in modal-serv'); - console.log('### ModalWindowServices.observable ###'); - const listener = this.sound.subscribe( - (message) => observer.next(message), - (error) => console.error(`error modalWindow.service:${error}`), - () => { - console.log('### ModalWindowServices.observable: sound is done###'); - observer.complete(); - } - ); - console.warn('observ end in modal-serv'); - }); + // this.source = new Observable((observer) => { + // console.warn('observ in modal-serv'); + // console.log('### ModalWindowServices.observable ###'); + // const listener = this.sound.subscribe( + // (message) => observer.next(message), + // (error) => console.error(`error modalWindow.service:${error}`), + // () => { + // console.log('### ModalWindowServices.observable: sound is done###'); + // observer.complete(); + // } + // ); + // console.warn('observ end in modal-serv'); + // }); } - public click(answer: string) { - return Promise.resolve(answer); - } public show( message: string, @@ -65,12 +61,12 @@ export class ModalWindowServices { // // }, text: item}; // // }) // }; - this.data.visible = true; console.warn('show'); + // this.data.visible = true; console.warn('show'); this.data.message = message; this.data.answerArr = answerArr; return new Observable((observer) => { - console.warn('observ in modal-serv-return'); + // console.warn('observ in modal-serv-return'); const listener = this.source.subscribe( (x) => { // resend all from source in new Observable console.log(`resent:${x}`); @@ -79,12 +75,14 @@ export class ModalWindowServices { (error) => { console.log(`### ModalWindowServices.show.error: ${error} ###`); }, () => { console.log('### ModalWindowServices.done? ###'); - this.data.visible = false; + // this.data.visible = false; console.warn('hide'); + observer.complete(); } ); // observer.next('---'); console.warn('observ end in modal-serv-ret'); + // listener.unsubscribe(); }); // return new Promise((res) => { @@ -104,6 +102,6 @@ export class ModalWindowServices { // } public listenMe(source: Observable) { - this.sound = source; + this.source = source; } } diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 60388d8..67f3de4 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -60,12 +60,15 @@ export class CourseComponent { // }); // ---------------- + // using modalWindow via modalWindowService const listener = this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) .subscribe( // callback ... o_O (message: string) => { + console.warn('!!!!!!!!!!!!!!!!!!!'); switch (message) { case 'Yes': { // only in this case need call parent + console.warn('!!!!!!!!!!!!!!YEAAAAAAH!!!!!'); this.handler.emit({type: 'deletter', value: this.courseItem.id}); break; } @@ -82,13 +85,14 @@ export class CourseComponent { }, (error) => console.error(`error in course.component:${error}`), () => { - console.log('course, done'); + console.log('---------------------------course, done'); + // listener.unsubscribe(); } // -------- ); - console.log('course, end, unsubsribe'); - listener.unsubscribe(); - console.log('course, end, unsubsribe-done'); + // console.log('---------------------------course, end, unsubsribe'); + // listener.unsubscribe(); + // console.log('---------------------------course, end, unsubsribe-done'); // ---------------- } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 0123006..dd3c8c2 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,15 +1,15 @@ -
-
-

{{message}}

+
+
+

{{data.message}}

-
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 4168af9..a81b8fb 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -12,25 +12,55 @@ import { Observable } from 'rxjs/Observable'; }) export class ModalWindowComponent implements OnInit { protected source: Observable; - protected doIt: () => string; + protected doIt: Promise; + private data: any; constructor(private modalWindowServices: ModalWindowServices) { console.log('ModalWindowComponent constructor'); - this.doIt = () => 'constructor'; + + // --------------------------------block + const obj = this.modalWindowServices.data.answerArr + .map((item) => { + return {click: () => item, text: item}; + }); + + this.data = { + ...this.modalWindowServices.data, + visible: false, + answerArr: obj, + }; + // ------------------------------------- } public ngOnInit() { console.log('ModalWindowComponent ngOnInit'); this.source = new Observable((observer) => { console.warn('observ in modal-comp'); - console.log('observable in modalWindowComponent'); - // observer.next('hello from observable modalWindowComponent'); - console.warn(`modal-window-comp: ${this['doIt']()}`); + // console.log('observable in modalWindowComponent'); - // observer.next(this['doIt']()); - // observer.complete(); - // console.warn('observ end in modal-comp'); + // ----------------------------------------------------- + this.doIt = new Promise((res, rej) => { + console.log('getter data'); + this['bad'] = () => res('Close'); + const obj = this.modalWindowServices.data.answerArr + .map((item) => { + return {click: () => res(item), text: item}; /// REALLY????? + }); - setTimeout(() => observer.next(this['doIt']()), 10000); + this.data = { + ...this.modalWindowServices.data, + visible: true, + answerArr: obj, + }; + }); + // ----------------------------------------------------- + this.doIt + .then((result) => { + observer.next(result); + }) + .then(() => { + this.data.visible = false; + observer.complete(); + }); }); this.modalWindowServices.listenMe(this.source); @@ -38,14 +68,9 @@ export class ModalWindowComponent implements OnInit { protected handler(result: string) { console.log(`modal: ${result}`); - // this.modalWindowServices.answer(result); - this.doIt = () => result; - } - protected close() { - console.log(`modalWindowComponent: modal was closed without answer`); - // this.modalWindowServices.answer('Close'); - this.doIt = () => 'Close'; + this['bad'](); } + // get visible() { // return this.modalWindowServices.visible; // } @@ -59,17 +84,20 @@ export class ModalWindowComponent implements OnInit { // }); // } - get data() { - const obj = this.modalWindowServices.data.answerArr - .map((item) => { - return {click: () => this.handler(item), text: item}; - }); +// - const t = 1; + // get data() { + // console.log('getter data'); + // const obj = this.modalWindowServices.data.answerArr + // .map((item) => { + // return {click: () => this.handler(item), text: item}; + // }); - return { - ...this.modalWindowServices.data, - answerArr: obj, - }; - } + // const t = 1; + + // return { + // ...this.modalWindowServices.data, + // answerArr: obj, + // }; + // } } From 1de33911deda5d115abac552f633f0fc8110dea9 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 18:10:17 +0300 Subject: [PATCH 034/108] AMP/task3_observable/features: IT IS ALIVE --- .../core/services/modalWindow.service.ts | 44 +++++----- .../angular-intro/course/course.component.ts | 12 ++- .../modalWindow/modalWindow.component.html | 10 +-- .../modalWindow/modalWindow.component.ts | 82 +++++++++++++------ 4 files changed, 89 insertions(+), 59 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 2792167..e331bec 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -7,7 +7,7 @@ export class ModalWindowServices { // public message = 'Are you shure?'; // public answerArr = ['Yes', 'No']; public data = { - visible: false, + // visible: false, // click: (answer: string) => Promise.resolve(answer), message: 'Are you shure?', answerArr: ['Yes', 'No'], @@ -16,30 +16,26 @@ export class ModalWindowServices { // public result: Promise; // protected callback: (message: string) => void; - protected source: Observable; - private sound: Observable; + private source: Observable; constructor() { console.log('### ModalWindowServices constructor ###'); // create observer - this.source = new Observable((observer) => { - console.warn('observ in modal-serv'); - console.log('### ModalWindowServices.observable ###'); - const listener = this.sound.subscribe( - (message) => observer.next(message), - (error) => console.error(`error modalWindow.service:${error}`), - () => { - console.log('### ModalWindowServices.observable: sound is done###'); - observer.complete(); - } - ); - console.warn('observ end in modal-serv'); - }); + // this.source = new Observable((observer) => { + // console.warn('observ in modal-serv'); + // console.log('### ModalWindowServices.observable ###'); + // const listener = this.sound.subscribe( + // (message) => observer.next(message), + // (error) => console.error(`error modalWindow.service:${error}`), + // () => { + // console.log('### ModalWindowServices.observable: sound is done###'); + // observer.complete(); + // } + // ); + // console.warn('observ end in modal-serv'); + // }); } - public click(answer: string) { - return Promise.resolve(answer); - } public show( message: string, @@ -65,12 +61,12 @@ export class ModalWindowServices { // // }, text: item}; // // }) // }; - this.data.visible = true; console.warn('show'); + // this.data.visible = true; console.warn('show'); this.data.message = message; this.data.answerArr = answerArr; return new Observable((observer) => { - console.warn('observ in modal-serv-return'); + // console.warn('observ in modal-serv-return'); const listener = this.source.subscribe( (x) => { // resend all from source in new Observable console.log(`resent:${x}`); @@ -79,12 +75,14 @@ export class ModalWindowServices { (error) => { console.log(`### ModalWindowServices.show.error: ${error} ###`); }, () => { console.log('### ModalWindowServices.done? ###'); - this.data.visible = false; + // this.data.visible = false; console.warn('hide'); + observer.complete(); } ); // observer.next('---'); console.warn('observ end in modal-serv-ret'); + // listener.unsubscribe(); }); // return new Promise((res) => { @@ -104,6 +102,6 @@ export class ModalWindowServices { // } public listenMe(source: Observable) { - this.sound = source; + this.source = source; } } diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 60388d8..67f3de4 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -60,12 +60,15 @@ export class CourseComponent { // }); // ---------------- + // using modalWindow via modalWindowService const listener = this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) .subscribe( // callback ... o_O (message: string) => { + console.warn('!!!!!!!!!!!!!!!!!!!'); switch (message) { case 'Yes': { // only in this case need call parent + console.warn('!!!!!!!!!!!!!!YEAAAAAAH!!!!!'); this.handler.emit({type: 'deletter', value: this.courseItem.id}); break; } @@ -82,13 +85,14 @@ export class CourseComponent { }, (error) => console.error(`error in course.component:${error}`), () => { - console.log('course, done'); + console.log('---------------------------course, done'); + // listener.unsubscribe(); } // -------- ); - console.log('course, end, unsubsribe'); - listener.unsubscribe(); - console.log('course, end, unsubsribe-done'); + // console.log('---------------------------course, end, unsubsribe'); + // listener.unsubscribe(); + // console.log('---------------------------course, end, unsubsribe-done'); // ---------------- } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 0123006..dd3c8c2 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,15 +1,15 @@ -
-
-

{{message}}

+
+
+

{{data.message}}

-
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 4168af9..a81b8fb 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -12,25 +12,55 @@ import { Observable } from 'rxjs/Observable'; }) export class ModalWindowComponent implements OnInit { protected source: Observable; - protected doIt: () => string; + protected doIt: Promise; + private data: any; constructor(private modalWindowServices: ModalWindowServices) { console.log('ModalWindowComponent constructor'); - this.doIt = () => 'constructor'; + + // --------------------------------block + const obj = this.modalWindowServices.data.answerArr + .map((item) => { + return {click: () => item, text: item}; + }); + + this.data = { + ...this.modalWindowServices.data, + visible: false, + answerArr: obj, + }; + // ------------------------------------- } public ngOnInit() { console.log('ModalWindowComponent ngOnInit'); this.source = new Observable((observer) => { console.warn('observ in modal-comp'); - console.log('observable in modalWindowComponent'); - // observer.next('hello from observable modalWindowComponent'); - console.warn(`modal-window-comp: ${this['doIt']()}`); + // console.log('observable in modalWindowComponent'); - // observer.next(this['doIt']()); - // observer.complete(); - // console.warn('observ end in modal-comp'); + // ----------------------------------------------------- + this.doIt = new Promise((res, rej) => { + console.log('getter data'); + this['bad'] = () => res('Close'); + const obj = this.modalWindowServices.data.answerArr + .map((item) => { + return {click: () => res(item), text: item}; /// REALLY????? + }); - setTimeout(() => observer.next(this['doIt']()), 10000); + this.data = { + ...this.modalWindowServices.data, + visible: true, + answerArr: obj, + }; + }); + // ----------------------------------------------------- + this.doIt + .then((result) => { + observer.next(result); + }) + .then(() => { + this.data.visible = false; + observer.complete(); + }); }); this.modalWindowServices.listenMe(this.source); @@ -38,14 +68,9 @@ export class ModalWindowComponent implements OnInit { protected handler(result: string) { console.log(`modal: ${result}`); - // this.modalWindowServices.answer(result); - this.doIt = () => result; - } - protected close() { - console.log(`modalWindowComponent: modal was closed without answer`); - // this.modalWindowServices.answer('Close'); - this.doIt = () => 'Close'; + this['bad'](); } + // get visible() { // return this.modalWindowServices.visible; // } @@ -59,17 +84,20 @@ export class ModalWindowComponent implements OnInit { // }); // } - get data() { - const obj = this.modalWindowServices.data.answerArr - .map((item) => { - return {click: () => this.handler(item), text: item}; - }); +// - const t = 1; + // get data() { + // console.log('getter data'); + // const obj = this.modalWindowServices.data.answerArr + // .map((item) => { + // return {click: () => this.handler(item), text: item}; + // }); - return { - ...this.modalWindowServices.data, - answerArr: obj, - }; - } + // const t = 1; + + // return { + // ...this.modalWindowServices.data, + // answerArr: obj, + // }; + // } } From ed174eeab381982ec374ccce4127d6d20d2029ad Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 18:30:18 +0300 Subject: [PATCH 035/108] AMP/task3_observable/fix: modal-template --- .../app/angular-intro/modalWindow/modalWindow.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index dd3c8c2..a1dea0d 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,7 +1,7 @@
-
+

{{data.message}}

+ (click) = "click(item)" + >{{item}}
diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index a81b8fb..d4d6f6f 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -13,52 +13,32 @@ import { Observable } from 'rxjs/Observable'; export class ModalWindowComponent implements OnInit { protected source: Observable; protected doIt: Promise; - private data: any; + private click: (answer: string) => void; + private visible = false; + private data = { + message: 'NoMessage', + answerArr: ['Yes', 'No'], + }; constructor(private modalWindowServices: ModalWindowServices) { console.log('ModalWindowComponent constructor'); - - // --------------------------------block - const obj = this.modalWindowServices.data.answerArr - .map((item) => { - return {click: () => item, text: item}; - }); - - this.data = { - ...this.modalWindowServices.data, - visible: false, - answerArr: obj, - }; - // ------------------------------------- } public ngOnInit() { console.log('ModalWindowComponent ngOnInit'); this.source = new Observable((observer) => { - console.warn('observ in modal-comp'); - // console.log('observable in modalWindowComponent'); - - // ----------------------------------------------------- + this.data = this.modalWindowServices.data; + this.visible = true; this.doIt = new Promise((res, rej) => { - console.log('getter data'); - this['bad'] = () => res('Close'); - const obj = this.modalWindowServices.data.answerArr - .map((item) => { - return {click: () => res(item), text: item}; /// REALLY????? - }); - - this.data = { - ...this.modalWindowServices.data, - visible: true, - answerArr: obj, - }; + // ----------------------------------------- REALLY????? + this.click = (text) => res(text ? text : 'Close'); + // ----------------------------------------------------- }); - // ----------------------------------------------------- this.doIt .then((result) => { observer.next(result); }) .then(() => { - this.data.visible = false; + this.visible = false; observer.complete(); }); }); @@ -70,34 +50,4 @@ export class ModalWindowComponent implements OnInit { console.log(`modal: ${result}`); this['bad'](); } - - // get visible() { - // return this.modalWindowServices.visible; - // } - // get message() { - // return this.modalWindowServices.message; - // } - // get answerArr() { - // return this.modalWindowServices.answerArr - // .map((item) => { - // return {click: () => this.handler(item), text: item}; - // }); - // } - -// - - // get data() { - // console.log('getter data'); - // const obj = this.modalWindowServices.data.answerArr - // .map((item) => { - // return {click: () => this.handler(item), text: item}; - // }); - - // const t = 1; - - // return { - // ...this.modalWindowServices.data, - // answerArr: obj, - // }; - // } } From 4eed0e2b7ea8a917c770ab6c388920138712c54b Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 19:09:07 +0300 Subject: [PATCH 037/108] AMP/task3/fix: remove unuseful handler --- .../app/angular-intro/modalWindow/modalWindow.component.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index d4d6f6f..f1dbb7d 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -28,6 +28,7 @@ export class ModalWindowComponent implements OnInit { this.source = new Observable((observer) => { this.data = this.modalWindowServices.data; this.visible = true; + this.doIt = new Promise((res, rej) => { // ----------------------------------------- REALLY????? this.click = (text) => res(text ? text : 'Close'); @@ -45,9 +46,4 @@ export class ModalWindowComponent implements OnInit { this.modalWindowServices.listenMe(this.source); } - - protected handler(result: string) { - console.log(`modal: ${result}`); - this['bad'](); - } } From 752da476c247dc3539cb0fa175898e4a00472ceb Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Thu, 29 Mar 2018 21:16:57 +0300 Subject: [PATCH 038/108] AMP/task3/refactor: modalWindow.component --- .../modalWindow/modalWindow.component.ts | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index f1dbb7d..2161809 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -11,8 +11,6 @@ import { Observable } from 'rxjs/Observable'; styleUrls: ['./modalWindow.component.css'] }) export class ModalWindowComponent implements OnInit { - protected source: Observable; - protected doIt: Promise; private click: (answer: string) => void; private visible = false; private data = { @@ -25,25 +23,22 @@ export class ModalWindowComponent implements OnInit { public ngOnInit() { console.log('ModalWindowComponent ngOnInit'); - this.source = new Observable((observer) => { - this.data = this.modalWindowServices.data; - this.visible = true; + this.modalWindowServices.listenMe( - this.doIt = new Promise((res, rej) => { - // ----------------------------------------- REALLY????? - this.click = (text) => res(text ? text : 'Close'); - // ----------------------------------------------------- - }); - this.doIt - .then((result) => { - observer.next(result); - }) - .then(() => { - this.visible = false; - observer.complete(); - }); - }); + new Observable((observer) => { + this.data = this.modalWindowServices.data; + this.visible = true; - this.modalWindowServices.listenMe(this.source); + // --------- REALLY????? + new Promise((res, rej) => { this.click = (text) => res(text ? text : 'Close') }) + .then((result: string) => { + observer.next(result); + this.visible = false; + observer.complete(); + }); + + }) + + ); } } From 3ad7b2644ab3485394c579b2c08b47a149ee1b39 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 09:27:38 +0300 Subject: [PATCH 039/108] AMP/task3/features: modal window: X-size --- .../modalWindow/modalWindow.component.css | 11 ++++++++--- .../modalWindow/modalWindow.component.ts | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css index 899ed39..559577e 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.css @@ -26,10 +26,15 @@ :host>div .message .close{ position: absolute; - top: 5px; - right: 5px; + top: 10px; + right: 10px; + font-size: 1.3em; } :host>div .message .close:hover{ - background-color: rgb(250, 118, 10); + background-color: rgb(250, 78, 10); border-radius: 50%; + -webkit-box-shadow: 0px 0px 5px 3px rgba(250, 78, 10, 1); + -moz-box-shadow: 0px 0px 5px 3px rgba(250, 78, 10, 1); + box-shadow: 0px 0px 5px 3px rgba(250, 78, 10, 1); + } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 2161809..61ef792 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -30,7 +30,7 @@ export class ModalWindowComponent implements OnInit { this.visible = true; // --------- REALLY????? - new Promise((res, rej) => { this.click = (text) => res(text ? text : 'Close') }) + new Promise((res, rej) => { this.click = (text) => res(text ? text : 'Close'); }) .then((result: string) => { observer.next(result); this.visible = false; From 4d36600b2b4c2125c26bfbfba687c56e02fa8fed Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 11:11:41 +0300 Subject: [PATCH 040/108] AMP/task3/fix: remove promise --- .../app/angular-intro/footer/footer.module.ts | 22 +++++++++++++++++++ .../modalWindow/modalWindow.component.ts | 11 +++++----- 2 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/footer/footer.module.ts diff --git a/angular-starter/src/app/angular-intro/footer/footer.module.ts b/angular-starter/src/app/angular-intro/footer/footer.module.ts new file mode 100644 index 0000000..6ef246f --- /dev/null +++ b/angular-starter/src/app/angular-intro/footer/footer.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { FooterComponent } from './footer.component'; + +console.log('`Footer` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + FooterComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + FooterComponent, + ], +}) +export class FooterModule {} diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index 61ef792..dd1cbc8 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -30,12 +30,11 @@ export class ModalWindowComponent implements OnInit { this.visible = true; // --------- REALLY????? - new Promise((res, rej) => { this.click = (text) => res(text ? text : 'Close'); }) - .then((result: string) => { - observer.next(result); - this.visible = false; - observer.complete(); - }); + this.click = (text) => { + observer.next(text ? text : 'Close'); + this.visible = false; + observer.complete(); + }; }) From 5704affd45eb3226e581e6364061bad58dbb0e64 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 12:49:07 +0300 Subject: [PATCH 041/108] AMP/task3_authorization/features: 1) reuse, show/hide --- .../angular-intro.component.html | 3 +- .../app/angular-intro/angular-intro.module.ts | 13 ++++---- .../app/angular-intro/core/entities/index.ts | 1 + .../app/angular-intro/core/entities/user.ts | 4 +++ .../core/services/authorization.service.ts | 24 +++++++++++++++ .../app/angular-intro/core/services/index.ts | 2 ++ .../angular-intro/course/course.component.ts | 2 +- .../src/app/angular-intro/footer/index.ts | 1 + .../header/header.component.html | 7 ++--- .../angular-intro/header/header.component.ts | 14 +++++++-- .../src/app/angular-intro/login-page/index.ts | 2 ++ .../login-page/login-page.component.css | 6 ++++ .../login-page/login-page.component.html | 6 ++++ .../login-page/login-page.component.ts | 16 ++++++++++ .../login-page/login-page.module.ts | 30 +++++++++++++++++++ angular-starter/src/app/app.module.ts | 22 +++++++++++--- 16 files changed, 136 insertions(+), 17 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/core/entities/user.ts create mode 100644 angular-starter/src/app/angular-intro/core/services/authorization.service.ts create mode 100644 angular-starter/src/app/angular-intro/login-page/index.ts create mode 100644 angular-starter/src/app/angular-intro/login-page/login-page.component.css create mode 100644 angular-starter/src/app/angular-intro/login-page/login-page.component.html create mode 100644 angular-starter/src/app/angular-intro/login-page/login-page.component.ts create mode 100644 angular-starter/src/app/angular-intro/login-page/login-page.module.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index 2ad6891..7a4da98 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -1,7 +1,8 @@
+ + -
diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index 9461f1d..7d6964d 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -2,12 +2,14 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { HeaderModule } from './header'; +import { FooterModule } from './footer'; import { ToolbarModule } from './toolbar'; import { CoursesModule } from './courses'; import { CourseModule } from './course'; -import { FooterComponent } from './footer'; -import { IntroComponent } from './angular-intro.component'; import { ModalWindowModule } from './modalWindow'; +import { LoginPageModule } from './login-page'; + +import { IntroComponent } from './angular-intro.component'; console.log('`INTRO` bundle loaded asynchronously'); @@ -17,21 +19,22 @@ console.log('`INTRO` bundle loaded asynchronously'); * Components / Directives/ Pipes */ - FooterComponent, - IntroComponent, ], imports: [ CommonModule, HeaderModule, + FooterModule, ToolbarModule, CoursesModule, CourseModule, ModalWindowModule, + LoginPageModule, + ], exports: [ - IntroComponent + IntroComponent, ], }) export class IntroModule {} diff --git a/angular-starter/src/app/angular-intro/core/entities/index.ts b/angular-starter/src/app/angular-intro/core/entities/index.ts index eac4c03..5f215f3 100644 --- a/angular-starter/src/app/angular-intro/core/entities/index.ts +++ b/angular-starter/src/app/angular-intro/core/entities/index.ts @@ -1,2 +1,3 @@ export * from './course'; export * from './time'; +export * from './user'; diff --git a/angular-starter/src/app/angular-intro/core/entities/user.ts b/angular-starter/src/app/angular-intro/core/entities/user.ts new file mode 100644 index 0000000..82a22de --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/entities/user.ts @@ -0,0 +1,4 @@ +export class User { + public id: number; + public userName: string; +} diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts new file mode 100644 index 0000000..9b99b37 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; + +@Injectable() +export class AuthorizationService { + private userId = 0; + constructor() { + console.log('### AuthorizationService constructor ###'); + } + public login() { + // Login (stores fake user info and token to local storage) + } + public logout() { + // Logout (wipes fake user info and token from local storage) + } + public isAuthenticated() { + // IsAuthenticated (boolean) + console.log('### AuthorizationService.isAuthenticated ###'); + return !!this.userId; + } + public getUserInfo() { + // GetUserInfo (returns user login) + } + +} diff --git a/angular-starter/src/app/angular-intro/core/services/index.ts b/angular-starter/src/app/angular-intro/core/services/index.ts index ee98a9f..b362839 100644 --- a/angular-starter/src/app/angular-intro/core/services/index.ts +++ b/angular-starter/src/app/angular-intro/core/services/index.ts @@ -1 +1,3 @@ export * from './course.services'; +export * from './modalWindow.service'; +export * from './authorization.service'; diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index c210d28..c2e935b 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -7,7 +7,7 @@ import { import { NgForm } from '@angular/forms'; import { Course } from '../core'; import { MyDate } from '../core/entities/date'; -import { ModalWindowServices } from '../core/services/modalWindow.service'; +import { ModalWindowServices } from '../core'; @Component({ selector: 'course', diff --git a/angular-starter/src/app/angular-intro/footer/index.ts b/angular-starter/src/app/angular-intro/footer/index.ts index a50d573..1699133 100644 --- a/angular-starter/src/app/angular-intro/footer/index.ts +++ b/angular-starter/src/app/angular-intro/footer/index.ts @@ -1 +1,2 @@ export * from './footer.component'; +export * from './footer.module'; diff --git a/angular-starter/src/app/angular-intro/header/header.component.html b/angular-starter/src/app/angular-intro/header/header.component.html index 9012484..9e693c3 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.html +++ b/angular-starter/src/app/angular-intro/header/header.component.html @@ -7,9 +7,8 @@

Angular

-
-

courses

-

which element is it?

+
+

breadcrumbs

- +
diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index 26e4633..4ca330f 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -1,9 +1,12 @@ import { Component, - OnInit + OnInit, + Input, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +import { AuthorizationService } from '../core'; + @Component({ selector: 'app-header', templateUrl: './header.component.html', @@ -12,10 +15,17 @@ import { ActivatedRoute } from '@angular/router'; export class HeaderComponent implements OnInit { public localState: any; + @Input() protected owner: string; + constructor( - public route: ActivatedRoute + public route: ActivatedRoute, + private authorizationService: AuthorizationService ) {} + get isAuth() { + return this.authorizationService.isAuthenticated(); + } + public ngOnInit() { this.route .data diff --git a/angular-starter/src/app/angular-intro/login-page/index.ts b/angular-starter/src/app/angular-intro/login-page/index.ts new file mode 100644 index 0000000..32272f1 --- /dev/null +++ b/angular-starter/src/app/angular-intro/login-page/index.ts @@ -0,0 +1,2 @@ +export * from './login-page.component'; +export * from './login-page.module'; diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.css b/angular-starter/src/app/angular-intro/login-page/login-page.component.css new file mode 100644 index 0000000..be17fd2 --- /dev/null +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.css @@ -0,0 +1,6 @@ +:host /deep/>div{ + color: palevioletred; + border: 3px solid rgb(43, 178, 219); + margin: 15px; + padding: 15px; +} diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.html b/angular-starter/src/app/angular-intro/login-page/login-page.component.html new file mode 100644 index 0000000..a3f2f39 --- /dev/null +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.html @@ -0,0 +1,6 @@ +
+ +

LOGIN PAGE

+ Yeah, i'm login page + +
diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts new file mode 100644 index 0000000..2e14c0b --- /dev/null +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts @@ -0,0 +1,16 @@ +import { + Component, +} from '@angular/core'; +import { NgForm } from '@angular/forms'; + +@Component({ + selector: 'login-page', + templateUrl: './login-page.component.html', + styleUrls: ['./login-page.component.css'] +}) + +export class LoginPageComponent { + constructor() { + console.log('login-page-constructor'); + } +} diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.module.ts b/angular-starter/src/app/angular-intro/login-page/login-page.module.ts new file mode 100644 index 0000000..fae79b2 --- /dev/null +++ b/angular-starter/src/app/angular-intro/login-page/login-page.module.ts @@ -0,0 +1,30 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { FormsModule } from '@angular/forms'; + +import { LoginPageComponent } from './login-page.component'; + +import { HeaderModule } from '../header'; +import { FooterModule } from '../footer'; + +console.log('`login-page` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + LoginPageComponent, + ], + imports: [ + CommonModule, + FormsModule, + + HeaderModule, + FooterModule, + ], + exports: [ + LoginPageComponent, + ], +}) +export class LoginPageModule {} diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index a8f0344..6430b0c 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -20,9 +20,18 @@ import { NoContentComponent } from './no-content'; import { XLargeDirective } from './home/x-large'; import { DevModuleModule } from './+dev-module'; +// -------------------------------------------------------------------- import { IntroModule } from './angular-intro'; -import { CourseServices } from './angular-intro/core'; -import { ModalWindowServices } from './angular-intro/core/services/modalWindow.service'; + +// CourseServices, +// ModalWindowServices, +// AuthorizationService, +import * as INTRO_SERVICES from './angular-intro/core/services'; + +function toArray(obj) { + return Object.keys(obj).map((k) => obj[k]); +} +// -------------------------------------------------------------------- import '../styles/styles.scss'; import '../styles/headings.css'; @@ -31,8 +40,11 @@ import '../styles/headings.css'; const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, AppState, - CourseServices, - ModalWindowServices, + + // -------------------------------------------------------------------- + ...toArray(INTRO_SERVICES), + // -------------------------------------------------------------------- + ]; interface StoreType { @@ -66,7 +78,9 @@ interface StoreType { preloadingStrategy: PreloadAllModules }), + // -------------------------------------------------------------------- IntroModule, + // -------------------------------------------------------------------- /** * This section will import the `DevModuleModule` only in certain build types. From 8f73022ebeeb7a0257e92980049f9a8508a481b1 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 13:01:48 +0300 Subject: [PATCH 042/108] AMP/task3/fix: rename loginform->userinfo --- .../app/angular-intro/course/course.component.ts | 2 ++ .../angular-intro/header/header.component.html | 2 +- .../app/angular-intro/header/header.module.ts | 4 ++-- .../src/app/angular-intro/loginform/index.ts | 2 -- .../loginform/loginform.component.ts | 16 ---------------- .../src/app/angular-intro/userinfo/index.ts | 2 ++ .../userinfo.component.css} | 0 .../userinfo.component.html} | 2 +- .../angular-intro/userinfo/userinfo.component.ts | 16 ++++++++++++++++ .../userinfo.module.ts} | 10 +++++----- 10 files changed, 29 insertions(+), 27 deletions(-) delete mode 100644 angular-starter/src/app/angular-intro/loginform/index.ts delete mode 100644 angular-starter/src/app/angular-intro/loginform/loginform.component.ts create mode 100644 angular-starter/src/app/angular-intro/userinfo/index.ts rename angular-starter/src/app/angular-intro/{loginform/loginform.component.css => userinfo/userinfo.component.css} (100%) rename angular-starter/src/app/angular-intro/{loginform/loginform.component.html => userinfo/userinfo.component.html} (71%) create mode 100644 angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts rename angular-starter/src/app/angular-intro/{loginform/loginform.module.ts => userinfo/userinfo.module.ts} (54%) diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index c2e935b..4bdaaca 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -5,8 +5,10 @@ import { EventEmitter, } from '@angular/core'; import { NgForm } from '@angular/forms'; +// --------------- import { Course } from '../core'; import { MyDate } from '../core/entities/date'; +// --------------- import { ModalWindowServices } from '../core'; @Component({ diff --git a/angular-starter/src/app/angular-intro/header/header.component.html b/angular-starter/src/app/angular-intro/header/header.component.html index 9e693c3..43c6d62 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.html +++ b/angular-starter/src/app/angular-intro/header/header.component.html @@ -10,5 +10,5 @@

Angular

breadcrumbs

- +
diff --git a/angular-starter/src/app/angular-intro/header/header.module.ts b/angular-starter/src/app/angular-intro/header/header.module.ts index 4e8c748..950d25b 100644 --- a/angular-starter/src/app/angular-intro/header/header.module.ts +++ b/angular-starter/src/app/angular-intro/header/header.module.ts @@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { HeaderComponent } from './header.component'; -import { LoginFormModule } from '../loginform'; +import { UserInfoModule } from '../userinfo'; console.log('`Header` bundle loaded asynchronously'); @@ -15,7 +15,7 @@ console.log('`Header` bundle loaded asynchronously'); ], imports: [ CommonModule, - LoginFormModule, + UserInfoModule ], exports: [ HeaderComponent, diff --git a/angular-starter/src/app/angular-intro/loginform/index.ts b/angular-starter/src/app/angular-intro/loginform/index.ts deleted file mode 100644 index 677e81f..0000000 --- a/angular-starter/src/app/angular-intro/loginform/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './loginform.component'; -export * from './loginform.module'; diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.ts b/angular-starter/src/app/angular-intro/loginform/loginform.component.ts deleted file mode 100644 index a8ea1ab..0000000 --- a/angular-starter/src/app/angular-intro/loginform/loginform.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - Component, - OnInit, -} from '@angular/core'; - -@Component({ - selector: 'login', - templateUrl: './loginform.component.html', - styleUrls: ['./loginform.component.css'] -}) - -export class LoginFormComponent implements OnInit { - public ngOnInit() { - console.log('hello `loginform` component'); - } -} diff --git a/angular-starter/src/app/angular-intro/userinfo/index.ts b/angular-starter/src/app/angular-intro/userinfo/index.ts new file mode 100644 index 0000000..65bb4be --- /dev/null +++ b/angular-starter/src/app/angular-intro/userinfo/index.ts @@ -0,0 +1,2 @@ +export * from './userinfo.component'; +export * from './userinfo.module'; diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.css b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.css similarity index 100% rename from angular-starter/src/app/angular-intro/loginform/loginform.component.css rename to angular-starter/src/app/angular-intro/userinfo/userinfo.component.css diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.component.html b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html similarity index 71% rename from angular-starter/src/app/angular-intro/loginform/loginform.component.html rename to angular-starter/src/app/angular-intro/userinfo/userinfo.component.html index 451ab5a..ed417ba 100644 --- a/angular-starter/src/app/angular-intro/loginform/loginform.component.html +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html @@ -1,5 +1,5 @@
-

I'm loginform

+

I'm userinfo

User Login

diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts new file mode 100644 index 0000000..15cbec8 --- /dev/null +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -0,0 +1,16 @@ +import { + Component, + OnInit, +} from '@angular/core'; + +@Component({ + selector: 'userinfo', + templateUrl: './userinfo.component.html', + styleUrls: ['./userinfo.component.css'] +}) + +export class UserInfoComponent implements OnInit { + public ngOnInit() { + console.log('hello `userinfo` component'); + } +} diff --git a/angular-starter/src/app/angular-intro/loginform/loginform.module.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.module.ts similarity index 54% rename from angular-starter/src/app/angular-intro/loginform/loginform.module.ts rename to angular-starter/src/app/angular-intro/userinfo/userinfo.module.ts index 310d3cb..ff8117b 100644 --- a/angular-starter/src/app/angular-intro/loginform/loginform.module.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.module.ts @@ -1,22 +1,22 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { LoginFormComponent } from './loginform.component'; +import { UserInfoComponent } from './userinfo.component'; -console.log('`loginform` bundle loaded asynchronously'); +console.log('`userinfo` bundle loaded asynchronously'); @NgModule({ declarations: [ /** * Components / Directives/ Pipes */ - LoginFormComponent, + UserInfoComponent, ], imports: [ CommonModule, ], exports: [ - LoginFormComponent, + UserInfoComponent, ], }) -export class LoginFormModule {} +export class UserInfoModule {} From 91ca5b65f0b2f43b0aa53748bb99504561c9be34 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 13:40:10 +0300 Subject: [PATCH 043/108] AMP/task3_authorization/features: done --- .../core/services/authorization.service.ts | 19 ++++++++++++++++--- .../login-page/login-page.component.html | 6 +++++- .../login-page/login-page.component.ts | 12 +++++++++++- .../toolbar/search/search.component.html | 2 +- .../userinfo/userinfo.component.html | 4 ++-- .../userinfo/userinfo.component.ts | 11 +++++++++++ 6 files changed, 46 insertions(+), 8 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index 9b99b37..e203bd1 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -1,24 +1,37 @@ import { Injectable } from '@angular/core'; +import { User } from '../entities'; @Injectable() export class AuthorizationService { - private userId = 0; + private user: User = { + id: 0, + userName: 'NoName', + }; constructor() { console.log('### AuthorizationService constructor ###'); } - public login() { + public login(payload: any) {// how do it right?? // Login (stores fake user info and token to local storage) + + console.log(`name:${payload.login}, pass:${payload.password}`); + // userId = verify(payload); + this.user.userName = payload.login; + this.user.id = Math.trunc(1 + Math.random() * 10); } public logout() { // Logout (wipes fake user info and token from local storage) + this.user = {id: 0, userName: 'NoName', }; } public isAuthenticated() { // IsAuthenticated (boolean) console.log('### AuthorizationService.isAuthenticated ###'); - return !!this.userId; + return !!this.user.id; } public getUserInfo() { // GetUserInfo (returns user login) + return { + login: this.user.userName, + }; } } diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.html b/angular-starter/src/app/angular-intro/login-page/login-page.component.html index a3f2f39..9ebd6e4 100644 --- a/angular-starter/src/app/angular-intro/login-page/login-page.component.html +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.html @@ -1,6 +1,10 @@

LOGIN PAGE

- Yeah, i'm login page +
+ + + +
diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts index 2e14c0b..8077a51 100644 --- a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts @@ -2,6 +2,7 @@ import { Component, } from '@angular/core'; import { NgForm } from '@angular/forms'; +import { AuthorizationService } from '../core'; @Component({ selector: 'login-page', @@ -10,7 +11,16 @@ import { NgForm } from '@angular/forms'; }) export class LoginPageComponent { - constructor() { + protected login: string; + protected password: string; + constructor(private authorizationService: AuthorizationService) { console.log('login-page-constructor'); + this.login = ''; + this.password = ''; + } + + public click() { + // console.log(`name:${this.login}, pass:${this.password}`); + this.authorizationService.login({login: this.login, password: this.password}); } } diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.html b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html index e87e742..e4d54e0 100644 --- a/angular-starter/src/app/angular-intro/toolbar/search/search.component.html +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.html @@ -1,4 +1,4 @@
- +
diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html index ed417ba..53b19a7 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.html @@ -1,5 +1,5 @@

I'm userinfo

-

User Login

- +

Login: {{login}}

+
diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts index 15cbec8..42894b3 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit, } from '@angular/core'; +import { AuthorizationService } from '../core'; @Component({ selector: 'userinfo', @@ -10,7 +11,17 @@ import { }) export class UserInfoComponent implements OnInit { + constructor(private authorizationService: AuthorizationService) {} + public ngOnInit() { console.log('hello `userinfo` component'); } + get login() { + return this.authorizationService.isAuthenticated + ? this.authorizationService.getUserInfo().login + : 'NoAuth'; + } + public click() { + this.authorizationService.logout(); + } } From a82f120d0183d565ea7aac0f693b9ddb7dadd548 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 14:55:46 +0300 Subject: [PATCH 044/108] AMP/task3/refactor: remove unuseful observable --- .../app/angular-intro/core/services/course.services.ts | 2 +- .../angular-intro/core/services/modalWindow.service.ts | 8 +------- .../src/app/angular-intro/courses/courses.component.ts | 8 -------- 3 files changed, 2 insertions(+), 16 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index ea2ab4b..656de0d 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -8,7 +8,7 @@ import { Course } from '../entities'; @Injectable() export class CourseServices { - protected couresArr: Course[] = []; + private couresArr: Course[] = []; constructor() { console.log('### CourseServices constructor ###'); this.couresArr = [...COURSES]; diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index 130ca3e..d41050b 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -23,13 +23,7 @@ export class ModalWindowServices { this.data.message = message; this.data.answerArr = answerArr; - return new Observable((observer) => { - const listener = this.source.subscribe( - (x) => observer.next(x), // resend all from source in new Observable - (error) => { console.warn(`### ModalWindowServices.show.error: ${error} ###`); }, - () => observer.complete(), - ); - }); + return this.source; } public listenMe(source: Observable) { diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 7af89e4..c6184a6 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -42,12 +42,4 @@ export class CoursesComponent implements OnInit { this.courseServices.removeItem(id); } - protected deletter_promise(id: Promise) { - id.then((result) => { - console.log(`courses.deletter id=${result}`); - this.courseServices.removeItem(result); - }); - id.catch( (error) => { console.log(`courses.deletter ERROR: ${error}`); }); - } - } From 84dce17d7c00b604294b9d82b8fd1ebc5bc6d17c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 16:18:34 +0300 Subject: [PATCH 045/108] AMP/task4/features: onPush, need correct: userInfo --- .../app/angular-intro/angular-intro.component.ts | 4 +++- .../core/services/authorization.service.ts | 3 +++ .../core/services/modalWindow.service.ts | 12 ++++++++++++ .../app/angular-intro/course/course.component.ts | 4 +++- .../app/angular-intro/courses/courses.component.ts | 5 +++-- .../app/angular-intro/footer/footer.component.ts | 6 ++++-- .../app/angular-intro/header/header.component.ts | 2 ++ .../login-page/login-page.component.ts | 5 +++-- .../modalWindow/modalWindow.component.ts | 13 +++++++++---- .../toolbar/search/search.component.ts | 2 ++ .../app/angular-intro/toolbar/toolbar.component.ts | 4 +++- .../angular-intro/userinfo/userinfo.component.ts | 13 +++++++++++-- 12 files changed, 58 insertions(+), 15 deletions(-) diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.ts b/angular-starter/src/app/angular-intro/angular-intro.component.ts index c3dd6be..dfcbcb2 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit, + ChangeDetectionStrategy, } from '@angular/core'; @Component({ selector: 'intro', templateUrl: './angular-intro.component.html', - styleUrls: ['./angular-intro.component.css'] + styleUrls: ['./angular-intro.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class IntroComponent implements OnInit { diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index e203bd1..00723da 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -1,5 +1,6 @@ import { Injectable } from '@angular/core'; import { User } from '../entities'; +import { Observable } from 'rxjs/Observable'; @Injectable() export class AuthorizationService { @@ -7,6 +8,8 @@ export class AuthorizationService { id: 0, userName: 'NoName', }; + private source: Observable; + constructor() { console.log('### AuthorizationService constructor ###'); } diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index d41050b..c7ef5cd 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -7,6 +7,7 @@ export class ModalWindowServices { public data = { message: 'Are you shure?', answerArr: ['Yes', 'No'], + visible: false, }; private source: Observable; @@ -22,8 +23,19 @@ export class ModalWindowServices { this.data.message = message; this.data.answerArr = answerArr; + this.data.visible = true; return this.source; + // return new Observable((observer) => { + // const listener = this.source.subscribe( + // (x) => observer.next(x), // resend all from source in new Observable + // (error) => { console.warn(`### ModalWindowServices.show.error: ${error} ###`); }, + // () => { + // this.data.visible = false; + // observer.complete(); + // }, + // ); + // }); } public listenMe(source: Observable) { diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 4bdaaca..89f85f8 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -3,6 +3,7 @@ import { Input, Output, EventEmitter, + ChangeDetectionStrategy, } from '@angular/core'; import { NgForm } from '@angular/forms'; // --------------- @@ -14,7 +15,8 @@ import { ModalWindowServices } from '../core'; @Component({ selector: 'course', templateUrl: './course.component.html', - styleUrls: ['./course.component.css'] + styleUrls: ['./course.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class CourseComponent { diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index c6184a6..9b2b222 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,11 +1,12 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; import { CourseServices } from '../core'; @Component({ selector: 'courses', templateUrl: './courses.component.html', - styleUrls: ['./courses.component.css'] + styleUrls: ['./courses.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; diff --git a/angular-starter/src/app/angular-intro/footer/footer.component.ts b/angular-starter/src/app/angular-intro/footer/footer.component.ts index 5810dff..acc9751 100644 --- a/angular-starter/src/app/angular-intro/footer/footer.component.ts +++ b/angular-starter/src/app/angular-intro/footer/footer.component.ts @@ -1,6 +1,7 @@ import { Component, - OnInit + OnInit, + ChangeDetectionStrategy } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; @@ -9,7 +10,8 @@ import { ActivatedRoute } from '@angular/router'; styleUrls: [ './footer.component.css' ], - templateUrl: './footer.component.html' + templateUrl: './footer.component.html', + changeDetection: ChangeDetectionStrategy.OnPush, }) export class FooterComponent implements OnInit { diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index 4ca330f..d79c121 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -2,6 +2,7 @@ import { Component, OnInit, Input, + ChangeDetectionStrategy, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; @@ -11,6 +12,7 @@ import { AuthorizationService } from '../core'; selector: 'app-header', templateUrl: './header.component.html', styleUrls: ['./header.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class HeaderComponent implements OnInit { diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts index 8077a51..06fd5b5 100644 --- a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts @@ -1,5 +1,5 @@ import { - Component, + Component, ChangeDetectionStrategy, } from '@angular/core'; import { NgForm } from '@angular/forms'; import { AuthorizationService } from '../core'; @@ -7,7 +7,8 @@ import { AuthorizationService } from '../core'; @Component({ selector: 'login-page', templateUrl: './login-page.component.html', - styleUrls: ['./login-page.component.css'] + styleUrls: ['./login-page.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class LoginPageComponent { diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index dd1cbc8..d6217e3 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -1,5 +1,5 @@ import { - Component, OnInit, + Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef, } from '@angular/core'; import { ModalWindowServices } from '../core/services/modalWindow.service'; @@ -8,7 +8,8 @@ import { Observable } from 'rxjs/Observable'; @Component({ selector: 'modalWindow', templateUrl: './modalWindow.component.html', - styleUrls: ['./modalWindow.component.css'] + styleUrls: ['./modalWindow.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class ModalWindowComponent implements OnInit { private click: (answer: string) => void; @@ -17,7 +18,10 @@ export class ModalWindowComponent implements OnInit { message: 'NoMessage', answerArr: ['Yes', 'No'], }; - constructor(private modalWindowServices: ModalWindowServices) { + constructor( + private modalWindowServices: ModalWindowServices, + private changeDetectorRef: ChangeDetectorRef, + ) { console.log('ModalWindowComponent constructor'); } @@ -28,11 +32,12 @@ export class ModalWindowComponent implements OnInit { new Observable((observer) => { this.data = this.modalWindowServices.data; this.visible = true; - + this.changeDetectorRef.markForCheck(); // --------- REALLY????? this.click = (text) => { observer.next(text ? text : 'Close'); this.visible = false; + this.changeDetectorRef.markForCheck(); observer.complete(); }; diff --git a/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts index 2294970..28ff4dd 100644 --- a/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts +++ b/angular-starter/src/app/angular-intro/toolbar/search/search.component.ts @@ -3,6 +3,7 @@ import { Component, OnInit, NgModule, + ChangeDetectionStrategy, } from '@angular/core'; import { FormsModule } from '@angular/forms'; @@ -10,6 +11,7 @@ import { FormsModule } from '@angular/forms'; selector: 'search', templateUrl: './search.component.html', styleUrls: ['./search.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush }) export class SearchComponent { protected searchText: string; diff --git a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts index 95c683a..6a44a4d 100644 --- a/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts +++ b/angular-starter/src/app/angular-intro/toolbar/toolbar.component.ts @@ -1,12 +1,14 @@ import { Component, OnInit, + ChangeDetectionStrategy, } from '@angular/core'; @Component({ selector: 'tools', templateUrl: './toolbar.component.html', - styleUrls: ['./toolbar.component.css'] + styleUrls: ['./toolbar.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class ToolbarComponent implements OnInit { diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts index 42894b3..eb336df 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -1,17 +1,25 @@ import { Component, OnInit, + ChangeDetectionStrategy, + // ChangeDetectorRef, } from '@angular/core'; import { AuthorizationService } from '../core'; @Component({ selector: 'userinfo', templateUrl: './userinfo.component.html', - styleUrls: ['./userinfo.component.css'] + styleUrls: ['./userinfo.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush, }) export class UserInfoComponent implements OnInit { - constructor(private authorizationService: AuthorizationService) {} + constructor( + private authorizationService: AuthorizationService, + // private changeDetectorRef: ChangeDetectorRef, + ) { + console.log('UserInfoComponent constructor'); + } public ngOnInit() { console.log('hello `userinfo` component'); @@ -23,5 +31,6 @@ export class UserInfoComponent implements OnInit { } public click() { this.authorizationService.logout(); + // this.changeDetectorRef.markForCheck(); } } From dbe85de1405160e4e336a8b79af09d837758e09f Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Fri, 30 Mar 2018 17:35:52 +0300 Subject: [PATCH 046/108] AMP/task4/features: OnPush, next:Profiling --- .../core/services/authorization.service.ts | 9 +++++++-- .../core/services/modalWindow.service.ts | 10 ---------- .../app/angular-intro/header/header.component.ts | 13 ++++++++++--- .../angular-intro/userinfo/userinfo.component.ts | 10 +++++++--- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index 00723da..0a04468 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -4,14 +4,18 @@ import { Observable } from 'rxjs/Observable'; @Injectable() export class AuthorizationService { + public source: Observable; private user: User = { id: 0, userName: 'NoName', }; - private source: Observable; + private action: () => void; constructor() { console.log('### AuthorizationService constructor ###'); + this.source = new Observable((observer) => { + this.action = () => { observer.next(''); }; + }); } public login(payload: any) {// how do it right?? // Login (stores fake user info and token to local storage) @@ -20,14 +24,15 @@ export class AuthorizationService { // userId = verify(payload); this.user.userName = payload.login; this.user.id = Math.trunc(1 + Math.random() * 10); + this.action(); } public logout() { // Logout (wipes fake user info and token from local storage) this.user = {id: 0, userName: 'NoName', }; + this.action(); } public isAuthenticated() { // IsAuthenticated (boolean) - console.log('### AuthorizationService.isAuthenticated ###'); return !!this.user.id; } public getUserInfo() { diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts index c7ef5cd..50844b7 100644 --- a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts @@ -26,16 +26,6 @@ export class ModalWindowServices { this.data.visible = true; return this.source; - // return new Observable((observer) => { - // const listener = this.source.subscribe( - // (x) => observer.next(x), // resend all from source in new Observable - // (error) => { console.warn(`### ModalWindowServices.show.error: ${error} ###`); }, - // () => { - // this.data.visible = false; - // observer.complete(); - // }, - // ); - // }); } public listenMe(source: Observable) { diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index d79c121..f08a431 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -3,6 +3,7 @@ import { OnInit, Input, ChangeDetectionStrategy, + ChangeDetectorRef, } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; @@ -12,7 +13,6 @@ import { AuthorizationService } from '../core'; selector: 'app-header', templateUrl: './header.component.html', styleUrls: ['./header.component.css'], - changeDetection: ChangeDetectionStrategy.OnPush }) export class HeaderComponent implements OnInit { @@ -21,8 +21,11 @@ export class HeaderComponent implements OnInit { constructor( public route: ActivatedRoute, - private authorizationService: AuthorizationService - ) {} + private authorizationService: AuthorizationService, + private changeDetectorRef: ChangeDetectorRef, + ) { + console.log('HeaderComponent constructor'); + } get isAuth() { return this.authorizationService.isAuthenticated(); @@ -39,6 +42,10 @@ export class HeaderComponent implements OnInit { }); console.log('hello `Header` component'); + // because auth-info must be actual + this.authorizationService.source.subscribe( + () => this.changeDetectorRef.markForCheck(), + ); /** * static data that is bundled * var mockData = require('assets/mock-data/mock-data.json'); diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts index eb336df..5c4ba51 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, - // ChangeDetectorRef, + ChangeDetectorRef, } from '@angular/core'; import { AuthorizationService } from '../core'; @@ -16,13 +16,18 @@ import { AuthorizationService } from '../core'; export class UserInfoComponent implements OnInit { constructor( private authorizationService: AuthorizationService, - // private changeDetectorRef: ChangeDetectorRef, + private changeDetectorRef: ChangeDetectorRef, ) { console.log('UserInfoComponent constructor'); } public ngOnInit() { console.log('hello `userinfo` component'); + + // because info must be actual + this.authorizationService.source.subscribe( + () => this.changeDetectorRef.markForCheck(), + ); } get login() { return this.authorizationService.isAuthenticated @@ -31,6 +36,5 @@ export class UserInfoComponent implements OnInit { } public click() { this.authorizationService.logout(); - // this.changeDetectorRef.markForCheck(); } } From 3a65a27661d23e9515436f1feb8e70e0b95290f5 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 09:01:45 +0300 Subject: [PATCH 047/108] AMP/task3/fix: remove unusefull deletter Signed-off-by: ArlinskiEV --- .../src/app/angular-intro/courses/courses.component.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 9b2b222..82e1c50 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -31,16 +31,11 @@ export class CoursesComponent implements OnInit { console.log(`courses.handler emit.type=${emit.type}`); switch (emit.type) { case 'deletter': { - // or this.courseServices.removeItem(emit.value); - this.deletter(emit.value); + console.log(`courses.deletter id=${emit.value}`); + this.courseServices.removeItem(emit.value); break; } } } - protected deletter(id: number) { - console.log(`courses.deletter id=${id}`); - this.courseServices.removeItem(id); - } - } From 3a026c9651626fdc6d8cd7f2c8e66c089c9f188c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 09:34:12 +0300 Subject: [PATCH 048/108] AMP/task4/features: stable/unstable in auth-service --- .../core/services/authorization.service.ts | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index 0a04468..540da03 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import { User } from '../entities'; import { Observable } from 'rxjs/Observable'; +import { NgZone } from '@angular/core'; + @Injectable() export class AuthorizationService { public source: Observable; @@ -11,11 +13,20 @@ export class AuthorizationService { }; private action: () => void; - constructor() { + constructor(private _ngZone: NgZone) { console.log('### AuthorizationService constructor ###'); this.source = new Observable((observer) => { this.action = () => { observer.next(''); }; }); + + // ---------------------------------------------------------------- + _ngZone.onStable.subscribe(() => console.log(`ngZone Stable. now=${Date.now()}`)); + // get onUnstable: EventEmitter + _ngZone.onUnstable.subscribe(() => console.log(`ngZone Unstable. now=${Date.now()}`)); + // get onStable: EventEmitter + + // ---------------------------------------------------------------- + } public login(payload: any) {// how do it right?? // Login (stores fake user info and token to local storage) From aa362eb267b8dd3b5561eac6820d11bddb8727cb Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 12:57:25 +0300 Subject: [PATCH 049/108] AMP/task4/features: getUserInfo -> observable --- .../core/services/authorization.service.ts | 40 ++++++++++++------- .../angular-intro/header/header.component.ts | 15 +++---- .../userinfo/userinfo.component.ts | 24 ++++++----- 3 files changed, 47 insertions(+), 32 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index 540da03..bfaba0f 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -1,56 +1,66 @@ import { Injectable } from '@angular/core'; import { User } from '../entities'; import { Observable } from 'rxjs/Observable'; +import { Subject } from 'rxjs/Subject'; import { NgZone } from '@angular/core'; +import 'rxjs/add/operator/shareReplay'; +import 'rxjs/add/operator/publishReplay'; + +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; + @Injectable() export class AuthorizationService { - public source: Observable; + // public source: Observable; + public mySource: BehaviorSubject; + // object = {login: 'myLogin'} private user: User = { id: 0, - userName: 'NoName', + userName: 'NoName(serv)', }; - private action: () => void; + // private action: () => void; constructor(private _ngZone: NgZone) { console.log('### AuthorizationService constructor ###'); - this.source = new Observable((observer) => { - this.action = () => { observer.next(''); }; - }); + this.mySource = new BehaviorSubject({login: ''}); // ---------------------------------------------------------------- _ngZone.onStable.subscribe(() => console.log(`ngZone Stable. now=${Date.now()}`)); // get onUnstable: EventEmitter - _ngZone.onUnstable.subscribe(() => console.log(`ngZone Unstable. now=${Date.now()}`)); + _ngZone.onUnstable.subscribe(() => console.log(`ngZone UnStable. now=${Date.now()}`)); // get onStable: EventEmitter - // ---------------------------------------------------------------- } + // get source() { + // return this.mySource.asObservable(); + // } + public login(payload: any) {// how do it right?? // Login (stores fake user info and token to local storage) console.log(`name:${payload.login}, pass:${payload.password}`); - // userId = verify(payload); + // verify + this.user.userName = payload.login; this.user.id = Math.trunc(1 + Math.random() * 10); - this.action(); + // this.action(); + this.mySource.next({login: this.user.userName}); } public logout() { // Logout (wipes fake user info and token from local storage) this.user = {id: 0, userName: 'NoName', }; - this.action(); + // this.action(); + this.mySource.next({login: ''}); } public isAuthenticated() { // IsAuthenticated (boolean) return !!this.user.id; } public getUserInfo() { - // GetUserInfo (returns user login) - return { - login: this.user.userName, - }; + // return this.mySource.asObservable().shareReplay(1); + return this.mySource.asObservable(); } } diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index f08a431..87c33c5 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -20,19 +20,19 @@ export class HeaderComponent implements OnInit { @Input() protected owner: string; constructor( - public route: ActivatedRoute, - private authorizationService: AuthorizationService, - private changeDetectorRef: ChangeDetectorRef, + public _route: ActivatedRoute, + private _authorizationService: AuthorizationService, + private _changeDetectorRef: ChangeDetectorRef, ) { console.log('HeaderComponent constructor'); } get isAuth() { - return this.authorizationService.isAuthenticated(); + return this._authorizationService.isAuthenticated(); } public ngOnInit() { - this.route + this._route .data .subscribe((data: any) => { /** @@ -43,9 +43,10 @@ export class HeaderComponent implements OnInit { console.log('hello `Header` component'); // because auth-info must be actual - this.authorizationService.source.subscribe( - () => this.changeDetectorRef.markForCheck(), + this._authorizationService.getUserInfo().subscribe( + () => this._changeDetectorRef.markForCheck(), ); + /** * static data that is bundled * var mockData = require('assets/mock-data/mock-data.json'); diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts index 5c4ba51..3e9ec91 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -14,9 +14,10 @@ import { AuthorizationService } from '../core'; }) export class UserInfoComponent implements OnInit { + private login = 'NoName'; constructor( - private authorizationService: AuthorizationService, - private changeDetectorRef: ChangeDetectorRef, + private _authorizationService: AuthorizationService, + private _changeDetectorRef: ChangeDetectorRef, ) { console.log('UserInfoComponent constructor'); } @@ -25,16 +26,19 @@ export class UserInfoComponent implements OnInit { console.log('hello `userinfo` component'); // because info must be actual - this.authorizationService.source.subscribe( - () => this.changeDetectorRef.markForCheck(), + this._authorizationService.getUserInfo().subscribe( + (payload) => { + console.log(`userInfo accept data, payload:${JSON.stringify(payload)}`); + this.login = payload.login + ? payload.login + : 'NoAuth'; + this._changeDetectorRef.markForCheck(); + }, ); + } - get login() { - return this.authorizationService.isAuthenticated - ? this.authorizationService.getUserInfo().login - : 'NoAuth'; - } + public click() { - this.authorizationService.logout(); + this._authorizationService.logout(); } } From 4548ecc63a167670e71411953e7e0c4f63133c43 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 13:01:03 +0300 Subject: [PATCH 050/108] AMP/task4/fix: clean auth.serv. --- .../core/services/authorization.service.ts | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts index bfaba0f..a2e960e 100644 --- a/angular-starter/src/app/angular-intro/core/services/authorization.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/authorization.service.ts @@ -1,25 +1,19 @@ import { Injectable } from '@angular/core'; import { User } from '../entities'; import { Observable } from 'rxjs/Observable'; -import { Subject } from 'rxjs/Subject'; import { NgZone } from '@angular/core'; -import 'rxjs/add/operator/shareReplay'; -import 'rxjs/add/operator/publishReplay'; - import { BehaviorSubject } from 'rxjs/BehaviorSubject'; @Injectable() export class AuthorizationService { - // public source: Observable; public mySource: BehaviorSubject; // object = {login: 'myLogin'} private user: User = { id: 0, userName: 'NoName(serv)', }; - // private action: () => void; constructor(private _ngZone: NgZone) { console.log('### AuthorizationService constructor ###'); @@ -33,9 +27,6 @@ export class AuthorizationService { // ---------------------------------------------------------------- } - // get source() { - // return this.mySource.asObservable(); - // } public login(payload: any) {// how do it right?? // Login (stores fake user info and token to local storage) @@ -45,13 +36,11 @@ export class AuthorizationService { this.user.userName = payload.login; this.user.id = Math.trunc(1 + Math.random() * 10); - // this.action(); this.mySource.next({login: this.user.userName}); } public logout() { // Logout (wipes fake user info and token from local storage) this.user = {id: 0, userName: 'NoName', }; - // this.action(); this.mySource.next({login: ''}); } public isAuthenticated() { @@ -59,7 +48,6 @@ export class AuthorizationService { return !!this.user.id; } public getUserInfo() { - // return this.mySource.asObservable().shareReplay(1); return this.mySource.asObservable(); } From 86670f8a998627b5672f62e304aa45a2f6ecad85 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 15:55:51 +0300 Subject: [PATCH 051/108] AMP/task4/features: loader-block --- .../angular-intro.component.html | 1 + .../app/angular-intro/angular-intro.module.ts | 2 ++ .../core/services/course.services.ts | 12 ++++++- .../app/angular-intro/core/services/index.ts | 3 +- .../core/services/loader-block.service.ts | 26 ++++++++++++++ ...dow.service.ts => modal-window.service.ts} | 0 .../angular-intro/course/course.component.ts | 6 ++-- .../courses/courses.component.ts | 8 ++--- .../angular-intro/footer/footer.component.ts | 4 +-- .../angular-intro/header/header.component.ts | 2 +- .../app/angular-intro/loaderBlock/index.ts | 2 ++ .../loaderBlock/loaderBlock.component.css | 19 +++++++++++ .../loaderBlock/loaderBlock.component.html | 5 +++ .../loaderBlock/loaderBlock.component.ts | 34 +++++++++++++++++++ .../loaderBlock/loaderBlock.module.ts | 22 ++++++++++++ .../login-page/login-page.component.ts | 6 ++-- .../modalWindow/modalWindow.component.ts | 14 ++++---- .../userinfo/userinfo.component.ts | 2 +- angular-starter/src/app/app.module.ts | 17 +++++++--- 19 files changed, 157 insertions(+), 28 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/core/services/loader-block.service.ts rename angular-starter/src/app/angular-intro/core/services/{modalWindow.service.ts => modal-window.service.ts} (100%) create mode 100644 angular-starter/src/app/angular-intro/loaderBlock/index.ts create mode 100644 angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css create mode 100644 angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html create mode 100644 angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts create mode 100644 angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.module.ts diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index 7a4da98..c610c94 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -1,6 +1,7 @@
+ diff --git a/angular-starter/src/app/angular-intro/angular-intro.module.ts b/angular-starter/src/app/angular-intro/angular-intro.module.ts index 7d6964d..d7980c4 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.module.ts +++ b/angular-starter/src/app/angular-intro/angular-intro.module.ts @@ -8,6 +8,7 @@ import { CoursesModule } from './courses'; import { CourseModule } from './course'; import { ModalWindowModule } from './modalWindow'; import { LoginPageModule } from './login-page'; +import { LoaderBlockModule } from './loaderBlock'; import { IntroComponent } from './angular-intro.component'; @@ -31,6 +32,7 @@ console.log('`INTRO` bundle loaded asynchronously'); CourseModule, ModalWindowModule, LoginPageModule, + LoaderBlockModule, ], exports: [ diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index 656de0d..1c1ca3b 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -2,6 +2,8 @@ import { Injectable } from '@angular/core'; import { COURSES } from '../mocks'; import { Course } from '../entities'; +import { LoaderBlockServices } from '../services'; +import { delay } from 'q'; // i think that it is all (or part??) logic for work with enity // in this case entity = list of course @@ -9,7 +11,9 @@ import { Course } from '../entities'; @Injectable() export class CourseServices { private couresArr: Course[] = []; - constructor() { + constructor( + // private _loaderBlockServices: LoaderBlockServices + ) { console.log('### CourseServices constructor ###'); this.couresArr = [...COURSES]; } @@ -38,11 +42,17 @@ export class CourseServices { } public removeItem(id: number): void { console.log(`### CourseServices.removeItem id=${id}###`); + + // this._loaderBlockServices.Show(); + const currentID = this.couresArr.findIndex((item) => item.id === id); if (currentID >= 0) { this.couresArr.splice(currentID, 1); } else { console.log('### CourseServices.removeItem:ERROR: wrong ID###'); } + + // delay(10000); + // this._loaderBlockServices.Hide(); } } diff --git a/angular-starter/src/app/angular-intro/core/services/index.ts b/angular-starter/src/app/angular-intro/core/services/index.ts index b362839..7b4ce06 100644 --- a/angular-starter/src/app/angular-intro/core/services/index.ts +++ b/angular-starter/src/app/angular-intro/core/services/index.ts @@ -1,3 +1,4 @@ export * from './course.services'; -export * from './modalWindow.service'; +export * from './modal-window.service'; export * from './authorization.service'; +export * from './loader-block.service'; diff --git a/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts b/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts new file mode 100644 index 0000000..489975c --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs/Observable'; +import { BehaviorSubject } from 'rxjs/BehaviorSubject'; + +@Injectable() +export class LoaderBlockServices { + + public source: BehaviorSubject; + private show = false; + + constructor() { + console.log('### LoaderBlockServices constructor ###'); + this.source = new BehaviorSubject({show: false}); + } + + public Show() { + this.show = true; + this.source.next(this.show); + } + + public Hide() { + this.show = false; + this.source.next(this.show); + } + +} diff --git a/angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts b/angular-starter/src/app/angular-intro/core/services/modal-window.service.ts similarity index 100% rename from angular-starter/src/app/angular-intro/core/services/modalWindow.service.ts rename to angular-starter/src/app/angular-intro/core/services/modal-window.service.ts diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 89f85f8..8e99a93 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -10,7 +10,7 @@ import { NgForm } from '@angular/forms'; import { Course } from '../core'; import { MyDate } from '../core/entities/date'; // --------------- -import { ModalWindowServices } from '../core'; +import { ModalWindowServices } from '../core/services'; @Component({ selector: 'course', @@ -32,7 +32,7 @@ export class CourseComponent { @Output('handler') protected handler = new EventEmitter(); - constructor(private modalWindowService: ModalWindowServices) { + constructor(private _modalWindowService: ModalWindowServices) { console.log('course-constructor'); } @@ -40,7 +40,7 @@ export class CourseComponent { console.log(`del from child, id:${this.courseItem.id}`); // using modalWindow via modalWindowService - const listener = this.modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) + const listener = this._modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) .subscribe( // callback ... o_O (message: string) => { diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 82e1c50..af01f90 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; -import { CourseServices } from '../core'; +import { CourseServices } from '../core/services'; @Component({ selector: 'courses', @@ -12,13 +12,13 @@ export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; protected couresArr = []; - constructor(private courseServices: CourseServices) { + constructor(private _courseServices: CourseServices) { console.log('courses-constructor, Arr:'); console.log(this.couresArr); } public ngOnInit() { console.log('courses.component OnInit'); - this.couresArr = this.courseServices.getList(); + this.couresArr = this._courseServices.getList(); console.log(this.couresArr); } get count() { @@ -32,7 +32,7 @@ export class CoursesComponent implements OnInit { switch (emit.type) { case 'deletter': { console.log(`courses.deletter id=${emit.value}`); - this.courseServices.removeItem(emit.value); + this._courseServices.removeItem(emit.value); break; } } diff --git a/angular-starter/src/app/angular-intro/footer/footer.component.ts b/angular-starter/src/app/angular-intro/footer/footer.component.ts index acc9751..0298636 100644 --- a/angular-starter/src/app/angular-intro/footer/footer.component.ts +++ b/angular-starter/src/app/angular-intro/footer/footer.component.ts @@ -17,11 +17,11 @@ export class FooterComponent implements OnInit { public localState: any; constructor( - public route: ActivatedRoute + public _route: ActivatedRoute ) {} public ngOnInit() { - this.route + this._route .data .subscribe((data: any) => { /** diff --git a/angular-starter/src/app/angular-intro/header/header.component.ts b/angular-starter/src/app/angular-intro/header/header.component.ts index 87c33c5..58e2c4f 100644 --- a/angular-starter/src/app/angular-intro/header/header.component.ts +++ b/angular-starter/src/app/angular-intro/header/header.component.ts @@ -7,7 +7,7 @@ import { } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { AuthorizationService } from '../core'; +import { AuthorizationService } from '../core/services'; @Component({ selector: 'app-header', diff --git a/angular-starter/src/app/angular-intro/loaderBlock/index.ts b/angular-starter/src/app/angular-intro/loaderBlock/index.ts new file mode 100644 index 0000000..8674462 --- /dev/null +++ b/angular-starter/src/app/angular-intro/loaderBlock/index.ts @@ -0,0 +1,2 @@ +export * from './loaderBlock.component'; +export * from './loaderBlock.module'; diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css new file mode 100644 index 0000000..da4e86c --- /dev/null +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css @@ -0,0 +1,19 @@ +:host>div { + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background-color: rgba(0, 0, 0, 0.7); + display: flex; + justify-content: center; + align-items: center; +} + +:host>div .message { + padding: 15px; + border-radius: 15px; + position: relative; + background-color: rgba(255, 255, 255, 0.7); +} + diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html new file mode 100644 index 0000000..4410d93 --- /dev/null +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html @@ -0,0 +1,5 @@ +
+
+

{{data.message}}

+
+
diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts new file mode 100644 index 0000000..5022884 --- /dev/null +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts @@ -0,0 +1,34 @@ +import { + Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef, +} from '@angular/core'; + +import { LoaderBlockServices } from '../core/services'; +import { Observable } from 'rxjs/Observable'; + +@Component({ + selector: 'loaderBlock', + templateUrl: './loaderBlock.component.html', + styleUrls: ['./loaderBlock.component.css'], + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class LoaderBlockComponent implements OnInit { + private click: (answer: string) => void; + private visible: boolean; + private data = { + message: 'NoMessage', + answerArr: ['Yes', 'No'], + }; + constructor( + private _loaderBlockServices: LoaderBlockServices, + private _changeDetectorRef: ChangeDetectorRef, + ) { + console.log('LoaderBlockComponent constructor'); + } + + public ngOnInit() { + console.log('LoaderBlockComponent ngOnInit'); + this._loaderBlockServices.source.asObservable().subscribe(() => { + this._changeDetectorRef.markForCheck(); + }); + } +} diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.module.ts b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.module.ts new file mode 100644 index 0000000..85261cb --- /dev/null +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { LoaderBlockComponent } from './loaderBlock.component'; + +console.log('`LoaderBlock` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + LoaderBlockComponent, + ], + imports: [ + CommonModule, + ], + exports: [ + LoaderBlockComponent, + ], +}) +export class LoaderBlockModule {} diff --git a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts index 06fd5b5..ea3ce82 100644 --- a/angular-starter/src/app/angular-intro/login-page/login-page.component.ts +++ b/angular-starter/src/app/angular-intro/login-page/login-page.component.ts @@ -2,7 +2,7 @@ import { Component, ChangeDetectionStrategy, } from '@angular/core'; import { NgForm } from '@angular/forms'; -import { AuthorizationService } from '../core'; +import { AuthorizationService } from '../core/services'; @Component({ selector: 'login-page', @@ -14,7 +14,7 @@ import { AuthorizationService } from '../core'; export class LoginPageComponent { protected login: string; protected password: string; - constructor(private authorizationService: AuthorizationService) { + constructor(private _authorizationService: AuthorizationService) { console.log('login-page-constructor'); this.login = ''; this.password = ''; @@ -22,6 +22,6 @@ export class LoginPageComponent { public click() { // console.log(`name:${this.login}, pass:${this.password}`); - this.authorizationService.login({login: this.login, password: this.password}); + this._authorizationService.login({login: this.login, password: this.password}); } } diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts index d6217e3..c1b0048 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef, } from '@angular/core'; -import { ModalWindowServices } from '../core/services/modalWindow.service'; +import { ModalWindowServices } from '../core/services'; import { Observable } from 'rxjs/Observable'; @Component({ @@ -19,25 +19,25 @@ export class ModalWindowComponent implements OnInit { answerArr: ['Yes', 'No'], }; constructor( - private modalWindowServices: ModalWindowServices, - private changeDetectorRef: ChangeDetectorRef, + private _modalWindowServices: ModalWindowServices, + private _changeDetectorRef: ChangeDetectorRef, ) { console.log('ModalWindowComponent constructor'); } public ngOnInit() { console.log('ModalWindowComponent ngOnInit'); - this.modalWindowServices.listenMe( + this._modalWindowServices.listenMe( new Observable((observer) => { - this.data = this.modalWindowServices.data; + this.data = this._modalWindowServices.data; this.visible = true; - this.changeDetectorRef.markForCheck(); + this._changeDetectorRef.markForCheck(); // --------- REALLY????? this.click = (text) => { observer.next(text ? text : 'Close'); this.visible = false; - this.changeDetectorRef.markForCheck(); + this._changeDetectorRef.markForCheck(); observer.complete(); }; diff --git a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts index 3e9ec91..0019f75 100644 --- a/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts +++ b/angular-starter/src/app/angular-intro/userinfo/userinfo.component.ts @@ -4,7 +4,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, } from '@angular/core'; -import { AuthorizationService } from '../core'; +import { AuthorizationService } from '../core/services'; @Component({ selector: 'userinfo', diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 6430b0c..2ca1ac5 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -23,10 +23,13 @@ import { DevModuleModule } from './+dev-module'; // -------------------------------------------------------------------- import { IntroModule } from './angular-intro'; -// CourseServices, -// ModalWindowServices, -// AuthorizationService, -import * as INTRO_SERVICES from './angular-intro/core/services'; +import { + CourseServices, + ModalWindowServices, + AuthorizationService, + LoaderBlockServices, +} from './angular-intro/core/services'; +// import * as INTRO_SERVICES from './angular-intro/core/services'; function toArray(obj) { return Object.keys(obj).map((k) => obj[k]); @@ -42,7 +45,11 @@ const APP_PROVIDERS = [ AppState, // -------------------------------------------------------------------- - ...toArray(INTRO_SERVICES), + // ...toArray(INTRO_SERVICES), + ModalWindowServices, + AuthorizationService, + CourseServices, + LoaderBlockServices, // -------------------------------------------------------------------- ]; From 50b7be40209c68bd9b105d1123e9a4496408fd7b Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Mon, 2 Apr 2018 17:52:03 +0300 Subject: [PATCH 052/108] AMP/task4/features: loader --- .../core/services/course.services.ts | 4 +- .../core/services/loader-block.service.ts | 5 +-- .../core/services/modal-window.service.ts | 1 + .../angular-intro/course/course.component.ts | 6 ++- .../courses/courses.component.ts | 19 +++++++-- .../loaderBlock/loaderBlock.component.css | 41 +++++++++++++++++++ .../loaderBlock/loaderBlock.component.html | 2 +- .../loaderBlock/loaderBlock.component.ts | 11 ++--- angular-starter/src/app/app.module.ts | 2 +- 9 files changed, 71 insertions(+), 20 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/services/course.services.ts b/angular-starter/src/app/angular-intro/core/services/course.services.ts index 1c1ca3b..fce9550 100644 --- a/angular-starter/src/app/angular-intro/core/services/course.services.ts +++ b/angular-starter/src/app/angular-intro/core/services/course.services.ts @@ -3,7 +3,6 @@ import { Injectable } from '@angular/core'; import { COURSES } from '../mocks'; import { Course } from '../entities'; import { LoaderBlockServices } from '../services'; -import { delay } from 'q'; // i think that it is all (or part??) logic for work with enity // in this case entity = list of course @@ -52,7 +51,6 @@ export class CourseServices { console.log('### CourseServices.removeItem:ERROR: wrong ID###'); } - // delay(10000); - // this._loaderBlockServices.Hide(); + // settimeout(() =>this._loaderBlockServices.Hide(), 1000); } } diff --git a/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts b/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts index 489975c..95a93d6 100644 --- a/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/loader-block.service.ts @@ -1,5 +1,4 @@ import { Injectable } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; @Injectable() @@ -15,12 +14,12 @@ export class LoaderBlockServices { public Show() { this.show = true; - this.source.next(this.show); + this.source.next({show: this.show}); } public Hide() { this.show = false; - this.source.next(this.show); + this.source.next({show: this.show}); } } diff --git a/angular-starter/src/app/angular-intro/core/services/modal-window.service.ts b/angular-starter/src/app/angular-intro/core/services/modal-window.service.ts index 50844b7..3a116f6 100644 --- a/angular-starter/src/app/angular-intro/core/services/modal-window.service.ts +++ b/angular-starter/src/app/angular-intro/core/services/modal-window.service.ts @@ -10,6 +10,7 @@ export class ModalWindowServices { visible: false, }; private source: Observable; + // public source: BehaviorSubject; constructor() { console.log('### ModalWindowServices constructor ###'); diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 8e99a93..0f7cc73 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -32,7 +32,9 @@ export class CourseComponent { @Output('handler') protected handler = new EventEmitter(); - constructor(private _modalWindowService: ModalWindowServices) { + constructor( + private _modalWindowService: ModalWindowServices, + ) { console.log('course-constructor'); } @@ -40,7 +42,7 @@ export class CourseComponent { console.log(`del from child, id:${this.courseItem.id}`); // using modalWindow via modalWindowService - const listener = this._modalWindowService.show(`HEY! are you shure? id=${this.courseItem.id}`) + const listener = this._modalWindowService.show(`HEY! are you sure? id=${this.courseItem.id}`) .subscribe( // callback ... o_O (message: string) => { diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index af01f90..986dc14 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -1,6 +1,13 @@ -import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core'; +import { + Component, + OnInit, + ChangeDetectionStrategy +} from '@angular/core'; -import { CourseServices } from '../core/services'; +import { + CourseServices, + LoaderBlockServices, +} from '../core/services'; @Component({ selector: 'courses', @@ -12,7 +19,10 @@ export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; protected couresArr = []; - constructor(private _courseServices: CourseServices) { + constructor( + private _loaderBlockServices: LoaderBlockServices, + private _courseServices: CourseServices, + ) { console.log('courses-constructor, Arr:'); console.log(this.couresArr); } @@ -31,8 +41,11 @@ export class CoursesComponent implements OnInit { console.log(`courses.handler emit.type=${emit.type}`); switch (emit.type) { case 'deletter': { + this._loaderBlockServices.Show(); console.log(`courses.deletter id=${emit.value}`); this._courseServices.removeItem(emit.value); + // ...no service in service? + setTimeout( () => this._loaderBlockServices.Hide(), 3000); break; } } diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css index da4e86c..8a2c5fc 100644 --- a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.css @@ -17,3 +17,44 @@ background-color: rgba(255, 255, 255, 0.7); } +.loader, +.loader:after { + border-radius: 50%; + width: 10em; + height: 10em; +} +.loader { + /* margin: 60px auto; */ + font-size: 10px; + position: relative; + text-indent: -9999em; + border-top: 1.1em solid rgba(255, 255, 255, 0.2); + border-right: 1.1em solid rgba(255, 255, 255, 0.2); + border-bottom: 1.1em solid rgba(255, 255, 255, 0.2); + border-left: 1.1em solid #ffffff; + -webkit-transform: translateZ(0); + -ms-transform: translateZ(0); + transform: translateZ(0); + -webkit-animation: load8 1.1s infinite linear; + animation: load8 1.1s infinite linear; +} +@-webkit-keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@keyframes load8 { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html index 4410d93..8aa1126 100644 --- a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.html @@ -1,5 +1,5 @@
-

{{data.message}}

+
Loading...
diff --git a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts index 5022884..7bab2ba 100644 --- a/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts +++ b/angular-starter/src/app/angular-intro/loaderBlock/loaderBlock.component.ts @@ -12,12 +12,8 @@ import { Observable } from 'rxjs/Observable'; changeDetection: ChangeDetectionStrategy.OnPush }) export class LoaderBlockComponent implements OnInit { - private click: (answer: string) => void; - private visible: boolean; - private data = { - message: 'NoMessage', - answerArr: ['Yes', 'No'], - }; + private visible = false; + constructor( private _loaderBlockServices: LoaderBlockServices, private _changeDetectorRef: ChangeDetectorRef, @@ -27,7 +23,8 @@ export class LoaderBlockComponent implements OnInit { public ngOnInit() { console.log('LoaderBlockComponent ngOnInit'); - this._loaderBlockServices.source.asObservable().subscribe(() => { + this._loaderBlockServices.source.asObservable().subscribe((payload) => { + this.visible = payload.show; this._changeDetectorRef.markForCheck(); }); } diff --git a/angular-starter/src/app/app.module.ts b/angular-starter/src/app/app.module.ts index 2ca1ac5..691134b 100644 --- a/angular-starter/src/app/app.module.ts +++ b/angular-starter/src/app/app.module.ts @@ -48,8 +48,8 @@ const APP_PROVIDERS = [ // ...toArray(INTRO_SERVICES), ModalWindowServices, AuthorizationService, - CourseServices, LoaderBlockServices, + CourseServices, // -------------------------------------------------------------------- ]; From 3e7fa8207ed90b56bf54f417b19e61e409ff17d7 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 12:12:19 +0300 Subject: [PATCH 053/108] AMP/task5/features: colorLight in progress --- .../colorlight/colorlight.directive.ts | 18 +++++++++++++++ .../colorlight/colorlight.module.ts | 22 ++++++++++++++++++ .../src/app/angular-intro/colorlight/index.ts | 2 ++ .../angular-intro/course/course.component.css | 9 ++++++++ .../course/course.component.html | 23 ++++++++++++++++++- .../app/angular-intro/course/course.module.ts | 2 ++ .../courses/courses.component.css | 4 ++-- 7 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts create mode 100644 angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts create mode 100644 angular-starter/src/app/angular-intro/colorlight/index.ts diff --git a/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts b/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts new file mode 100644 index 0000000..d4382da --- /dev/null +++ b/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts @@ -0,0 +1,18 @@ +import { + Directive, + ElementRef, + Input, +} from '@angular/core'; + +@Directive({ + selector: '[appColorlight]', +}) +export class ColorlightDirective { + @Input() public payload: { + data: any, // current data, for compare + caseArr: [{data: any, color: string}], // case array + }; + constructor(private el: ElementRef) { + this.el.nativeElement.style.backgroundColor = 'yellow'; + } +} diff --git a/angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts b/angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts new file mode 100644 index 0000000..89e2f16 --- /dev/null +++ b/angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts @@ -0,0 +1,22 @@ +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; + +import { ColorlightDirective } from './colorlight.directive'; + +console.log('`ColorLight` bundle loaded asynchronously'); + +@NgModule({ + declarations: [ + /** + * Components / Directives/ Pipes + */ + ColorlightDirective, + ], + imports: [ + CommonModule, + ], + exports: [ + ColorlightDirective, + ], +}) +export class ColorlightModule {} diff --git a/angular-starter/src/app/angular-intro/colorlight/index.ts b/angular-starter/src/app/angular-intro/colorlight/index.ts new file mode 100644 index 0000000..438a661 --- /dev/null +++ b/angular-starter/src/app/angular-intro/colorlight/index.ts @@ -0,0 +1,2 @@ +export * from './colorlight.directive'; +export * from './colorlight.module'; diff --git a/angular-starter/src/app/angular-intro/course/course.component.css b/angular-starter/src/app/angular-intro/course/course.component.css index 12c9c5d..295010e 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.css +++ b/angular-starter/src/app/angular-intro/course/course.component.css @@ -2,6 +2,7 @@ p { color: #369; font-family: Arial, Helvetica, sans-serif; font-size: 250%; + margin: 5px 0px; } .tags { padding: 5px; @@ -17,3 +18,11 @@ p { display: flex; justify-content: space-around; } + +/* angular...why you do host 0x0 ? */ +:host>div { + border-radius: 15px; + border: 7px solid black; + padding: 15px; + margin: 5px 0px; +} diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 9583c9d..750d4b3 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -1,4 +1,25 @@ -
+ + + + + +

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

Date: {{courseItem.date}}

diff --git a/angular-starter/src/app/angular-intro/course/course.module.ts b/angular-starter/src/app/angular-intro/course/course.module.ts index 00d1888..9478007 100644 --- a/angular-starter/src/app/angular-intro/course/course.module.ts +++ b/angular-starter/src/app/angular-intro/course/course.module.ts @@ -2,6 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { CourseComponent } from './course.component'; +import { ColorlightModule } from '../colorlight'; console.log('`CoursE` bundle loaded asynchronously'); @@ -15,6 +16,7 @@ console.log('`CoursE` bundle loaded asynchronously'); imports: [ CommonModule, FormsModule, + ColorlightModule, ], exports: [ CourseComponent, diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css index b23cfaf..8e0580a 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.css +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -8,7 +8,7 @@ p { padding: 15px; } -:host /deep/ course:not(:last-child)>div{ +/* :host /deep/ course:not(:last-child)>div{ border-bottom: 3px solid rgb(41, 51, 189); margin-bottom: 7px; -} +} */ From 596803557e22bbd738d5f2b6c4c518d74a2a13a0 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 13:14:27 +0300 Subject: [PATCH 054/108] AMP/task5/features: stylelight directive --- .../colorlight/colorlight.directive.ts | 18 ---------- .../src/app/angular-intro/colorlight/index.ts | 2 -- .../app/angular-intro/core/entities/course.ts | 3 +- .../app/angular-intro/core/entities/index.ts | 1 + .../angular-intro/core/entities/styleRule.ts | 4 +++ .../angular-intro/core/mocks/mock-courses.ts | 20 +++++------ .../course/course.component.html | 18 +++------- .../angular-intro/course/course.component.ts | 6 ++-- .../app/angular-intro/course/course.module.ts | 4 +-- .../courses/courses.component.html | 2 +- .../src/app/angular-intro/stylelight/index.ts | 2 ++ .../stylelight/stylelight.directive.ts | 35 +++++++++++++++++++ .../stylelight.module.ts} | 10 +++--- 13 files changed, 69 insertions(+), 56 deletions(-) delete mode 100644 angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts delete mode 100644 angular-starter/src/app/angular-intro/colorlight/index.ts create mode 100644 angular-starter/src/app/angular-intro/core/entities/styleRule.ts create mode 100644 angular-starter/src/app/angular-intro/stylelight/index.ts create mode 100644 angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts rename angular-starter/src/app/angular-intro/{colorlight/colorlight.module.ts => stylelight/stylelight.module.ts} (54%) diff --git a/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts b/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts deleted file mode 100644 index d4382da..0000000 --- a/angular-starter/src/app/angular-intro/colorlight/colorlight.directive.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { - Directive, - ElementRef, - Input, -} from '@angular/core'; - -@Directive({ - selector: '[appColorlight]', -}) -export class ColorlightDirective { - @Input() public payload: { - data: any, // current data, for compare - caseArr: [{data: any, color: string}], // case array - }; - constructor(private el: ElementRef) { - this.el.nativeElement.style.backgroundColor = 'yellow'; - } -} diff --git a/angular-starter/src/app/angular-intro/colorlight/index.ts b/angular-starter/src/app/angular-intro/colorlight/index.ts deleted file mode 100644 index 438a661..0000000 --- a/angular-starter/src/app/angular-intro/colorlight/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './colorlight.directive'; -export * from './colorlight.module'; diff --git a/angular-starter/src/app/angular-intro/core/entities/course.ts b/angular-starter/src/app/angular-intro/core/entities/course.ts index 5391ff6..dc58ff7 100644 --- a/angular-starter/src/app/angular-intro/core/entities/course.ts +++ b/angular-starter/src/app/angular-intro/core/entities/course.ts @@ -1,10 +1,9 @@ import { MyTime } from './time'; -import { MyDate } from './date'; export class Course { public id: number; public name: string; public duration: MyTime; - public date: MyDate; + public date: Date; public tags: string[]; public isAccept: boolean; public text: string; diff --git a/angular-starter/src/app/angular-intro/core/entities/index.ts b/angular-starter/src/app/angular-intro/core/entities/index.ts index 5f215f3..67dcfd5 100644 --- a/angular-starter/src/app/angular-intro/core/entities/index.ts +++ b/angular-starter/src/app/angular-intro/core/entities/index.ts @@ -1,3 +1,4 @@ export * from './course'; export * from './time'; export * from './user'; +export * from './styleRule'; diff --git a/angular-starter/src/app/angular-intro/core/entities/styleRule.ts b/angular-starter/src/app/angular-intro/core/entities/styleRule.ts new file mode 100644 index 0000000..bef9868 --- /dev/null +++ b/angular-starter/src/app/angular-intro/core/entities/styleRule.ts @@ -0,0 +1,4 @@ +export class StyleRule { + public rule: string; + public value: string; // StyleRule +} diff --git a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts index e946efc..02b4b4c 100644 --- a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts @@ -9,7 +9,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: true, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2020, 10, 25), }, { id: 12, @@ -18,7 +18,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2018, 10, 25), }, { id: 13, @@ -27,7 +27,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1'], isAccept: true, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2017, 10, 25), }, { id: 14, @@ -36,7 +36,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2018, 4, 3), }, { id: 15, @@ -45,7 +45,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(1999, 10, 25), }, { id: 16, @@ -54,7 +54,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2018, 4, 2), }, { id: 17, @@ -63,7 +63,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(2018, 4, 4), }, { id: 18, @@ -72,7 +72,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(1999, 10, 25), }, { id: 19, @@ -81,7 +81,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3'], isAccept: false, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(1999, 10, 25), }, { id: 20, @@ -90,6 +90,6 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: true, text: 'Just course description, or any other text.', - date: new MyDate(0, '###', 9999), + date: new Date(1999, 10, 25), }, ]; diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 750d4b3..879b3c1 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -1,22 +1,14 @@ - + + - -
diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 0f7cc73..65e332a 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -7,8 +7,7 @@ import { } from '@angular/core'; import { NgForm } from '@angular/forms'; // --------------- -import { Course } from '../core'; -import { MyDate } from '../core/entities/date'; +import { Course } from '../core/entities'; // --------------- import { ModalWindowServices } from '../core/services'; @@ -20,14 +19,15 @@ import { ModalWindowServices } from '../core/services'; }) export class CourseComponent { + public currentDate = Date.now(); @Input() protected courseItem: Course = { id: 0, name: 'NoName', duration: { hours: -1, minuts: -1, seconds: -1 }, + date: new Date(), tags: ['error'], isAccept: false, text: 'error: it is an empty text', - date: new MyDate (-1, '$$$', 1111), }; @Output('handler') protected handler = new EventEmitter(); diff --git a/angular-starter/src/app/angular-intro/course/course.module.ts b/angular-starter/src/app/angular-intro/course/course.module.ts index 9478007..c2a5acc 100644 --- a/angular-starter/src/app/angular-intro/course/course.module.ts +++ b/angular-starter/src/app/angular-intro/course/course.module.ts @@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { CourseComponent } from './course.component'; -import { ColorlightModule } from '../colorlight'; +import { StylelightModule } from '../stylelight'; console.log('`CoursE` bundle loaded asynchronously'); @@ -16,7 +16,7 @@ console.log('`CoursE` bundle loaded asynchronously'); imports: [ CommonModule, FormsModule, - ColorlightModule, + StylelightModule ], exports: [ CourseComponent, diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index dbedc1b..bd00e79 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -2,7 +2,7 @@

Accepted count: {{count}}


- null + item.data <= this.payload.data); + if (current) { + // renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); + current.setStyle.forEach( (item) => { + this._renderer.setElementStyle(this._el.nativeElement, item.rule, item.value); + }); + } + } +} diff --git a/angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts b/angular-starter/src/app/angular-intro/stylelight/stylelight.module.ts similarity index 54% rename from angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts rename to angular-starter/src/app/angular-intro/stylelight/stylelight.module.ts index 89e2f16..add26ae 100644 --- a/angular-starter/src/app/angular-intro/colorlight/colorlight.module.ts +++ b/angular-starter/src/app/angular-intro/stylelight/stylelight.module.ts @@ -1,22 +1,22 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; -import { ColorlightDirective } from './colorlight.directive'; +import { StylelightDirective } from './stylelight.directive'; -console.log('`ColorLight` bundle loaded asynchronously'); +console.log('`StyleLight` bundle loaded asynchronously'); @NgModule({ declarations: [ /** * Components / Directives/ Pipes */ - ColorlightDirective, + StylelightDirective, ], imports: [ CommonModule, ], exports: [ - ColorlightDirective, + StylelightDirective, ], }) -export class ColorlightModule {} +export class StylelightModule {} From 05e945886ec00ccd23fddc129448e15645014969 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 13:41:45 +0300 Subject: [PATCH 055/108] AMP/task5/fix: stylelight as generic --- .../app/angular-intro/stylelight/stylelight.directive.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts b/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts index 99fe67a..b2e6fa4 100644 --- a/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts +++ b/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts @@ -11,10 +11,10 @@ import { StyleRule } from '../core/entities'; @Directive({ selector: '[appStylelight]', }) -export class StylelightDirective implements OnInit { +export class StylelightDirective implements OnInit { @Input() public payload: { - data: any, // current data, for compare - caseArr: [{data: any, setStyle: StyleRule[]}], // case array + data: T, // current data, for compare + caseArr: [{data: T, setStyle: StyleRule[]}], // case array }; constructor( private _el: ElementRef, From 9bc7d7cc8e0aa7c2c6f3a4e47b3a2f571f287a4d Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 15:05:49 +0300 Subject: [PATCH 056/108] AMP/task5/fix: date --- .../app/angular-intro/core/entities/course.ts | 2 +- .../angular-intro/core/mocks/mock-courses.ts | 20 +++++++++---------- .../course/course.component.html | 5 +++-- .../angular-intro/course/course.component.ts | 3 ++- .../courses/courses.component.html | 2 +- .../stylelight/stylelight.directive.ts | 5 +++-- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/angular-starter/src/app/angular-intro/core/entities/course.ts b/angular-starter/src/app/angular-intro/core/entities/course.ts index dc58ff7..eebc0d2 100644 --- a/angular-starter/src/app/angular-intro/core/entities/course.ts +++ b/angular-starter/src/app/angular-intro/core/entities/course.ts @@ -3,7 +3,7 @@ export class Course { public id: number; public name: string; public duration: MyTime; - public date: Date; + public date: number; public tags: string[]; public isAccept: boolean; public text: string; diff --git a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts index 02b4b4c..bda904b 100644 --- a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts @@ -9,7 +9,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: true, text: 'Just course description, or any other text.', - date: new Date(2020, 10, 25), + date: +new Date(2020, 10, 25), }, { id: 12, @@ -18,7 +18,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(2018, 10, 25), + date: +new Date(2018, 10, 25), }, { id: 13, @@ -27,7 +27,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1'], isAccept: true, text: 'Just course description, or any other text.', - date: new Date(2017, 10, 25), + date: +new Date(2017, 10, 25), }, { id: 14, @@ -36,7 +36,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4', 'tag5'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(2018, 4, 3), + date: +new Date(2018, 3, 3), }, { id: 15, @@ -45,7 +45,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(1999, 10, 25), + date: +new Date(1999, 10, 25), }, { id: 16, @@ -54,7 +54,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(2018, 4, 2), + date: +new Date(2018, 3, 2), }, { id: 17, @@ -63,7 +63,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(2018, 4, 4), + date: +new Date(2018, 3, 4), }, { id: 18, @@ -72,7 +72,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(1999, 10, 25), + date: Date.now(), }, { id: 19, @@ -81,7 +81,7 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3'], isAccept: false, text: 'Just course description, or any other text.', - date: new Date(1999, 10, 25), + date: +new Date(1999, 10, 25), }, { id: 20, @@ -90,6 +90,6 @@ export const COURSES: Course[] = [ tags: ['mock-course', 'tag1', 'tag2', 'tag3', 'tag4'], isAccept: true, text: 'Just course description, or any other text.', - date: new Date(1999, 10, 25), + date: +new Date(1999, 10, 25), }, ]; diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 879b3c1..95bed50 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -2,13 +2,14 @@ +
diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 65e332a..4f0314f 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -20,11 +20,12 @@ import { ModalWindowServices } from '../core/services'; export class CourseComponent { public currentDate = Date.now(); + public infinityDate = Infinity; @Input() protected courseItem: Course = { id: 0, name: 'NoName', duration: { hours: -1, minuts: -1, seconds: -1 }, - date: new Date(), + date: +new Date(0, 0), tags: ['error'], isAccept: false, text: 'error: it is an empty text', diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index bd00e79..dbedc1b 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -2,7 +2,7 @@

Accepted count: {{count}}


- + null implements OnInit { @Input() public payload: { data: T, // current data, for compare - caseArr: [{data: T, setStyle: StyleRule[]}], // case array + caseArr: [{data: {start: T, end: T}, setStyle: StyleRule[]}], // case array }; constructor( private _el: ElementRef, @@ -24,7 +24,8 @@ export class StylelightDirective implements OnInit { public ngOnInit() { // this.el.nativeElement.style.backgroundColor = 'yellow'; const current = this.payload.caseArr - .find((item) => item.data <= this.payload.data); + .find((item) => (this.payload.data >= item.data.start) + && ( this.payload.data < item.data.end)); if (current) { // renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); current.setStyle.forEach( (item) => { From ea1611095586e1fabd1490903d4457c078a83a5c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 15:34:24 +0300 Subject: [PATCH 057/108] AMP/task5/features: 2)add no data message using ngIf --- .../angular-intro/courses/courses.component.css | 16 +++++++++++++++- .../angular-intro/courses/courses.component.html | 15 +++++++++++---- .../angular-intro/courses/courses.component.ts | 11 ++++++----- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.css b/angular-starter/src/app/angular-intro/courses/courses.component.css index 8e0580a..2bca4f8 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.css +++ b/angular-starter/src/app/angular-intro/courses/courses.component.css @@ -1,5 +1,5 @@ p { - color: #369; + /* color: #369; */ font-family: Arial, Helvetica, sans-serif; font-size: 250%; } @@ -12,3 +12,17 @@ p { border-bottom: 3px solid rgb(41, 51, 189); margin-bottom: 7px; } */ + +.message { + background-color: dimgray; + /* copy course.component.css */ + border-radius: 15px; + border: 7px solid black; + padding: 15px; + margin: 5px 0px; + text-align: center; +} +.message>p { + font-size: 250%; + margin: 5px 0px; +} diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.html b/angular-starter/src/app/angular-intro/courses/courses.component.html index dbedc1b..d633eb5 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.html +++ b/angular-starter/src/app/angular-intro/courses/courses.component.html @@ -3,8 +3,15 @@

Accepted count: {{count}}


null - +
+ +
+
+
+

Sorry, no Course in array

+
+
diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 986dc14..43037ae 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -17,23 +17,24 @@ import { }) export class CoursesComponent implements OnInit { protected text = 'Courses TEXT'; - protected couresArr = []; + protected coursesArr = []; constructor( private _loaderBlockServices: LoaderBlockServices, private _courseServices: CourseServices, ) { console.log('courses-constructor, Arr:'); - console.log(this.couresArr); + console.log(this.coursesArr); } public ngOnInit() { console.log('courses.component OnInit'); - this.couresArr = this._courseServices.getList(); - console.log(this.couresArr); + // this.coursesArr = this._courseServices.getList(); + this.coursesArr = []; + console.log(this.coursesArr); } get count() { console.log('recalculate count'); - return this.couresArr + return this.coursesArr .reduce((prev, item) => item.isAccept ? prev + 1 : prev, 0); } From 5bb3e805865a8fd1358576c5a8ca7f6005ec2e7d Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 15:55:36 +0300 Subject: [PATCH 058/108] AMP/task5/features: 3) topRated-star --- .../src/app/angular-intro/angular-intro.component.html | 1 + .../src/app/angular-intro/core/entities/course.ts | 1 + .../src/app/angular-intro/core/mocks/mock-courses.ts | 10 ++++++++++ .../src/app/angular-intro/course/course.component.css | 4 ++++ .../src/app/angular-intro/course/course.component.html | 2 +- .../src/app/angular-intro/course/course.component.ts | 1 + .../src/app/angular-intro/courses/courses.component.ts | 4 ++-- .../modalWindow/modalWindow.component.html | 2 -- 8 files changed, 20 insertions(+), 5 deletions(-) diff --git a/angular-starter/src/app/angular-intro/angular-intro.component.html b/angular-starter/src/app/angular-intro/angular-intro.component.html index c610c94..448bba1 100644 --- a/angular-starter/src/app/angular-intro/angular-intro.component.html +++ b/angular-starter/src/app/angular-intro/angular-intro.component.html @@ -1,4 +1,5 @@
+ diff --git a/angular-starter/src/app/angular-intro/core/entities/course.ts b/angular-starter/src/app/angular-intro/core/entities/course.ts index eebc0d2..6daf739 100644 --- a/angular-starter/src/app/angular-intro/core/entities/course.ts +++ b/angular-starter/src/app/angular-intro/core/entities/course.ts @@ -7,4 +7,5 @@ export class Course { public tags: string[]; public isAccept: boolean; public text: string; + public topRated: boolean; } diff --git a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts index bda904b..8ebaaca 100644 --- a/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts +++ b/angular-starter/src/app/angular-intro/core/mocks/mock-courses.ts @@ -10,6 +10,7 @@ export const COURSES: Course[] = [ isAccept: true, text: 'Just course description, or any other text.', date: +new Date(2020, 10, 25), + topRated: true, }, { id: 12, @@ -19,6 +20,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(2018, 10, 25), + topRated: false, }, { id: 13, @@ -28,6 +30,7 @@ export const COURSES: Course[] = [ isAccept: true, text: 'Just course description, or any other text.', date: +new Date(2017, 10, 25), + topRated: false, }, { id: 14, @@ -37,6 +40,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(2018, 3, 3), + topRated: true, }, { id: 15, @@ -46,6 +50,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(1999, 10, 25), + topRated: false, }, { id: 16, @@ -55,6 +60,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(2018, 3, 2), + topRated: true, }, { id: 17, @@ -64,6 +70,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(2018, 3, 4), + topRated: false, }, { id: 18, @@ -73,6 +80,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: Date.now(), + topRated: false, }, { id: 19, @@ -82,6 +90,7 @@ export const COURSES: Course[] = [ isAccept: false, text: 'Just course description, or any other text.', date: +new Date(1999, 10, 25), + topRated: false, }, { id: 20, @@ -91,5 +100,6 @@ export const COURSES: Course[] = [ isAccept: true, text: 'Just course description, or any other text.', date: +new Date(1999, 10, 25), + topRated: false, }, ]; diff --git a/angular-starter/src/app/angular-intro/course/course.component.css b/angular-starter/src/app/angular-intro/course/course.component.css index 295010e..414c006 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.css +++ b/angular-starter/src/app/angular-intro/course/course.component.css @@ -4,6 +4,10 @@ p { font-size: 250%; margin: 5px 0px; } +i { + color: gold; + font-size: 100%; +} .tags { padding: 5px; display: flex; diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 95bed50..cf284bb 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -13,7 +13,7 @@ ] }" > -

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

+

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

Date: {{courseItem.date}}

diff --git a/angular-starter/src/app/angular-intro/course/course.component.ts b/angular-starter/src/app/angular-intro/course/course.component.ts index 4f0314f..1fdb9fa 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.ts +++ b/angular-starter/src/app/angular-intro/course/course.component.ts @@ -29,6 +29,7 @@ export class CourseComponent { tags: ['error'], isAccept: false, text: 'error: it is an empty text', + topRated: false, }; @Output('handler') protected handler = new EventEmitter(); diff --git a/angular-starter/src/app/angular-intro/courses/courses.component.ts b/angular-starter/src/app/angular-intro/courses/courses.component.ts index 43037ae..8eebdfe 100644 --- a/angular-starter/src/app/angular-intro/courses/courses.component.ts +++ b/angular-starter/src/app/angular-intro/courses/courses.component.ts @@ -28,8 +28,8 @@ export class CoursesComponent implements OnInit { } public ngOnInit() { console.log('courses.component OnInit'); - // this.coursesArr = this._courseServices.getList(); - this.coursesArr = []; + this.coursesArr = this._courseServices.getList(); + // this.coursesArr = []; console.log(this.coursesArr); } get count() { diff --git a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html index 78f491b..398ec9b 100644 --- a/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html +++ b/angular-starter/src/app/angular-intro/modalWindow/modalWindow.component.html @@ -1,5 +1,3 @@ - -

{{data.message}}

From 9da5654bc058cee1d0a04ec53cf321eea96a432a Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Tue, 3 Apr 2018 16:03:34 +0300 Subject: [PATCH 059/108] AMP/task5/features: 3) ngClass --- .../app/angular-intro/course/course.component.css | 13 +++++++++---- .../app/angular-intro/course/course.component.html | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.css b/angular-starter/src/app/angular-intro/course/course.component.css index 414c006..40f68f8 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.css +++ b/angular-starter/src/app/angular-intro/course/course.component.css @@ -4,10 +4,6 @@ p { font-size: 250%; margin: 5px 0px; } -i { - color: gold; - font-size: 100%; -} .tags { padding: 5px; display: flex; @@ -30,3 +26,12 @@ i { padding: 15px; margin: 5px 0px; } + +/* star */ +i { + color: rgb(204, 201, 14); + font-size: 100%; +} +.topRate { + background-color: rgb(255, 253, 120); +} diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index cf284bb..1f2886d 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -12,6 +12,7 @@ {data: {start: currentDate, end: infinityDate}, setStyle: [{rule: 'border-color', value: 'blue'}]} ] }" + [ngClass]="{'topRate': courseItem.topRated}" >

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

Date: {{courseItem.date}}

From 53d455fdf36265c7ee7514d20cd8e2ff69a9987c Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 4 Apr 2018 10:50:15 +0300 Subject: [PATCH 060/108] AMP/task5/features: same directive for tag-style --- .../angular-intro/course/course.component.html | 17 ++++++++++++++++- .../stylelight/stylelight.directive.ts | 11 +++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 1f2886d..5b68771 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -24,7 +24,22 @@

- {{tag}}

diff --git a/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts b/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts index eec86d5..dcdc9e5 100644 --- a/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts +++ b/angular-starter/src/app/angular-intro/stylelight/stylelight.directive.ts @@ -13,8 +13,8 @@ import { StyleRule } from '../core/entities'; }) export class StylelightDirective implements OnInit { @Input() public payload: { - data: T, // current data, for compare - caseArr: [{data: {start: T, end: T}, setStyle: StyleRule[]}], // case array + data: T, // current data, for compare, [start, end) + caseArr: [{data: T & {start: T, end: T}, setStyle: StyleRule[]}], // case array }; constructor( private _el: ElementRef, @@ -24,8 +24,11 @@ export class StylelightDirective implements OnInit { public ngOnInit() { // this.el.nativeElement.style.backgroundColor = 'yellow'; const current = this.payload.caseArr - .find((item) => (this.payload.data >= item.data.start) - && ( this.payload.data < item.data.end)); + .find((item) => typeof item.data === typeof this.payload.data + ? this.payload.data === item.data + : ((this.payload.data >= item.data.start) + && ( this.payload.data < item.data.end)) + ); if (current) { // renderer.setElementStyle(el.nativeElement, 'backgroundColor', 'yellow'); current.setStyle.forEach( (item) => { From c99d5edbb4d824a1ab4542f3cf25cf80f99aaa30 Mon Sep 17 00:00:00 2001 From: ArlinskiEV Date: Wed, 4 Apr 2018 10:59:47 +0300 Subject: [PATCH 061/108] AMP/task5/features: pipes 1)uppercase for name --- .../src/app/angular-intro/course/course.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/angular-starter/src/app/angular-intro/course/course.component.html b/angular-starter/src/app/angular-intro/course/course.component.html index 5b68771..081fa47 100644 --- a/angular-starter/src/app/angular-intro/course/course.component.html +++ b/angular-starter/src/app/angular-intro/course/course.component.html @@ -14,8 +14,8 @@ }" [ngClass]="{'topRate': courseItem.topRated}" > -

{{courseItem.name}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

-

Date: {{courseItem.date}}

+

{{courseItem.name | uppercase}} | ID: {{courseItem.id}} | Duration: {{courseItem.duration.hours}}h {{courseItem.duration.minuts}}m {{courseItem.duration.seconds}}s

+

Date: {{courseItem.date | date:"MM/dd/yy"}}