From 77f20ca285c39f57a4c4b46ff30d5da1a191f0d6 Mon Sep 17 00:00:00 2001 From: Christopher Cortes Date: Wed, 30 Oct 2019 15:31:27 +0100 Subject: [PATCH 1/3] feat(all): add support for Angular 8 ISSUES CLOSED: #31 --- package.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1c88801..ce70be5 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "keywords": [ "angular6", "angular7", + "angular8", "reactive forms", "typescript" ], @@ -76,9 +77,9 @@ "zone.js": "~0.9.0" }, "peerDependencies": { - "@angular/common": "6.x || 7.x", - "@angular/core": "6.x || 7.x", - "@angular/forms": "6.x || 7.x", + "@angular/common": "6.x || 7.x || 8.x", + "@angular/core": "6.x || 7.x || 8.x", + "@angular/forms": "6.x || 7.x || 8.x", "rxjs": "6.x" }, "scripts": { From 9608d0ffc66df2d9e83456e8f3f2543463264c74 Mon Sep 17 00:00:00 2001 From: Christopher Cortes Date: Wed, 30 Oct 2019 15:52:38 +0100 Subject: [PATCH 2/3] chore(demo): add Angular 8 demo in demo-app/ng8 folder. Move current Angular 7 demo to demo-app/ng7 --- .travis.yml | 7 +- RELEASE.md | 2 +- demo-app/{ => ng7}/.editorconfig | 0 demo-app/{ => ng7}/.gitignore | 0 demo-app/{ => ng7}/.npmrc | 0 demo-app/{ => ng7}/README.md | 0 demo-app/{ => ng7}/angular.json | 0 demo-app/{ => ng7}/e2e/protractor.conf.js | 0 demo-app/{ => ng7}/e2e/src/app.e2e-spec.ts | 0 demo-app/{ => ng7}/e2e/src/app.po.ts | 2 +- demo-app/{ => ng7}/e2e/tsconfig.e2e.json | 0 demo-app/{ => ng7}/package-lock.json | 8 +- demo-app/{ => ng7}/package.json | 2 +- .../{ => ng7}/src/app/app-routing.module.ts | 0 demo-app/{ => ng7}/src/app/app.component.html | 0 demo-app/{ => ng7}/src/app/app.component.scss | 0 .../{ => ng7}/src/app/app.component.spec.ts | 6 +- demo-app/{ => ng7}/src/app/app.component.ts | 0 demo-app/{ => ng7}/src/app/app.module.ts | 0 .../app/components/card/card.component.html | 0 .../app/components/card/card.component.scss | 0 .../src/app/components/card/card.component.ts | 0 .../src/app/components/card/card.theme.scss | 0 .../src/app/components/card/index.ts | 0 .../{ => ng7}/src/app/components/index.ts | 0 .../app/components/language-selector/index.ts | 0 .../language-selector.component.html | 0 .../language-selector.component.scss | 0 .../language-selector.component.ts | 0 .../language-selector.theme.scss | 0 .../src/app/components/navigation/index.ts | 0 .../navigation/navigation.component.html | 0 .../navigation/navigation.component.scss | 0 .../navigation/navigation.component.ts | 0 .../navigation/navigation.theme.scss | 0 .../app/components/simple-form-error/index.ts | 0 .../simple-form-error.component.html | 0 .../simple-form-error.component.ts | 0 .../components/translated-form-error/index.ts | 0 .../translated-form-error.component.html | 0 .../translated-form-error.component.ts | 0 demo-app/{ => ng7}/src/app/pages/index.ts | 0 .../src/app/pages/ngx-forms-example/index.ts | 0 .../ngx-forms-example.component.html | 0 .../ngx-forms-example.component.scss | 0 .../ngx-forms-example.component.ts | 0 .../app/pages/reactive-forms-example/index.ts | 0 .../reactive-forms-example.component.html | 0 .../reactive-forms-example.component.scss | 0 .../reactive-forms-example.component.ts | 0 .../template-driven-forms-example/index.ts | 0 ...mplate-driven-forms-example.component.html | 0 ...mplate-driven-forms-example.component.scss | 0 ...template-driven-forms-example.component.ts | 0 .../src/app/parent-error-state-matcher.ts | 0 .../{ => ng7}/src/app/password-validator.ts | 0 .../{ => ng7}/src/app/translation.config.ts | 0 .../{ => ng7}/src/assets/img/github-icon.svg | 0 .../{ => ng7}/src/assets/translations/en.json | 0 .../{ => ng7}/src/assets/translations/fr.json | 0 .../{ => ng7}/src/assets/translations/nl.json | 0 demo-app/{ => ng7}/src/browserslist | 0 .../src/environments/environment.prod.ts | 1 - .../{ => ng7}/src/environments/environment.ts | 1 - demo-app/{ => ng7}/src/favicon.ico | Bin demo-app/{ => ng7}/src/index.html | 1 - demo-app/{ => ng7}/src/karma.conf.js | 0 demo-app/{ => ng7}/src/main.ts | 0 demo-app/{ => ng7}/src/polyfills.ts | 2 - demo-app/{ => ng7}/src/styles/_app.theme.scss | 0 demo-app/{ => ng7}/src/styles/_variables.scss | 0 demo-app/{ => ng7}/src/styles/styles.scss | 0 demo-app/{ => ng7}/src/test.ts | 0 demo-app/{ => ng7}/src/tsconfig.app.json | 0 demo-app/{ => ng7}/src/tsconfig.spec.json | 0 demo-app/{ => ng7}/src/tslint.json | 0 demo-app/{ => ng7}/tsconfig.json | 2 +- demo-app/{ => ng7}/tslint.json | 2 +- demo-app/ng8/.editorconfig | 13 + demo-app/ng8/.gitignore | 46 + demo-app/ng8/.npmrc | 1 + demo-app/ng8/README.md | 27 + demo-app/ng8/angular.json | 121 + demo-app/ng8/browserslist | 12 + demo-app/ng8/e2e/protractor.conf.js | 30 + demo-app/ng8/e2e/src/app.e2e-spec.ts | 28 + demo-app/ng8/e2e/src/app.po.ts | 11 + demo-app/ng8/e2e/tsconfig.json | 9 + demo-app/ng8/karma.conf.js | 32 + demo-app/ng8/package-lock.json | 13371 ++++++++++++++++ demo-app/ng8/package.json | 58 + demo-app/ng8/src/app/app-routing.module.ts | 16 + demo-app/ng8/src/app/app.component.html | 21 + demo-app/ng8/src/app/app.component.scss | 25 + demo-app/ng8/src/app/app.component.spec.ts | 79 + demo-app/ng8/src/app/app.component.ts | 41 + demo-app/ng8/src/app/app.module.ts | 95 + .../app/components/card/card.component.html | 3 + .../app/components/card/card.component.scss | 5 + .../src/app/components/card/card.component.ts | 46 + .../src/app/components/card/card.theme.scss | 27 + demo-app/ng8/src/app/components/card/index.ts | 1 + demo-app/ng8/src/app/components/index.ts | 5 + .../app/components/language-selector/index.ts | 1 + .../language-selector.component.html | 12 + .../language-selector.component.scss | 9 + .../language-selector.component.ts | 80 + .../language-selector.theme.scss | 20 + .../src/app/components/navigation/index.ts | 1 + .../navigation/navigation.component.html | 5 + .../navigation/navigation.component.scss | 7 + .../navigation/navigation.component.ts | 17 + .../navigation/navigation.theme.scss | 19 + .../app/components/simple-form-error/index.ts | 1 + .../simple-form-error.component.html | 1 + .../simple-form-error.component.ts | 29 + .../components/translated-form-error/index.ts | 1 + .../translated-form-error.component.html | 1 + .../translated-form-error.component.ts | 51 + demo-app/ng8/src/app/pages/index.ts | 3 + .../src/app/pages/ngx-forms-example/index.ts | 1 + .../ngx-forms-example.component.html | 145 + .../ngx-forms-example.component.scss | 75 + .../ngx-forms-example.component.ts | 60 + .../app/pages/reactive-forms-example/index.ts | 1 + .../reactive-forms-example.component.html | 205 + .../reactive-forms-example.component.scss | 75 + .../reactive-forms-example.component.ts | 92 + .../template-driven-forms-example/index.ts | 1 + ...mplate-driven-forms-example.component.html | 173 + ...mplate-driven-forms-example.component.scss | 75 + ...template-driven-forms-example.component.ts | 70 + .../ng8/src/app/parent-error-state-matcher.ts | 12 + demo-app/ng8/src/app/password-validator.ts | 32 + demo-app/ng8/src/app/translation.config.ts | 15 + demo-app/ng8/src/assets/img/github-icon.svg | 4 + demo-app/ng8/src/assets/translations/en.json | 47 + demo-app/ng8/src/assets/translations/fr.json | 47 + demo-app/ng8/src/assets/translations/nl.json | 47 + .../ng8/src/environments/environment.prod.ts | 3 + demo-app/ng8/src/environments/environment.ts | 16 + demo-app/ng8/src/favicon.ico | Bin 0 -> 948 bytes demo-app/ng8/src/index.html | 13 + demo-app/ng8/src/main.ts | 13 + demo-app/ng8/src/polyfills.ts | 72 + demo-app/ng8/src/styles/_app.theme.scss | 125 + demo-app/ng8/src/styles/_variables.scss | 3 + demo-app/ng8/src/styles/styles.scss | 15 + demo-app/ng8/src/test.ts | 15 + demo-app/ng8/tsconfig.app.json | 13 + demo-app/ng8/tsconfig.json | 21 + demo-app/ng8/tsconfig.spec.json | 9 + demo-app/ng8/tslint.json | 71 + .../src/polyfills/css-grid-layout-polyfill.js | 7139 --------- package.json | 42 +- release-publish.sh | 4 +- 156 files changed, 15991 insertions(+), 7177 deletions(-) rename demo-app/{ => ng7}/.editorconfig (100%) rename demo-app/{ => ng7}/.gitignore (100%) rename demo-app/{ => ng7}/.npmrc (100%) rename demo-app/{ => ng7}/README.md (100%) rename demo-app/{ => ng7}/angular.json (100%) rename demo-app/{ => ng7}/e2e/protractor.conf.js (100%) rename demo-app/{ => ng7}/e2e/src/app.e2e-spec.ts (100%) rename demo-app/{ => ng7}/e2e/src/app.po.ts (84%) rename demo-app/{ => ng7}/e2e/tsconfig.e2e.json (100%) rename demo-app/{ => ng7}/package-lock.json (99%) rename demo-app/{ => ng7}/package.json (96%) rename demo-app/{ => ng7}/src/app/app-routing.module.ts (100%) rename demo-app/{ => ng7}/src/app/app.component.html (100%) rename demo-app/{ => ng7}/src/app/app.component.scss (100%) rename demo-app/{ => ng7}/src/app/app.component.spec.ts (95%) rename demo-app/{ => ng7}/src/app/app.component.ts (100%) rename demo-app/{ => ng7}/src/app/app.module.ts (100%) rename demo-app/{ => ng7}/src/app/components/card/card.component.html (100%) rename demo-app/{ => ng7}/src/app/components/card/card.component.scss (100%) rename demo-app/{ => ng7}/src/app/components/card/card.component.ts (100%) rename demo-app/{ => ng7}/src/app/components/card/card.theme.scss (100%) rename demo-app/{ => ng7}/src/app/components/card/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/language-selector/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/language-selector/language-selector.component.html (100%) rename demo-app/{ => ng7}/src/app/components/language-selector/language-selector.component.scss (100%) rename demo-app/{ => ng7}/src/app/components/language-selector/language-selector.component.ts (100%) rename demo-app/{ => ng7}/src/app/components/language-selector/language-selector.theme.scss (100%) rename demo-app/{ => ng7}/src/app/components/navigation/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/navigation/navigation.component.html (100%) rename demo-app/{ => ng7}/src/app/components/navigation/navigation.component.scss (100%) rename demo-app/{ => ng7}/src/app/components/navigation/navigation.component.ts (100%) rename demo-app/{ => ng7}/src/app/components/navigation/navigation.theme.scss (100%) rename demo-app/{ => ng7}/src/app/components/simple-form-error/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/simple-form-error/simple-form-error.component.html (100%) rename demo-app/{ => ng7}/src/app/components/simple-form-error/simple-form-error.component.ts (100%) rename demo-app/{ => ng7}/src/app/components/translated-form-error/index.ts (100%) rename demo-app/{ => ng7}/src/app/components/translated-form-error/translated-form-error.component.html (100%) rename demo-app/{ => ng7}/src/app/components/translated-form-error/translated-form-error.component.ts (100%) rename demo-app/{ => ng7}/src/app/pages/index.ts (100%) rename demo-app/{ => ng7}/src/app/pages/ngx-forms-example/index.ts (100%) rename demo-app/{ => ng7}/src/app/pages/ngx-forms-example/ngx-forms-example.component.html (100%) rename demo-app/{ => ng7}/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss (100%) rename demo-app/{ => ng7}/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts (100%) rename demo-app/{ => ng7}/src/app/pages/reactive-forms-example/index.ts (100%) rename demo-app/{ => ng7}/src/app/pages/reactive-forms-example/reactive-forms-example.component.html (100%) rename demo-app/{ => ng7}/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss (100%) rename demo-app/{ => ng7}/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts (100%) rename demo-app/{ => ng7}/src/app/pages/template-driven-forms-example/index.ts (100%) rename demo-app/{ => ng7}/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html (100%) rename demo-app/{ => ng7}/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss (100%) rename demo-app/{ => ng7}/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts (100%) rename demo-app/{ => ng7}/src/app/parent-error-state-matcher.ts (100%) rename demo-app/{ => ng7}/src/app/password-validator.ts (100%) rename demo-app/{ => ng7}/src/app/translation.config.ts (100%) rename demo-app/{ => ng7}/src/assets/img/github-icon.svg (100%) rename demo-app/{ => ng7}/src/assets/translations/en.json (100%) rename demo-app/{ => ng7}/src/assets/translations/fr.json (100%) rename demo-app/{ => ng7}/src/assets/translations/nl.json (100%) rename demo-app/{ => ng7}/src/browserslist (100%) rename demo-app/{ => ng7}/src/environments/environment.prod.ts (64%) rename demo-app/{ => ng7}/src/environments/environment.ts (96%) rename demo-app/{ => ng7}/src/favicon.ico (100%) rename demo-app/{ => ng7}/src/index.html (99%) rename demo-app/{ => ng7}/src/karma.conf.js (100%) rename demo-app/{ => ng7}/src/main.ts (100%) rename demo-app/{ => ng7}/src/polyfills.ts (95%) rename demo-app/{ => ng7}/src/styles/_app.theme.scss (100%) rename demo-app/{ => ng7}/src/styles/_variables.scss (100%) rename demo-app/{ => ng7}/src/styles/styles.scss (100%) rename demo-app/{ => ng7}/src/test.ts (100%) rename demo-app/{ => ng7}/src/tsconfig.app.json (100%) rename demo-app/{ => ng7}/src/tsconfig.spec.json (100%) rename demo-app/{ => ng7}/src/tslint.json (100%) rename demo-app/{ => ng7}/tsconfig.json (88%) rename demo-app/{ => ng7}/tslint.json (95%) create mode 100644 demo-app/ng8/.editorconfig create mode 100644 demo-app/ng8/.gitignore create mode 100644 demo-app/ng8/.npmrc create mode 100644 demo-app/ng8/README.md create mode 100644 demo-app/ng8/angular.json create mode 100644 demo-app/ng8/browserslist create mode 100644 demo-app/ng8/e2e/protractor.conf.js create mode 100644 demo-app/ng8/e2e/src/app.e2e-spec.ts create mode 100644 demo-app/ng8/e2e/src/app.po.ts create mode 100644 demo-app/ng8/e2e/tsconfig.json create mode 100644 demo-app/ng8/karma.conf.js create mode 100644 demo-app/ng8/package-lock.json create mode 100644 demo-app/ng8/package.json create mode 100644 demo-app/ng8/src/app/app-routing.module.ts create mode 100644 demo-app/ng8/src/app/app.component.html create mode 100644 demo-app/ng8/src/app/app.component.scss create mode 100644 demo-app/ng8/src/app/app.component.spec.ts create mode 100644 demo-app/ng8/src/app/app.component.ts create mode 100644 demo-app/ng8/src/app/app.module.ts create mode 100644 demo-app/ng8/src/app/components/card/card.component.html create mode 100644 demo-app/ng8/src/app/components/card/card.component.scss create mode 100644 demo-app/ng8/src/app/components/card/card.component.ts create mode 100644 demo-app/ng8/src/app/components/card/card.theme.scss create mode 100644 demo-app/ng8/src/app/components/card/index.ts create mode 100644 demo-app/ng8/src/app/components/index.ts create mode 100644 demo-app/ng8/src/app/components/language-selector/index.ts create mode 100644 demo-app/ng8/src/app/components/language-selector/language-selector.component.html create mode 100644 demo-app/ng8/src/app/components/language-selector/language-selector.component.scss create mode 100644 demo-app/ng8/src/app/components/language-selector/language-selector.component.ts create mode 100644 demo-app/ng8/src/app/components/language-selector/language-selector.theme.scss create mode 100644 demo-app/ng8/src/app/components/navigation/index.ts create mode 100644 demo-app/ng8/src/app/components/navigation/navigation.component.html create mode 100644 demo-app/ng8/src/app/components/navigation/navigation.component.scss create mode 100644 demo-app/ng8/src/app/components/navigation/navigation.component.ts create mode 100644 demo-app/ng8/src/app/components/navigation/navigation.theme.scss create mode 100644 demo-app/ng8/src/app/components/simple-form-error/index.ts create mode 100644 demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.html create mode 100644 demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.ts create mode 100644 demo-app/ng8/src/app/components/translated-form-error/index.ts create mode 100644 demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.html create mode 100644 demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.ts create mode 100644 demo-app/ng8/src/app/pages/index.ts create mode 100644 demo-app/ng8/src/app/pages/ngx-forms-example/index.ts create mode 100644 demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.html create mode 100644 demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss create mode 100644 demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts create mode 100644 demo-app/ng8/src/app/pages/reactive-forms-example/index.ts create mode 100644 demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.html create mode 100644 demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss create mode 100644 demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts create mode 100644 demo-app/ng8/src/app/pages/template-driven-forms-example/index.ts create mode 100644 demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html create mode 100644 demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss create mode 100644 demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts create mode 100644 demo-app/ng8/src/app/parent-error-state-matcher.ts create mode 100644 demo-app/ng8/src/app/password-validator.ts create mode 100644 demo-app/ng8/src/app/translation.config.ts create mode 100644 demo-app/ng8/src/assets/img/github-icon.svg create mode 100644 demo-app/ng8/src/assets/translations/en.json create mode 100644 demo-app/ng8/src/assets/translations/fr.json create mode 100644 demo-app/ng8/src/assets/translations/nl.json create mode 100644 demo-app/ng8/src/environments/environment.prod.ts create mode 100644 demo-app/ng8/src/environments/environment.ts create mode 100644 demo-app/ng8/src/favicon.ico create mode 100644 demo-app/ng8/src/index.html create mode 100644 demo-app/ng8/src/main.ts create mode 100644 demo-app/ng8/src/polyfills.ts create mode 100644 demo-app/ng8/src/styles/_app.theme.scss create mode 100644 demo-app/ng8/src/styles/_variables.scss create mode 100644 demo-app/ng8/src/styles/styles.scss create mode 100644 demo-app/ng8/src/test.ts create mode 100644 demo-app/ng8/tsconfig.app.json create mode 100644 demo-app/ng8/tsconfig.json create mode 100644 demo-app/ng8/tsconfig.spec.json create mode 100644 demo-app/ng8/tslint.json delete mode 100644 demo-app/src/polyfills/css-grid-layout-polyfill.js diff --git a/.travis.yml b/.travis.yml index 37fe292..1727130 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: node_js node_js: - - "8" - "10" + - "12" dist: trusty sudo: false # better for performance @@ -15,7 +15,7 @@ before_install: - AUTHOR_NAME="$(git log -1 $TRAVIS_COMMIT --pretty="%aN")" - echo $AUTHOR_NAME - export TZ=Europe/Brussels - - npm i -g npm@6.4.1 + - npm i -g npm@6.9.0 - NODE_VERSION="$(node -v)" - echo $NODE_VERSION # This ensures that we are authenticated without requiring to have an actual .npmrc file within the project @@ -27,7 +27,8 @@ install: - mkdir -p $LOGS_DIR - touch $LOGS_DIR/build-perf.log - npm ci - - npm run install:ci:demo + - npm run install:ci:demo:ng-previous + - npm run install:ci:demo:ng-latest env: global: diff --git a/RELEASE.md b/RELEASE.md index 0059df6..7623e64 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -62,7 +62,7 @@ Finally, Travis executes `npm run release:publish`. That script makes some checks then, if all succeed it publishes the different packages on npm. Checks that are performed: -- node version: should be "8" +- node version: should be "10" - NPM_TOKEN environment variable should be defined - TRAVIS_REPO_SLUG should be "NationalBankBelgium/ngx-form-errors" - TRAVIS_TAG should be defined and not empty (this is the case when Travis builds for a tag) diff --git a/demo-app/.editorconfig b/demo-app/ng7/.editorconfig similarity index 100% rename from demo-app/.editorconfig rename to demo-app/ng7/.editorconfig diff --git a/demo-app/.gitignore b/demo-app/ng7/.gitignore similarity index 100% rename from demo-app/.gitignore rename to demo-app/ng7/.gitignore diff --git a/demo-app/.npmrc b/demo-app/ng7/.npmrc similarity index 100% rename from demo-app/.npmrc rename to demo-app/ng7/.npmrc diff --git a/demo-app/README.md b/demo-app/ng7/README.md similarity index 100% rename from demo-app/README.md rename to demo-app/ng7/README.md diff --git a/demo-app/angular.json b/demo-app/ng7/angular.json similarity index 100% rename from demo-app/angular.json rename to demo-app/ng7/angular.json diff --git a/demo-app/e2e/protractor.conf.js b/demo-app/ng7/e2e/protractor.conf.js similarity index 100% rename from demo-app/e2e/protractor.conf.js rename to demo-app/ng7/e2e/protractor.conf.js diff --git a/demo-app/e2e/src/app.e2e-spec.ts b/demo-app/ng7/e2e/src/app.e2e-spec.ts similarity index 100% rename from demo-app/e2e/src/app.e2e-spec.ts rename to demo-app/ng7/e2e/src/app.e2e-spec.ts diff --git a/demo-app/e2e/src/app.po.ts b/demo-app/ng7/e2e/src/app.po.ts similarity index 84% rename from demo-app/e2e/src/app.po.ts rename to demo-app/ng7/e2e/src/app.po.ts index f8ebc58..5f17857 100644 --- a/demo-app/e2e/src/app.po.ts +++ b/demo-app/ng7/e2e/src/app.po.ts @@ -3,7 +3,7 @@ import { browser, by, element } from "protractor"; export class AppPage { public navigateTo() { - return browser.get("/") as Promise; + return browser.get("/") as Promise; } public getTitleText() { diff --git a/demo-app/e2e/tsconfig.e2e.json b/demo-app/ng7/e2e/tsconfig.e2e.json similarity index 100% rename from demo-app/e2e/tsconfig.e2e.json rename to demo-app/ng7/e2e/tsconfig.e2e.json diff --git a/demo-app/package-lock.json b/demo-app/ng7/package-lock.json similarity index 99% rename from demo-app/package-lock.json rename to demo-app/ng7/package-lock.json index fb73a02..9ed1489 100644 --- a/demo-app/package-lock.json +++ b/demo-app/ng7/package-lock.json @@ -688,7 +688,7 @@ } }, "@nationalbankbelgium/ngx-form-errors": { - "version": "file:../dist", + "version": "file:../../dist", "requires": { "tslib": "^1.9.0" }, @@ -2038,9 +2038,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001005", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001005.tgz", - "integrity": "sha512-g78miZm1Z5njjYR216a5812oPiLgV1ssndgGxITHWUopmjUrCswMisA0a2kSB7a0vZRox6JOKhM51+efmYN8Mg==", + "version": "1.0.30001006", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001006.tgz", + "integrity": "sha512-MXnUVX27aGs/QINz+QG1sWSLDr3P1A3Hq5EUWoIt0T7K24DuvMxZEnh3Y5aHlJW6Bz2aApJdSewdYLd8zQnUuw==", "dev": true }, "canonical-path": { diff --git a/demo-app/package.json b/demo-app/ng7/package.json similarity index 96% rename from demo-app/package.json rename to demo-app/ng7/package.json index 51b5da3..e1c9929 100644 --- a/demo-app/package.json +++ b/demo-app/ng7/package.json @@ -24,7 +24,7 @@ "@angular/platform-browser": "^7.1.3", "@angular/platform-browser-dynamic": "^7.1.3", "@angular/router": "^7.1.3", - "@nationalbankbelgium/ngx-form-errors": "../dist", + "@nationalbankbelgium/ngx-form-errors": "../../dist", "@ngx-translate/core": "^11.0.1", "core-js": "^2.6.0", "eligrey-classlist-js-polyfill": "1.2.20180112", diff --git a/demo-app/src/app/app-routing.module.ts b/demo-app/ng7/src/app/app-routing.module.ts similarity index 100% rename from demo-app/src/app/app-routing.module.ts rename to demo-app/ng7/src/app/app-routing.module.ts diff --git a/demo-app/src/app/app.component.html b/demo-app/ng7/src/app/app.component.html similarity index 100% rename from demo-app/src/app/app.component.html rename to demo-app/ng7/src/app/app.component.html diff --git a/demo-app/src/app/app.component.scss b/demo-app/ng7/src/app/app.component.scss similarity index 100% rename from demo-app/src/app/app.component.scss rename to demo-app/ng7/src/app/app.component.scss diff --git a/demo-app/src/app/app.component.spec.ts b/demo-app/ng7/src/app/app.component.spec.ts similarity index 95% rename from demo-app/src/app/app.component.spec.ts rename to demo-app/ng7/src/app/app.component.spec.ts index dbc8528..0ace7f0 100644 --- a/demo-app/src/app/app.component.spec.ts +++ b/demo-app/ng7/src/app/app.component.spec.ts @@ -1,3 +1,4 @@ +import { NO_ERRORS_SCHEMA } from "@angular/core"; import { async, ComponentFixture, TestBed } from "@angular/core/testing"; import { FormsModule, ReactiveFormsModule } from "@angular/forms"; import { NoopAnimationsModule } from "@angular/platform-browser/animations"; @@ -5,7 +6,6 @@ import { BrowserDynamicTestingModule } from "@angular/platform-browser-dynamic/t import { MatButtonToggleModule } from "@angular/material/button-toggle"; import { MatCardModule } from "@angular/material/card"; import { MatFormFieldModule } from "@angular/material/form-field"; -import { MatIconModule } from "@angular/material/icon"; import { MatInputModule } from "@angular/material/input"; import { MatListModule } from "@angular/material/list"; import { MatSidenavModule } from "@angular/material/sidenav"; @@ -38,7 +38,6 @@ describe("AppComponent", () => { MatButtonToggleModule, MatCardModule, MatFormFieldModule, - MatIconModule, MatInputModule, MatListModule, MatSidenavModule, @@ -49,7 +48,8 @@ describe("AppComponent", () => { formErrorComponent: SimpleFormErrorComponent }), TranslateModule.forRoot() - ] + ], + schemas: [NO_ERRORS_SCHEMA] // don't want to import mat-icon in these tests }) .overrideModule(BrowserDynamicTestingModule, { set: { diff --git a/demo-app/src/app/app.component.ts b/demo-app/ng7/src/app/app.component.ts similarity index 100% rename from demo-app/src/app/app.component.ts rename to demo-app/ng7/src/app/app.component.ts diff --git a/demo-app/src/app/app.module.ts b/demo-app/ng7/src/app/app.module.ts similarity index 100% rename from demo-app/src/app/app.module.ts rename to demo-app/ng7/src/app/app.module.ts diff --git a/demo-app/src/app/components/card/card.component.html b/demo-app/ng7/src/app/components/card/card.component.html similarity index 100% rename from demo-app/src/app/components/card/card.component.html rename to demo-app/ng7/src/app/components/card/card.component.html diff --git a/demo-app/src/app/components/card/card.component.scss b/demo-app/ng7/src/app/components/card/card.component.scss similarity index 100% rename from demo-app/src/app/components/card/card.component.scss rename to demo-app/ng7/src/app/components/card/card.component.scss diff --git a/demo-app/src/app/components/card/card.component.ts b/demo-app/ng7/src/app/components/card/card.component.ts similarity index 100% rename from demo-app/src/app/components/card/card.component.ts rename to demo-app/ng7/src/app/components/card/card.component.ts diff --git a/demo-app/src/app/components/card/card.theme.scss b/demo-app/ng7/src/app/components/card/card.theme.scss similarity index 100% rename from demo-app/src/app/components/card/card.theme.scss rename to demo-app/ng7/src/app/components/card/card.theme.scss diff --git a/demo-app/src/app/components/card/index.ts b/demo-app/ng7/src/app/components/card/index.ts similarity index 100% rename from demo-app/src/app/components/card/index.ts rename to demo-app/ng7/src/app/components/card/index.ts diff --git a/demo-app/src/app/components/index.ts b/demo-app/ng7/src/app/components/index.ts similarity index 100% rename from demo-app/src/app/components/index.ts rename to demo-app/ng7/src/app/components/index.ts diff --git a/demo-app/src/app/components/language-selector/index.ts b/demo-app/ng7/src/app/components/language-selector/index.ts similarity index 100% rename from demo-app/src/app/components/language-selector/index.ts rename to demo-app/ng7/src/app/components/language-selector/index.ts diff --git a/demo-app/src/app/components/language-selector/language-selector.component.html b/demo-app/ng7/src/app/components/language-selector/language-selector.component.html similarity index 100% rename from demo-app/src/app/components/language-selector/language-selector.component.html rename to demo-app/ng7/src/app/components/language-selector/language-selector.component.html diff --git a/demo-app/src/app/components/language-selector/language-selector.component.scss b/demo-app/ng7/src/app/components/language-selector/language-selector.component.scss similarity index 100% rename from demo-app/src/app/components/language-selector/language-selector.component.scss rename to demo-app/ng7/src/app/components/language-selector/language-selector.component.scss diff --git a/demo-app/src/app/components/language-selector/language-selector.component.ts b/demo-app/ng7/src/app/components/language-selector/language-selector.component.ts similarity index 100% rename from demo-app/src/app/components/language-selector/language-selector.component.ts rename to demo-app/ng7/src/app/components/language-selector/language-selector.component.ts diff --git a/demo-app/src/app/components/language-selector/language-selector.theme.scss b/demo-app/ng7/src/app/components/language-selector/language-selector.theme.scss similarity index 100% rename from demo-app/src/app/components/language-selector/language-selector.theme.scss rename to demo-app/ng7/src/app/components/language-selector/language-selector.theme.scss diff --git a/demo-app/src/app/components/navigation/index.ts b/demo-app/ng7/src/app/components/navigation/index.ts similarity index 100% rename from demo-app/src/app/components/navigation/index.ts rename to demo-app/ng7/src/app/components/navigation/index.ts diff --git a/demo-app/src/app/components/navigation/navigation.component.html b/demo-app/ng7/src/app/components/navigation/navigation.component.html similarity index 100% rename from demo-app/src/app/components/navigation/navigation.component.html rename to demo-app/ng7/src/app/components/navigation/navigation.component.html diff --git a/demo-app/src/app/components/navigation/navigation.component.scss b/demo-app/ng7/src/app/components/navigation/navigation.component.scss similarity index 100% rename from demo-app/src/app/components/navigation/navigation.component.scss rename to demo-app/ng7/src/app/components/navigation/navigation.component.scss diff --git a/demo-app/src/app/components/navigation/navigation.component.ts b/demo-app/ng7/src/app/components/navigation/navigation.component.ts similarity index 100% rename from demo-app/src/app/components/navigation/navigation.component.ts rename to demo-app/ng7/src/app/components/navigation/navigation.component.ts diff --git a/demo-app/src/app/components/navigation/navigation.theme.scss b/demo-app/ng7/src/app/components/navigation/navigation.theme.scss similarity index 100% rename from demo-app/src/app/components/navigation/navigation.theme.scss rename to demo-app/ng7/src/app/components/navigation/navigation.theme.scss diff --git a/demo-app/src/app/components/simple-form-error/index.ts b/demo-app/ng7/src/app/components/simple-form-error/index.ts similarity index 100% rename from demo-app/src/app/components/simple-form-error/index.ts rename to demo-app/ng7/src/app/components/simple-form-error/index.ts diff --git a/demo-app/src/app/components/simple-form-error/simple-form-error.component.html b/demo-app/ng7/src/app/components/simple-form-error/simple-form-error.component.html similarity index 100% rename from demo-app/src/app/components/simple-form-error/simple-form-error.component.html rename to demo-app/ng7/src/app/components/simple-form-error/simple-form-error.component.html diff --git a/demo-app/src/app/components/simple-form-error/simple-form-error.component.ts b/demo-app/ng7/src/app/components/simple-form-error/simple-form-error.component.ts similarity index 100% rename from demo-app/src/app/components/simple-form-error/simple-form-error.component.ts rename to demo-app/ng7/src/app/components/simple-form-error/simple-form-error.component.ts diff --git a/demo-app/src/app/components/translated-form-error/index.ts b/demo-app/ng7/src/app/components/translated-form-error/index.ts similarity index 100% rename from demo-app/src/app/components/translated-form-error/index.ts rename to demo-app/ng7/src/app/components/translated-form-error/index.ts diff --git a/demo-app/src/app/components/translated-form-error/translated-form-error.component.html b/demo-app/ng7/src/app/components/translated-form-error/translated-form-error.component.html similarity index 100% rename from demo-app/src/app/components/translated-form-error/translated-form-error.component.html rename to demo-app/ng7/src/app/components/translated-form-error/translated-form-error.component.html diff --git a/demo-app/src/app/components/translated-form-error/translated-form-error.component.ts b/demo-app/ng7/src/app/components/translated-form-error/translated-form-error.component.ts similarity index 100% rename from demo-app/src/app/components/translated-form-error/translated-form-error.component.ts rename to demo-app/ng7/src/app/components/translated-form-error/translated-form-error.component.ts diff --git a/demo-app/src/app/pages/index.ts b/demo-app/ng7/src/app/pages/index.ts similarity index 100% rename from demo-app/src/app/pages/index.ts rename to demo-app/ng7/src/app/pages/index.ts diff --git a/demo-app/src/app/pages/ngx-forms-example/index.ts b/demo-app/ng7/src/app/pages/ngx-forms-example/index.ts similarity index 100% rename from demo-app/src/app/pages/ngx-forms-example/index.ts rename to demo-app/ng7/src/app/pages/ngx-forms-example/index.ts diff --git a/demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.html b/demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.html similarity index 100% rename from demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.html rename to demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.html diff --git a/demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss b/demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss similarity index 100% rename from demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss rename to demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss diff --git a/demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts b/demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts similarity index 100% rename from demo-app/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts rename to demo-app/ng7/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts diff --git a/demo-app/src/app/pages/reactive-forms-example/index.ts b/demo-app/ng7/src/app/pages/reactive-forms-example/index.ts similarity index 100% rename from demo-app/src/app/pages/reactive-forms-example/index.ts rename to demo-app/ng7/src/app/pages/reactive-forms-example/index.ts diff --git a/demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.html b/demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.html similarity index 100% rename from demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.html rename to demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.html diff --git a/demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss b/demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss similarity index 100% rename from demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss rename to demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss diff --git a/demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts b/demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts similarity index 100% rename from demo-app/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts rename to demo-app/ng7/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts diff --git a/demo-app/src/app/pages/template-driven-forms-example/index.ts b/demo-app/ng7/src/app/pages/template-driven-forms-example/index.ts similarity index 100% rename from demo-app/src/app/pages/template-driven-forms-example/index.ts rename to demo-app/ng7/src/app/pages/template-driven-forms-example/index.ts diff --git a/demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html b/demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html similarity index 100% rename from demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html rename to demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html diff --git a/demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss b/demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss similarity index 100% rename from demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss rename to demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss diff --git a/demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts b/demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts similarity index 100% rename from demo-app/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts rename to demo-app/ng7/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts diff --git a/demo-app/src/app/parent-error-state-matcher.ts b/demo-app/ng7/src/app/parent-error-state-matcher.ts similarity index 100% rename from demo-app/src/app/parent-error-state-matcher.ts rename to demo-app/ng7/src/app/parent-error-state-matcher.ts diff --git a/demo-app/src/app/password-validator.ts b/demo-app/ng7/src/app/password-validator.ts similarity index 100% rename from demo-app/src/app/password-validator.ts rename to demo-app/ng7/src/app/password-validator.ts diff --git a/demo-app/src/app/translation.config.ts b/demo-app/ng7/src/app/translation.config.ts similarity index 100% rename from demo-app/src/app/translation.config.ts rename to demo-app/ng7/src/app/translation.config.ts diff --git a/demo-app/src/assets/img/github-icon.svg b/demo-app/ng7/src/assets/img/github-icon.svg similarity index 100% rename from demo-app/src/assets/img/github-icon.svg rename to demo-app/ng7/src/assets/img/github-icon.svg diff --git a/demo-app/src/assets/translations/en.json b/demo-app/ng7/src/assets/translations/en.json similarity index 100% rename from demo-app/src/assets/translations/en.json rename to demo-app/ng7/src/assets/translations/en.json diff --git a/demo-app/src/assets/translations/fr.json b/demo-app/ng7/src/assets/translations/fr.json similarity index 100% rename from demo-app/src/assets/translations/fr.json rename to demo-app/ng7/src/assets/translations/fr.json diff --git a/demo-app/src/assets/translations/nl.json b/demo-app/ng7/src/assets/translations/nl.json similarity index 100% rename from demo-app/src/assets/translations/nl.json rename to demo-app/ng7/src/assets/translations/nl.json diff --git a/demo-app/src/browserslist b/demo-app/ng7/src/browserslist similarity index 100% rename from demo-app/src/browserslist rename to demo-app/ng7/src/browserslist diff --git a/demo-app/src/environments/environment.prod.ts b/demo-app/ng7/src/environments/environment.prod.ts similarity index 64% rename from demo-app/src/environments/environment.prod.ts rename to demo-app/ng7/src/environments/environment.prod.ts index 9000aec..8b7239d 100644 --- a/demo-app/src/environments/environment.prod.ts +++ b/demo-app/ng7/src/environments/environment.prod.ts @@ -1,4 +1,3 @@ -/*tslint:disable:typedef*/ export const environment = { production: true }; diff --git a/demo-app/src/environments/environment.ts b/demo-app/ng7/src/environments/environment.ts similarity index 96% rename from demo-app/src/environments/environment.ts rename to demo-app/ng7/src/environments/environment.ts index 9757ce9..c5a517a 100644 --- a/demo-app/src/environments/environment.ts +++ b/demo-app/ng7/src/environments/environment.ts @@ -2,7 +2,6 @@ // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. // The list of file replacements can be found in `angular.json`. -/*tslint:disable:typedef*/ export const environment = { production: false }; diff --git a/demo-app/src/favicon.ico b/demo-app/ng7/src/favicon.ico similarity index 100% rename from demo-app/src/favicon.ico rename to demo-app/ng7/src/favicon.ico diff --git a/demo-app/src/index.html b/demo-app/ng7/src/index.html similarity index 99% rename from demo-app/src/index.html rename to demo-app/ng7/src/index.html index 26969ea..ea906c0 100644 --- a/demo-app/src/index.html +++ b/demo-app/ng7/src/index.html @@ -4,7 +4,6 @@ NgxFormErrors Showcase - diff --git a/demo-app/src/karma.conf.js b/demo-app/ng7/src/karma.conf.js similarity index 100% rename from demo-app/src/karma.conf.js rename to demo-app/ng7/src/karma.conf.js diff --git a/demo-app/src/main.ts b/demo-app/ng7/src/main.ts similarity index 100% rename from demo-app/src/main.ts rename to demo-app/ng7/src/main.ts diff --git a/demo-app/src/polyfills.ts b/demo-app/ng7/src/polyfills.ts similarity index 95% rename from demo-app/src/polyfills.ts rename to demo-app/ng7/src/polyfills.ts index bec4739..4216a40 100644 --- a/demo-app/src/polyfills.ts +++ b/demo-app/ng7/src/polyfills.ts @@ -65,5 +65,3 @@ import "zone.js/dist/zone"; // Included with Angular CLI. /*************************************************************************************************** * APPLICATION IMPORTS */ -// FixMe: Remove when NBB upgrades chrome browser (https://caniuse.com/#search=grid) -import "./polyfills/css-grid-layout-polyfill"; diff --git a/demo-app/src/styles/_app.theme.scss b/demo-app/ng7/src/styles/_app.theme.scss similarity index 100% rename from demo-app/src/styles/_app.theme.scss rename to demo-app/ng7/src/styles/_app.theme.scss diff --git a/demo-app/src/styles/_variables.scss b/demo-app/ng7/src/styles/_variables.scss similarity index 100% rename from demo-app/src/styles/_variables.scss rename to demo-app/ng7/src/styles/_variables.scss diff --git a/demo-app/src/styles/styles.scss b/demo-app/ng7/src/styles/styles.scss similarity index 100% rename from demo-app/src/styles/styles.scss rename to demo-app/ng7/src/styles/styles.scss diff --git a/demo-app/src/test.ts b/demo-app/ng7/src/test.ts similarity index 100% rename from demo-app/src/test.ts rename to demo-app/ng7/src/test.ts diff --git a/demo-app/src/tsconfig.app.json b/demo-app/ng7/src/tsconfig.app.json similarity index 100% rename from demo-app/src/tsconfig.app.json rename to demo-app/ng7/src/tsconfig.app.json diff --git a/demo-app/src/tsconfig.spec.json b/demo-app/ng7/src/tsconfig.spec.json similarity index 100% rename from demo-app/src/tsconfig.spec.json rename to demo-app/ng7/src/tsconfig.spec.json diff --git a/demo-app/src/tslint.json b/demo-app/ng7/src/tslint.json similarity index 100% rename from demo-app/src/tslint.json rename to demo-app/ng7/src/tslint.json diff --git a/demo-app/tsconfig.json b/demo-app/ng7/tsconfig.json similarity index 88% rename from demo-app/tsconfig.json rename to demo-app/ng7/tsconfig.json index e9fb3bf..31512e2 100644 --- a/demo-app/tsconfig.json +++ b/demo-app/ng7/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.json", + "extends": "../../tsconfig.json", "buildOnSave": false, "compileOnSave": false, "compilerOptions": { diff --git a/demo-app/tslint.json b/demo-app/ng7/tslint.json similarity index 95% rename from demo-app/tslint.json rename to demo-app/ng7/tslint.json index f0d5825..86a20b4 100644 --- a/demo-app/tslint.json +++ b/demo-app/ng7/tslint.json @@ -1,5 +1,5 @@ { - "extends": ["../tslint.json"], + "extends": ["../../tslint.json"], "rules": { "completed-docs": false, "directive-selector": [true, "attribute", "app", "camelCase"], diff --git a/demo-app/ng8/.editorconfig b/demo-app/ng8/.editorconfig new file mode 100644 index 0000000..e89330a --- /dev/null +++ b/demo-app/ng8/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/demo-app/ng8/.gitignore b/demo-app/ng8/.gitignore new file mode 100644 index 0000000..86d943a --- /dev/null +++ b/demo-app/ng8/.gitignore @@ -0,0 +1,46 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db diff --git a/demo-app/ng8/.npmrc b/demo-app/ng8/.npmrc new file mode 100644 index 0000000..38f11c6 --- /dev/null +++ b/demo-app/ng8/.npmrc @@ -0,0 +1 @@ +registry=https://registry.npmjs.org diff --git a/demo-app/ng8/README.md b/demo-app/ng8/README.md new file mode 100644 index 0000000..ddab83c --- /dev/null +++ b/demo-app/ng8/README.md @@ -0,0 +1,27 @@ +# DemoApp + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 8.3.15. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). diff --git a/demo-app/ng8/angular.json b/demo-app/ng8/angular.json new file mode 100644 index 0000000..bf844f5 --- /dev/null +++ b/demo-app/ng8/angular.json @@ -0,0 +1,121 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "demo-app": { + "root": "", + "sourceRoot": "src", + "projectType": "application", + "prefix": "app", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/demo-app", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "aot": false, + "assets": ["src/favicon.ico", "src/assets"], + "styles": ["node_modules/normalize.css/normalize.css", "src/styles/styles.scss"], + "stylePreprocessorOptions": { + "includePaths": ["src/styles"] + }, + "scripts": [] + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "6kb", + "maximumError": "10kb" + } + ] + } + } + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "demo-app:build" + }, + "configurations": { + "production": { + "browserTarget": "demo-app:build:production" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "demo-app:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "styles": ["node_modules/normalize.css/normalize.css", "src/styles/styles.scss"], + "stylePreprocessorOptions": { + "includePaths": ["src/styles"] + }, + "scripts": [], + "assets": ["src/favicon.ico", "src/assets"] + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": ["tsconfig.app.json", "tsconfig.spec.json"], + "exclude": ["**/node_modules/**"], + "format": "codeFrame" + } + }, + "e2e": { + "builder": "@angular-devkit/build-angular:protractor", + "options": { + "protractorConfig": "e2e/protractor.conf.js", + "devServerTarget": "demo-app:serve" + }, + "configurations": { + "production": { + "devServerTarget": "demo-app:serve:production" + } + } + } + } + } + }, + "defaultProject": "demo-app" +} diff --git a/demo-app/ng8/browserslist b/demo-app/ng8/browserslist new file mode 100644 index 0000000..b15c7fa --- /dev/null +++ b/demo-app/ng8/browserslist @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. diff --git a/demo-app/ng8/e2e/protractor.conf.js b/demo-app/ng8/e2e/protractor.conf.js new file mode 100644 index 0000000..90de476 --- /dev/null +++ b/demo-app/ng8/e2e/protractor.conf.js @@ -0,0 +1,30 @@ +// @ts-check +// Protractor configuration file, see link for more information +// https://github.com/angular/protractor/blob/master/lib/config.ts + +const { SpecReporter } = require("jasmine-spec-reporter"); + +/** + * @type { import("protractor").Config } + */ +exports.config = { + allScriptsTimeout: 11000, + specs: ["./src/**/*.e2e-spec.ts"], + capabilities: { + browserName: "chrome" + }, + directConnect: true, + baseUrl: "http://localhost:4200/", + framework: "jasmine", + jasmineNodeOpts: { + showColors: true, + defaultTimeoutInterval: 30000, + print: function() {} + }, + onPrepare() { + require("ts-node").register({ + project: require("path").join(__dirname, "./tsconfig.json") + }); + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); + } +}; diff --git a/demo-app/ng8/e2e/src/app.e2e-spec.ts b/demo-app/ng8/e2e/src/app.e2e-spec.ts new file mode 100644 index 0000000..45b44ee --- /dev/null +++ b/demo-app/ng8/e2e/src/app.e2e-spec.ts @@ -0,0 +1,28 @@ +import { AppPage } from "./app.po"; +import { browser, logging } from "protractor"; + +describe("workspace-project App", () => { + let page: AppPage; + + beforeEach(() => { + page = new AppPage(); + }); + + it("should display welcome message", async () => { + await page.navigateTo(); + const titleText = await page.getTitleText(); + expect(titleText).toEqual("demo-app app is running!"); + }); + + afterEach(async () => { + // Assert that there are no errors emitted from the browser + const logs = await browser + .manage() + .logs() + .get(logging.Type.BROWSER); + const expectedLogEntry: Partial = { + level: logging.Level.SEVERE + }; + expect(logs).not.toContain(jasmine.objectContaining(expectedLogEntry)); + }); +}); diff --git a/demo-app/ng8/e2e/src/app.po.ts b/demo-app/ng8/e2e/src/app.po.ts new file mode 100644 index 0000000..7fb5dfa --- /dev/null +++ b/demo-app/ng8/e2e/src/app.po.ts @@ -0,0 +1,11 @@ +import { browser, by, element } from "protractor"; + +export class AppPage { + public navigateTo() { + return browser.get(browser.baseUrl) as Promise; + } + + public getTitleText() { + return element(by.css("app-root .content span")).getText() as Promise; + } +} diff --git a/demo-app/ng8/e2e/tsconfig.json b/demo-app/ng8/e2e/tsconfig.json new file mode 100644 index 0000000..677f30f --- /dev/null +++ b/demo-app/ng8/e2e/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/e2e", + "module": "commonjs", + "target": "es5", + "types": ["jasmine", "jasminewd2", "node"] + } +} diff --git a/demo-app/ng8/karma.conf.js b/demo-app/ng8/karma.conf.js new file mode 100644 index 0000000..82a3ff3 --- /dev/null +++ b/demo-app/ng8/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function(config) { + config.set({ + basePath: "", + frameworks: ["jasmine", "@angular-devkit/build-angular"], + plugins: [ + require("karma-jasmine"), + require("karma-chrome-launcher"), + require("karma-jasmine-html-reporter"), + require("karma-coverage-istanbul-reporter"), + require("@angular-devkit/build-angular/plugins/karma") + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require("path").join(__dirname, "./coverage"), + reports: ["html", "lcovonly", "text-summary"], + fixWebpackSourcePaths: true + }, + reporters: ["progress", "kjhtml"], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ["Chrome"], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/demo-app/ng8/package-lock.json b/demo-app/ng8/package-lock.json new file mode 100644 index 0000000..e5a7bd7 --- /dev/null +++ b/demo-app/ng8/package-lock.json @@ -0,0 +1,13371 @@ +{ + "name": "demo-app", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular-devkit/architect": { + "version": "0.803.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.15.tgz", + "integrity": "sha512-kxDhEPckatii2efN5mqB2bbGvI65K+sV8iR/yVMN5wK8qchvA9ayU0Qudg2xECvwudxfaZnIbJAoCibEkmdzuw==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.15", + "rxjs": "6.4.0" + } + }, + "@angular-devkit/build-angular": { + "version": "0.803.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.803.15.tgz", + "integrity": "sha512-7fZOask1lWkglhgLUHd6VBJtujr8P7MO2tPrEAP+wu+9rhQoNqCq4xboS8MM/3zKdIM/0y0rWMcL4gNO2mgiSQ==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.15", + "@angular-devkit/build-optimizer": "0.803.15", + "@angular-devkit/build-webpack": "0.803.15", + "@angular-devkit/core": "8.3.15", + "@babel/core": "7.5.5", + "@babel/preset-env": "7.5.5", + "@ngtools/webpack": "8.3.15", + "ajv": "6.10.2", + "autoprefixer": "9.6.1", + "browserslist": "4.6.6", + "cacache": "12.0.2", + "caniuse-lite": "1.0.30000989", + "circular-dependency-plugin": "5.2.0", + "clean-css": "4.2.1", + "copy-webpack-plugin": "5.0.4", + "core-js": "3.2.1", + "file-loader": "4.2.0", + "find-cache-dir": "3.0.0", + "glob": "7.1.4", + "istanbul-instrumenter-loader": "3.0.1", + "jest-worker": "24.9.0", + "karma-source-map-support": "1.4.0", + "less": "3.9.0", + "less-loader": "5.0.0", + "license-webpack-plugin": "2.1.2", + "loader-utils": "1.2.3", + "mini-css-extract-plugin": "0.8.0", + "minimatch": "3.0.4", + "open": "6.4.0", + "parse5": "4.0.0", + "postcss": "7.0.17", + "postcss-import": "12.0.1", + "postcss-loader": "3.0.0", + "raw-loader": "3.1.0", + "regenerator-runtime": "0.13.3", + "rxjs": "6.4.0", + "sass": "1.22.9", + "sass-loader": "7.2.0", + "semver": "6.3.0", + "source-map": "0.7.3", + "source-map-loader": "0.2.4", + "source-map-support": "0.5.13", + "speed-measure-webpack-plugin": "1.3.1", + "style-loader": "1.0.0", + "stylus": "0.54.5", + "stylus-loader": "3.0.2", + "terser": "4.3.8", + "terser-webpack-plugin": "1.4.1", + "tree-kill": "1.2.1", + "webpack": "4.39.2", + "webpack-dev-middleware": "3.7.2", + "webpack-dev-server": "3.9.0", + "webpack-merge": "4.2.1", + "webpack-sources": "1.4.3", + "webpack-subresource-integrity": "1.1.0-rc.6", + "worker-plugin": "3.2.0" + }, + "dependencies": { + "core-js": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz", + "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw==", + "dev": true + } + } + }, + "@angular-devkit/build-optimizer": { + "version": "0.803.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.803.15.tgz", + "integrity": "sha512-uu7RSCc5VsRTcBY0BEjzKiNFmA4PnbjOiPkEXIRjasnEa+PKzhTeiHC0W9gqWW900ea6+sL0W5+rvEeLOjxmuw==", + "dev": true, + "requires": { + "loader-utils": "1.2.3", + "source-map": "0.7.3", + "tslib": "1.10.0", + "typescript": "3.5.3", + "webpack-sources": "1.4.3" + } + }, + "@angular-devkit/build-webpack": { + "version": "0.803.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.803.15.tgz", + "integrity": "sha512-LCO6HI0zm25sVRHphBU0MZbEvLDTr8j2mqlcgOIq1WKCQOeBteKblrR1XnKivlq1VWQUxpxa/RS+vs0o5ypHTA==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.15", + "@angular-devkit/core": "8.3.15", + "rxjs": "6.4.0" + } + }, + "@angular-devkit/core": { + "version": "8.3.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.15.tgz", + "integrity": "sha512-FYUYNcggvRm7glfmqsRgBA1N6ubkINVx2nquZZX10AeCIs4MRqlG4UsddFbOvVckIF/4Q+tBK5P/NngpP1zGXA==", + "dev": true, + "requires": { + "ajv": "6.10.2", + "fast-json-stable-stringify": "2.0.0", + "magic-string": "0.25.3", + "rxjs": "6.4.0", + "source-map": "0.7.3" + } + }, + "@angular-devkit/schematics": { + "version": "8.3.15", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.15.tgz", + "integrity": "sha512-BWi4gpF0RK6k4tD6YKz7cHkwlympnG/x5KZqtmnFYRvw22W3cc/zadu+xQ91EZLFmSycpV10+pZWfE6Kl4V6rA==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.15", + "rxjs": "6.4.0" + } + }, + "@angular/animations": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.2.12.tgz", + "integrity": "sha512-QVtZUw5J9c0RcDaJntIoeWVk/q9dhjDFxh+yw/uPl9Z4upWASdsOpZU2lfjqyU0myfg8dnQyZa1+Ce7n/DaClQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/cdk": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-8.2.3.tgz", + "integrity": "sha512-ZwO5Sn720RA2YvBqud0JAHkZXjmjxM0yNzCO8RVtRE9i8Gl26Wk0j0nQeJkVm4zwv2QO8MwbKUKGTMt8evsokA==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^1.7.1" + }, + "dependencies": { + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "optional": true + } + } + }, + "@angular/cli": { + "version": "8.3.15", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.15.tgz", + "integrity": "sha512-8Mnu9MJogoej+TA10SPbh/BScVXQavnntTIruzR6gVlqtpr1P7QdOcEJE4Gji6eXTG4j4WKkipJUKN0x8TRRrw==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.803.15", + "@angular-devkit/core": "8.3.15", + "@angular-devkit/schematics": "8.3.15", + "@schematics/angular": "8.3.15", + "@schematics/update": "0.803.15", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", + "debug": "^4.1.1", + "ini": "1.3.5", + "inquirer": "6.5.1", + "npm-package-arg": "6.1.0", + "npm-pick-manifest": "3.0.2", + "open": "6.4.0", + "pacote": "9.5.5", + "read-package-tree": "5.3.1", + "rimraf": "3.0.0", + "semver": "6.3.0", + "symbol-observable": "1.2.0", + "universal-analytics": "^0.4.20", + "uuid": "^3.3.2" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@angular/common": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.2.12.tgz", + "integrity": "sha512-BNz1lo+PP+lwIX3sErRGBRnkMzT5yT8CJ5o/M29AanCdcx9dpoJG2WKgpIgw8UBcj9QlP0CkSmzPtUNtcNMthA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/compiler": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.2.12.tgz", + "integrity": "sha512-V5mDWioGmSZ4cJJ2THo8qHYKwj3sUI7dpJ0oab2Al0FQAN8JCimWO6AQKRtjmnr78ZkMy9Xe/KK6ebl40ewL5Q==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/compiler-cli": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.2.12.tgz", + "integrity": "sha512-OrNnkJ7OrpbcOtB4TWFBF6D3dtEfUuOQgfc3HBjizZuL8EuX0pU5dv4VTvLTRkmyUT/7fmmWdkEXJL+UQtXqPg==", + "dev": true, + "requires": { + "canonical-path": "1.0.0", + "chokidar": "^2.1.1", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.7.2", + "magic-string": "^0.25.0", + "minimist": "^1.2.0", + "reflect-metadata": "^0.1.2", + "source-map": "^0.6.1", + "tslib": "^1.9.0", + "yargs": "13.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": 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.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.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, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "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, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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, + "optional": 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, + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "yargs": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "@angular/core": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.2.12.tgz", + "integrity": "sha512-wEFwhHCuuXynXAMeA1G+0KIYY0jqXYs7I8p+GO+ufKoUmzWHFTvtMJ6nvKgy+LmZTByO2gf9oVAAlRodNb8ttQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/forms": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.2.12.tgz", + "integrity": "sha512-y1UObndCGbTYwLSzUWzCiX7th+mb4n712asApooGmfmIQmgTyHbKxYUJ9Ep1pgd0pqLBBnK249MQLH15NDpbyQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/language-service": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-8.2.12.tgz", + "integrity": "sha512-uXGVSC4ugkyBt7pYdI8qaKNV0TIxfjSWb3dWNuhD6b9riPtaa+xJFQrfMu7OX/tVX642aFxca4jkUHBLCyWptA==", + "dev": true + }, + "@angular/material": { + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-8.2.3.tgz", + "integrity": "sha512-SOczkIaqes+r+9XF/UUiokidfFKBpHkOPIaFK857sFD0FBNPvPEpOr5oHKCG3feERRwAFqHS7Wo2ohVEWypb5A==", + "requires": { + "tslib": "^1.7.1" + } + }, + "@angular/platform-browser": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.2.12.tgz", + "integrity": "sha512-VBvMjmFJapZ2pFlmxZiHtfPwbHp79RRi5mrdMhETjKMaLaC2tAR/99ijCpx2urDMqb/VDm7YHOtoLEpBFVDulg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.12.tgz", + "integrity": "sha512-O4krb+9tj028JOQHPgLk/87lyUlHt8dpNxzuYCT0G6kEmknjpyZBaxhvDPygGjGHXV3LDqlYVH+bh8ygJUhwmw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@angular/router": { + "version": "8.2.12", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.2.12.tgz", + "integrity": "sha512-mq1FethFpYosSVzChstMpxZlL+oUFeaA+FrzZQL7zJP/mm61yFkkhoYGVG6pG0NWSzpJE4NY6YvGCvHgN4ZECw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@babel/code-frame": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "@babel/core": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz", + "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.5.5", + "@babel/helpers": "^7.5.5", + "@babel/parser": "^7.5.5", + "@babel/template": "^7.4.4", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5", + "convert-source-map": "^1.1.0", + "debug": "^4.1.0", + "json5": "^2.1.0", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "json5": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", + "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", + "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", + "dev": true, + "requires": { + "@babel/types": "^7.6.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", + "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", + "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-call-delegate": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", + "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/traverse": "^7.4.4", + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-define-map": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", + "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", + "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-function-name": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", + "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", + "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", + "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", + "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "dev": true, + "requires": { + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", + "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-module-transforms": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", + "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/template": "^7.4.4", + "@babel/types": "^7.5.5", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", + "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", + "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", + "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", + "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-wrap-function": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", + "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.5.5", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/traverse": "^7.5.5", + "@babel/types": "^7.5.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", + "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "dev": true, + "requires": { + "@babel/template": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", + "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "dev": true, + "requires": { + "@babel/types": "^7.4.4" + } + }, + "@babel/helper-wrap-function": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", + "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/template": "^7.1.0", + "@babel/traverse": "^7.1.0", + "@babel/types": "^7.2.0" + } + }, + "@babel/helpers": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", + "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", + "dev": true, + "requires": { + "@babel/template": "^7.6.0", + "@babel/traverse": "^7.6.2", + "@babel/types": "^7.6.0" + } + }, + "@babel/highlight": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", + "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", + "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0", + "@babel/plugin-syntax-async-generators": "^7.2.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", + "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", + "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-json-strings": "^7.2.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", + "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", + "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", + "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", + "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", + "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", + "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", + "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", + "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", + "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-remap-async-to-generator": "^7.1.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", + "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", + "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", + "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-define-map": "^7.5.5", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5", + "@babel/helper-split-export-declaration": "^7.4.4", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", + "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", + "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", + "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", + "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", + "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", + "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", + "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", + "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", + "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", + "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", + "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-simple-access": "^7.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", + "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-plugin-utils": "^7.0.0", + "babel-plugin-dynamic-import-node": "^2.3.0" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", + "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz", + "integrity": "sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==", + "dev": true, + "requires": { + "regexpu-core": "^4.6.0" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", + "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", + "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-replace-supers": "^7.5.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", + "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "dev": true, + "requires": { + "@babel/helper-call-delegate": "^7.4.4", + "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", + "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", + "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", + "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", + "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", + "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", + "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.0.0" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", + "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", + "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", + "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" + } + }, + "@babel/preset-env": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz", + "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-dynamic-import": "^7.5.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.5.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.5.0", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.5.5", + "@babel/plugin-transform-classes": "^7.5.5", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.5.0", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/plugin-transform-duplicate-keys": "^7.5.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.4.4", + "@babel/plugin-transform-function-name": "^7.4.4", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-member-expression-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.5.0", + "@babel/plugin-transform-modules-commonjs": "^7.5.0", + "@babel/plugin-transform-modules-systemjs": "^7.5.0", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", + "@babel/plugin-transform-new-target": "^7.4.4", + "@babel/plugin-transform-object-super": "^7.5.5", + "@babel/plugin-transform-parameters": "^7.4.4", + "@babel/plugin-transform-property-literals": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.4.5", + "@babel/plugin-transform-reserved-words": "^7.2.0", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.4.4", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.4.4", + "@babel/types": "^7.5.5", + "browserslist": "^4.6.0", + "core-js-compat": "^3.1.1", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/template": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", + "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.6.0", + "@babel/types": "^7.6.0" + } + }, + "@babel/traverse": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", + "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "@babel/generator": "^7.6.3", + "@babel/helper-function-name": "^7.1.0", + "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/parser": "^7.6.3", + "@babel/types": "^7.6.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", + "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@nationalbankbelgium/ngx-form-errors": { + "version": "file:../../dist", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.10.0", + "bundled": true + } + } + }, + "@ngtools/webpack": { + "version": "8.3.15", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.15.tgz", + "integrity": "sha512-eenlDUIlB1sjmNgioq2gFG2wt9rpgouQBOdjN/PKigglo4XvCPrJYN5XhcinL9Douy28HCTmPHo8+IjMgQChOA==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.15", + "enhanced-resolve": "4.1.0", + "rxjs": "6.4.0", + "tree-kill": "1.2.1", + "webpack-sources": "1.4.3" + } + }, + "@ngx-translate/core": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-11.0.1.tgz", + "integrity": "sha512-nBCa1ZD9fAUY/3eskP3Lql2fNg8OMrYIej1/5GRsfcutx9tG/5fZLCv9m6UCw1aS+u4uK/vXjv1ctG/FdMvaWg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "@schematics/angular": { + "version": "8.3.15", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.15.tgz", + "integrity": "sha512-SrIxJU/7cJmfQDuBSjnGUvXi0tUb5PrFYKbL+Lek8qsaicO0y738HXjmeZqLnXoMg0J/9tOeIgdydeEtPCEjoQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.15", + "@angular-devkit/schematics": "8.3.15" + } + }, + "@schematics/update": { + "version": "0.803.15", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.15.tgz", + "integrity": "sha512-wwrRU/JQRE2jNcZPAegmhvu08ZU+m3f8FoDT1Z+aO4VeqPdcMiCiP3cduL5OyK0A6tOE140JFPvYdYRBfpoelQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "8.3.15", + "@angular-devkit/schematics": "8.3.15", + "@yarnpkg/lockfile": "1.1.0", + "ini": "1.3.5", + "pacote": "9.5.5", + "rxjs": "6.4.0", + "semver": "6.3.0", + "semver-intersect": "1.4.0" + } + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.3.16.tgz", + "integrity": "sha512-Nveep4zKGby8uIvG2AEUyYOwZS8uVeHK9TgbuWYSawUDDdIgfhCKz28QzamTo//Jk7Ztt9PO3f+vzlB6a4GV1Q==", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", + "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", + "dev": true, + "requires": { + "@types/jasmine": "*" + } + }, + "@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/node": { + "version": "8.9.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.9.5.tgz", + "integrity": "sha512-jRHfWsvyMtXdbhnz5CVHxaBgnV6duZnPlQuRSo/dm/GnmikNcmZhxIES4E9OZjUmQ8C+HCl4KJux+cXN/ErGDQ==", + "dev": true + }, + "@types/q": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@types/q/-/q-0.0.32.tgz", + "integrity": "sha1-vShOV8hPEyXacCur/IKlMoGQwMU=", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.16.tgz", + "integrity": "sha512-lMC2G0ItF2xv4UCiwbJGbnJlIuUixHrioOhNGHSCsYCJ8l4t9hMCUimCytvFv7qy6AfSzRxhRHoGa+UqaqwyeA==", + "dev": true + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", + "dev": true + }, + "@types/webpack-sources": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", + "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", + "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", + "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", + "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", + "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", + "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", + "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", + "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", + "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", + "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", + "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", + "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", + "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", + "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/helper-wasm-section": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-opt": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/wast-printer": "1.8.5" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", + "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", + "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-buffer": "1.8.5", + "@webassemblyjs/wasm-gen": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", + "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-wasm-bytecode": "1.8.5", + "@webassemblyjs/ieee754": "1.8.5", + "@webassemblyjs/leb128": "1.8.5", + "@webassemblyjs/utf8": "1.8.5" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", + "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/floating-point-hex-parser": "1.8.5", + "@webassemblyjs/helper-api-error": "1.8.5", + "@webassemblyjs/helper-code-frame": "1.8.5", + "@webassemblyjs/helper-fsm": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", + "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/wast-parser": "1.8.5", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", + "dev": true + }, + "adm-zip": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", + "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "dev": true + }, + "after": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", + "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", + "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "dev": true, + "requires": { + "type-fest": "^0.5.2" + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-root-path": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz", + "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==", + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arraybuffer.slice": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", + "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "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.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.1.tgz", + "integrity": "sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw==", + "dev": true, + "requires": { + "browserslist": "^4.6.3", + "caniuse-lite": "^1.0.30000980", + "chalk": "^2.4.2", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.17", + "postcss-value-parser": "^4.0.0" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "dev": true + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "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.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "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.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "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.22.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", + "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.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.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", + "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 + } + } + }, + "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.4" + } + }, + "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.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + }, + "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" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "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.4", + "to-fast-properties": "^1.0.3" + }, + "dependencies": { + "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 + } + } + }, + "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.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "base64id": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", + "integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "blob": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", + "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "dev": true + }, + "blocking-proxy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/blocking-proxy/-/blocking-proxy-1.0.1.tgz", + "integrity": "sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "bluebird": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.1.tgz", + "integrity": "sha512-DdmyoGCleJnkbp3nkbxTLJ18rjDsE4yCggEwKNXkeV123sPNfOCYeDoeuOY+F2FrSjO1YXcTU+dsy96KMy+gcg==", + "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.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "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.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" + } + }, + "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": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "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.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": { + "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.5" + } + }, + "browserslist": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", + "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000984", + "electron-to-chromium": "^1.3.191", + "node-releases": "^1.1.25" + } + }, + "browserstack": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", + "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "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.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.2.tgz", + "integrity": "sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "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" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", + "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", + "dev": true + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000989", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", + "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "dev": true + }, + "canonical-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/canonical-path/-/canonical-path-1.0.0.tgz", + "integrity": "sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.2.3.tgz", + "integrity": "sha512-GtrxGuRf6bzHQmXWRepvsGnXpkQkVU+D2/9a7dAe4a7v1NhrfZOZ2oKf76M3nOs46fFYL8D+Q8JYA4GYeJ8Cjw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-dependency-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.2.0.tgz", + "integrity": "sha512-7p4Kn/gffhQaavNfyDFg7LS5S/UT1JAjyGd4UqR2+jzoYF02eDkj0Ec3+48TsIa4zghjLY87nQHIh/ecK9qLdw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.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" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codelyzer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-5.2.0.tgz", + "integrity": "sha512-izfUfhEOOgAizszPlEDxo71DK/C4wprZw0vkY6UWcOSTQvN1JyfXf9DXwaV7WX+/JC+hH0ShXfdtGLA9Rca7LA==", + "dev": true, + "requires": { + "app-root-path": "^2.2.1", + "aria-query": "^3.0.0", + "axobject-query": "^2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + } + } + }, + "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.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-versions": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", + "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==", + "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.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "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.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", + "dev": true, + "requires": { + "mime-db": ">= 1.40.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "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.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "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.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": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg==", + "dev": true, + "requires": { + "cacache": "^11.3.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "cacache": { + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", + "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + } + } + }, + "core-js": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.5.tgz", + "integrity": "sha512-0J3K+Par/ZydhKg8pEiTcK/9d65/nqJOzY62uMkjeBmt05fDOt/khUVjDdh8TpeIuGQDy1yLDDCjiWN/8pFIuw==" + }, + "core-js-compat": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.3.5.tgz", + "integrity": "sha512-44ZORuapx0MUht0MUk0p9lcQPh7n/LDXehimTmjCs0CYblpKZcqVd5w0OQDUDq5OQjEbazWObHDQJWvvHYPNTg==", + "dev": true, + "requires": { + "browserslist": "^4.7.2", + "semver": "^6.3.0" + }, + "dependencies": { + "browserslist": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.2.tgz", + "integrity": "sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001004", + "electron-to-chromium": "^1.3.295", + "node-releases": "^1.1.38" + } + }, + "caniuse-lite": { + "version": "1.0.30001006", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001006.tgz", + "integrity": "sha512-MXnUVX27aGs/QINz+QG1sWSLDr3P1A3Hq5EUWoIt0T7K24DuvMxZEnh3Y5aHlJW6Bz2aApJdSewdYLd8zQnUuw==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "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-selector-tokenizer": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", + "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + }, + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/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" + } + } + } + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "damerau-levenshtein": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.5.tgz", + "integrity": "sha512-CBCRqFnpu715iPmw1KrdOrzRqbdFwQTwAWyyyYS42+iAgHCuXZ+/TdMgQkUENPomxEz9z1BEzuQU2Xw0kUuAgA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-format": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", + "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", + "dev": true + }, + "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.1.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", + "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "default-require-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz", + "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=", + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.7.2.tgz", + "integrity": "sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ==", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", + "dev": true + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "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.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.296", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz", + "integrity": "sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==", + "dev": true + }, + "eligrey-classlist-js-polyfill": { + "version": "1.2.20180112", + "resolved": "https://registry.npmjs.org/eligrey-classlist-js-polyfill/-/eligrey-classlist-js-polyfill-1.2.20180112.tgz", + "integrity": "sha1-QW6kPmM8UYnSmiIBMAkgfNhnoSg=" + }, + "elliptic": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", + "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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 + }, + "encoding": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", + "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", + "dev": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "1.0.0", + "cookie": "0.3.1", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.0", + "ws": "~3.3.1" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + } + } + }, + "engine.io-parser": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", + "integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", + "dev": true, + "requires": { + "after": "0.8.2", + "arraybuffer.slice": "~0.0.7", + "base64-arraybuffer": "0.1.5", + "blob": "0.0.5", + "has-binary2": "~1.0.2" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "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 + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "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.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", + "dev": true + }, + "events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", + "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "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.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "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.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "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" + } + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.2.0.tgz", + "integrity": "sha512-+xZnaK5R8kBJrHK0/6HRlrKNamvVS5rjyuju+rnyxRGuwUJwpAMsVzUl5dz6rK8brkzjV6JpcFNjp6NqV0g1OQ==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "fileset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", + "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", + "dev": true, + "requires": { + "glob": "^7.0.3", + "minimatch": "^3.0.3" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.0.0.tgz", + "integrity": "sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.0", + "pkg-dir": "^4.1.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", + "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "dev": true, + "requires": { + "debug": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-access": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz", + "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=", + "dev": true, + "requires": { + "null-check": "^1.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "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.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.1.tgz", + "integrity": "sha512-4FRPXWETxtigtJW/gxzEDsX1LVbPAM93VleB83kZB+ellqbHMkyt2aJfuzNLRvFPnGi6bcE5SvfxgbXPeKteJw==", + "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 + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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.0" + }, + "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.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "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.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, + "handle-thing": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", + "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "dev": true + }, + "handlebars": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz", + "integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==", + "dev": true, + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "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 + } + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", + "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "dev": true, + "requires": { + "ajv": "^6.5.5", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-binary2": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", + "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "dev": true, + "requires": { + "isarray": "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": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "has-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.0" + } + }, + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "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.1", + "safe-buffer": "^5.0.1" + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "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.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", + "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.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.4.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.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "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.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "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-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "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 + }, + "inquirer": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", + "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-accessor-descriptor": { + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.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-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-data-descriptor": { + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.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" + } + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-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-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "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.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-api": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", + "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "compare-versions": "^3.4.0", + "fileset": "^2.0.3", + "istanbul-lib-coverage": "^2.0.5", + "istanbul-lib-hook": "^2.0.7", + "istanbul-lib-instrument": "^3.3.0", + "istanbul-lib-report": "^2.0.8", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^2.2.4", + "js-yaml": "^3.13.1", + "make-dir": "^2.1.0", + "minimatch": "^3.0.4", + "once": "^1.4.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + } + } + } + }, + "istanbul-instrumenter-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-instrumenter-loader/-/istanbul-instrumenter-loader-3.0.1.tgz", + "integrity": "sha512-a5SPObZgS0jB/ixaKSMdn6n/gXSrK2S6q/UfRJBT3e6gQmVjwZROTODQsYW5ZNwOu78hG62Y3fWlebaVOL0C+w==", + "dev": true, + "requires": { + "convert-source-map": "^1.5.0", + "istanbul-lib-instrument": "^1.7.3", + "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.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz", + "integrity": "sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz", + "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==", + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-instrument": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz", + "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", + "dev": true, + "requires": { + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz", + "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", + "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "dev": true, + "requires": { + "handlebars": "^4.1.2" + } + }, + "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.0.6", + "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": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", + "dev": true + }, + "jasmine-spec-reporter": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", + "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "dev": true, + "requires": { + "colors": "1.1.2" + } + }, + "jasminewd2": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/jasminewd2/-/jasminewd2-2.2.0.tgz", + "integrity": "sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4=", + "dev": true + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "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.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "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.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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.6" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jszip": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.2.tgz", + "integrity": "sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "karma": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", + "dev": true, + "requires": { + "bluebird": "^3.3.0", + "body-parser": "^1.16.1", + "braces": "^2.3.2", + "chokidar": "^2.0.3", + "colors": "^1.1.0", + "connect": "^3.6.0", + "core-js": "^2.2.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.0", + "flatted": "^2.0.0", + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "http-proxy": "^1.13.0", + "isbinaryfile": "^3.0.0", + "lodash": "^4.17.11", + "log4js": "^4.0.0", + "mime": "^2.3.1", + "minimatch": "^3.0.2", + "optimist": "^0.6.1", + "qjobs": "^1.1.4", + "range-parser": "^1.2.0", + "rimraf": "^2.6.0", + "safe-buffer": "^5.0.1", + "socket.io": "2.1.1", + "source-map": "^0.6.1", + "tmp": "0.0.33", + "useragent": "2.3.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "core-js": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "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, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": 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.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.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, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "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, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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, + "optional": 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, + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "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 + }, + "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" + } + } + } + }, + "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.0", + "which": "^1.2.1" + } + }, + "karma-coverage-istanbul-reporter": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.0.6.tgz", + "integrity": "sha512-WFh77RI8bMIKdOvI/1/IBmgnM+Q7NOLhnwG91QJrM8lW+CIXCjTzhhUsT/svLvAkLmR10uWY4RyYbHMLkTglvg==", + "dev": true, + "requires": { + "istanbul-api": "^2.1.6", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-2.0.1.tgz", + "integrity": "sha512-iuC0hmr9b+SNn1DaUD2QEYtUxkS1J+bSJSn7ejdEexs7P8EYvA1CWkEdrDQ+8jVH3AgWlCNwjYsT1chjcNW9lA==", + "dev": true, + "requires": { + "jasmine-core": "^3.3" + } + }, + "karma-jasmine-html-reporter": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.4.2.tgz", + "integrity": "sha512-7g0gPj8+9JepCNJR9WjDyQ2RkZ375jpdurYQyAYv8PorUCadepl8vrD6LmMqOGcM17cnrynBawQYZHaumgDjBw==", + "dev": true + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "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 + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "less": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", + "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "mime": "^1.4.1", + "mkdirp": "^0.5.0", + "promise": "^7.1.1", + "request": "^2.83.0", + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "less-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", + "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "loader-utils": "^1.1.0", + "pify": "^4.0.1" + } + }, + "license-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-7poZHRla+ae0eEButlwMrPpkXyhNVBf2EHePYWT0jyLnI6311/OXJkTI2sOIRungRpQgU2oDMpro5bSFPT5F0A==", + "dev": true, + "requires": { + "@types/webpack-sources": "^0.1.5", + "webpack-sources": "^1.2.0" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "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 + }, + "log4js": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.5.1.tgz", + "integrity": "sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw==", + "dev": true, + "requires": { + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.4", + "streamroller": "^1.0.6" + } + }, + "loglevel": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", + "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "make-fetch-happen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.1.tgz", + "integrity": "sha512-b4dfaMvUDR67zxUq1+GN7Ke9rH5WvGRmoHuMH7l+gmUCR2tCXFP6mpeJ9Dp+jB6z8mShRopSf1vLRBhRs8Cu5w==", + "dev": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^12.0.0", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "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-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.0" + } + }, + "material-design-icons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/material-design-icons/-/material-design-icons-3.0.1.tgz", + "integrity": "sha1-mnHEh0chjrylHlGmbaaCA4zct78=" + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "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": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "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 + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "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.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + }, + "mime-types": { + "version": "2.1.24", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", + "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "dev": true, + "requires": { + "mime-db": "1.40.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz", + "integrity": "sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "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" + } + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "move-concurrently": { + "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.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": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "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 + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", + "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "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": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "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.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.39", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.39.tgz", + "integrity": "sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "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.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==" + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true + }, + "npm-package-arg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", + "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "npm-packlist": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz", + "integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "npm-registry-fetch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.2.tgz", + "integrity": "sha512-Z0IFtPEozNdeZRPh3aHHxdG+ZRpzcbQaJLthsm3VhNf6DScicTFRHZzK82u8RsJUsUHkX+QH/zcB/5pmd20H4A==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } + } + }, + "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.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.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "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.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", + "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", + "dev": true + }, + "object-is": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", + "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "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.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.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" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", + "dev": true + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "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": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", + "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pacote": { + "version": "9.5.5", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.5.tgz", + "integrity": "sha512-jAEP+Nqj4kyMWyNpfTU/Whx1jA7jEc5cCOlurm0/0oL+v8TAp1QSsK83N7bYe+2bEdFzMAtPG5TBebjzzGV0cA==", + "dev": true, + "requires": { + "bluebird": "^3.5.3", + "cacache": "^12.0.2", + "figgy-pudding": "^3.5.1", + "get-stream": "^4.1.0", + "glob": "^7.1.3", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "minimatch": "^3.0.4", + "minipass": "^2.3.5", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.12", + "npm-pick-manifest": "^2.2.3", + "npm-registry-fetch": "^4.0.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.1", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.6.0", + "ssri": "^6.0.1", + "tar": "^4.4.8", + "unique-filename": "^1.1.1", + "which": "^1.3.1" + }, + "dependencies": { + "npm-pick-manifest": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", + "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "pako": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", + "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "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.0" + } + }, + "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.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "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.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "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.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "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" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.0.7.tgz", + "integrity": "sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "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.0" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "portfinder": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "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": "7.0.17", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", + "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-import": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", + "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + } + }, + "postcss-value-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise": { + "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.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + } + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "protractor": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz", + "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", + "dev": true, + "requires": { + "@types/q": "^0.0.32", + "@types/selenium-webdriver": "^3.0.0", + "blocking-proxy": "^1.0.0", + "browserstack": "^1.5.1", + "chalk": "^1.1.3", + "glob": "^7.0.3", + "jasmine": "2.8.0", + "jasminewd2": "^2.1.0", + "optimist": "~0.6.0", + "q": "1.4.1", + "saucelabs": "^1.5.0", + "selenium-webdriver": "3.6.0", + "source-map-support": "~0.4.0", + "webdriver-js-extender": "2.1.0", + "webdriver-manager": "^12.0.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "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.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "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.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + }, + "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.1.7", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.7.tgz", + "integrity": "sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA==", + "dev": true, + "requires": { + "adm-zip": "^0.4.9", + "chalk": "^1.1.1", + "del": "^2.2.0", + "glob": "^7.0.3", + "ini": "^1.3.4", + "minimist": "^1.2.0", + "q": "^1.4.1", + "request": "^2.87.0", + "rimraf": "^2.5.2", + "semver": "^5.3.0", + "xml2js": "^0.4.17" + } + } + } + }, + "proxy-addr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", + "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "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.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "raw-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz", + "integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "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-package-json": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.0.tgz", + "integrity": "sha512-KLhu8M1ZZNkMcrq1+0UJbR8Dii8KZUqB0Sha4mOx/bknfKI/fyrQVrG/YIt2UOtG667sD8+ee4EXMM91W9dC+A==", + "dev": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "dev": true, + "requires": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", + "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", + "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", + "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "dev": true, + "requires": { + "private": "^0.1.6" + } + }, + "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" + } + }, + "regexp.prototype.flags": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", + "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2" + } + }, + "regexpu-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", + "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.1.0", + "regjsgen": "^0.5.0", + "regjsparser": "^0.6.0", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.1.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", + "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "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.0" + } + }, + "request": { + "version": "2.88.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", + "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "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-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "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 + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz", + "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.22.9.tgz", + "integrity": "sha512-FzU1X2V8DlnqabrL4u7OBwD2vcOzNMongEJEx3xMEhWY/v26FFR3aG0hyeu2T965sfR0E9ufJwmG+Qjz78vFPQ==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.2.0.tgz", + "integrity": "sha512-h8yUWaWtsbuIiOCgR9fd9c2lRXZ2uG+h8Dzg/AGNj+Hg/3TO8+BBAW9mEP+mh8ei+qBKqSJ0F1FLlYjNBc61OA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "saucelabs": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz", + "integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==", + "dev": true, + "requires": { + "https-proxy-agent": "^2.2.1" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "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.3", + "rimraf": "^2.5.4", + "tmp": "0.0.30", + "xml2js": "^0.4.17" + }, + "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.1" + } + } + } + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-dsl": { + "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.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "semver-intersect": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz", + "integrity": "sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ==", + "dev": true, + "requires": { + "semver": "^5.0.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "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.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "serve-index": { + "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.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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.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-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.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "smart-buffer": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.2.tgz", + "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "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.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "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.0", + "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.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "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.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", + "dev": true, + "requires": { + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "debug": { + "version": "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 + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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.0.1" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "socks": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", + "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "4.0.2" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-loader": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-0.2.4.tgz", + "integrity": "sha512-OU6UJUty+i2JDpTItnizPrlpOIBLmQbWMuBg9q5bVtnHACqw1tn9nNwqJLbv0/00JjnJb/Ee5g5WS5vrRv7zIQ==", + "dev": true, + "requires": { + "async": "^2.5.0", + "loader-utils": "^1.1.0" + } + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "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 + }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "dev": true + }, + "spdx-expression-parse": { + "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.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "dev": true + }, + "spdy": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", + "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "speed-measure-webpack-plugin": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "split-string": { + "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.0" + } + }, + "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.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.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.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "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 + }, + "streamroller": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.6.tgz", + "integrity": "sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg==", + "dev": true, + "requires": { + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.14" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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.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 + }, + "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 + }, + "style-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.0.tgz", + "integrity": "sha512-B0dOCFwv7/eY31a5PCieNwMgMhVGFe9w+rh7s/Bx8kfFkrth9zfTZquoYvdw8URgiqxObQKcpW51Ugz1HjfdZw==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "schema-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.5.0.tgz", + "integrity": "sha512-32ISrwW2scPXHUSusP8qMg5dLUawKkyV+/qIEV9JdXKx+rsM6mi8vZY8khg2M69Qom16rtroWXD3Ybtiws38gQ==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" + } + } + } + }, + "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.x", + "debug": "*", + "glob": "7.0.x", + "mkdirp": "0.5.x", + "sax": "0.5.x", + "source-map": "0.1.x" + }, + "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.4", + "inherits": "2", + "minimatch": "^3.0.2", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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": ">=0.0.4" + } + } + } + }, + "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.0.2", + "lodash.clonedeep": "^4.5.0", + "when": "~3.6.x" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "terser": { + "version": "4.3.8", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.3.8.tgz", + "integrity": "sha512-otmIRlRVmLChAWsnSFNO0Bfk6YySuBp6G9qrHiJwlLDd4mxe2ta4sjI7TzIR+W1nBMjilzrMcPOz9pSusgx3hQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz", + "integrity": "sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^1.7.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "through": { + "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.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tmp": { + "version": "0.0.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": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "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.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "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": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", + "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "dev": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "tree-kill": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", + "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", + "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 + }, + "ts-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-7.0.1.tgz", + "integrity": "sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" + } + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tslint": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.15.0.tgz", + "integrity": "sha512-6bIEujKR21/3nyeoX2uBnE8s+tMXCQXhqMmaIPJpHmXJoBJPTLcI7/VHRtUwMhnLVdwLqqY3zmd8Dxqa5CVdJA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.13.0", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "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.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "dev": true + }, + "uglify-js": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.5.tgz", + "integrity": "sha512-7L3W+Npia1OCr5Blp4/Vw83tK1mu5gnoIURtT1fUVfQ3Kf8WStWV6NJz0fdoBJZls0KlweruRTLVe6XLafmy5g==", + "dev": true, + "optional": true, + "requires": { + "commander": "~2.20.3", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "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 + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", + "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", + "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universal-analytics": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", + "integrity": "sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw==", + "dev": true, + "requires": { + "debug": "^3.0.0", + "request": "^2.88.0", + "uuid": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "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.0" + }, + "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.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "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-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "useragent": { + "version": "2.3.0", + "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.x", + "tmp": "0.0.x" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "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.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", + "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", + "dev": true + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", + "dev": true + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": 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.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.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, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "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, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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, + "optional": 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, + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webdriver-js-extender": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", + "integrity": "sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==", + "dev": true, + "requires": { + "@types/selenium-webdriver": "^3.0.0", + "selenium-webdriver": "^3.0.1" + } + }, + "webpack": { + "version": "4.39.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.39.2.tgz", + "integrity": "sha512-AKgTfz3xPSsEibH00JfZ9sHXGUwIQ6eZ9tLN8+VLzachk1Cw2LVmy+4R7ZiwTa9cZZ15tzySjeMui/UnSCAZhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.8.5", + "@webassemblyjs/helper-module-context": "1.8.5", + "@webassemblyjs/wasm-edit": "1.8.5", + "@webassemblyjs/wasm-parser": "1.8.5", + "acorn": "^6.2.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" + } + }, + "webpack-core": { + "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.7", + "source-map": "~0.4.1" + }, + "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": ">=0.0.4" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", + "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.9.0.tgz", + "integrity": "sha512-E6uQ4kRrTX9URN9s/lIbqTAztwEPdvzVrcmHE8EQ9YnuT9J8Es5Wrd8n9BKg1a0oZ5EgEke/EQFgUsp18dSTBw==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.2.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.4", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.25", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.19", + "sockjs-client": "1.4.0", + "spdy": "^4.0.1", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "12.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "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" + } + }, + "chownr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true, + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true, + "optional": 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.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", + "dev": true, + "optional": true, + "requires": { + "debug": "^4.1.0", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.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, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "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, + "optional": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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, + "optional": 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, + "optional": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "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.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "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" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", + "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "webpack-subresource-integrity": { + "version": "1.1.0-rc.6", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-1.1.0-rc.6.tgz", + "integrity": "sha512-Az7y8xTniNhaA0620AV1KPwWOqawurVVDzQSpPAeR5RwNbL91GoBSJAAo9cfd+GiFHwsS5bbHepBw1e6Hzxy4w==", + "dev": true, + "requires": { + "webpack-core": "^0.6.8" + } + }, + "websocket-driver": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", + "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.4.0 <0.4.11", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "dev": true + }, + "when": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/when/-/when-3.6.4.tgz", + "integrity": "sha1-RztRfsFZ4rhQBUl6E5g/CVQS404=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "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.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "worker-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/worker-plugin/-/worker-plugin-3.2.0.tgz", + "integrity": "sha512-W5nRkw7+HlbsEt3qRP6MczwDDISjiRj2GYt9+bpe8A2La00TmJdwzG5bpdMXhRt1qcWmwAvl1TiKaHRa+XDS9Q==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xml2js": { + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.22.tgz", + "integrity": "sha512-MWTbxAQqclRSTnehWWe5nMKzI3VmJ8ltiJEco8akcC6j3miOhjjfzKum5sId+CWhfxdOs/1xauYr8/ZDBtQiRw==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "util.promisify": "~1.0.0", + "xmlbuilder": "~11.0.0" + }, + "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": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "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": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "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.9.1", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.9.1.tgz", + "integrity": "sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag==" + } + } +} diff --git a/demo-app/ng8/package.json b/demo-app/ng8/package.json new file mode 100644 index 0000000..42e7287 --- /dev/null +++ b/demo-app/ng8/package.json @@ -0,0 +1,58 @@ +{ + "name": "demo-app", + "version": "0.0.0", + "scripts": { + "clean": "npx rimraf ./dist ./reports", + "clean:modules": "npx rimraf ./node_modules package-lock.json", + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "test:ci": "ng test --watch=false --browsers=ChromeHeadless", + "lint": "ng lint", + "e2e": "ng e2e" + }, + "private": true, + "dependencies": { + "@angular/animations": "^8.2.12", + "@angular/cdk": "^8.2.3", + "@angular/common": "^8.2.12", + "@angular/compiler": "^8.2.12", + "@angular/core": "^8.2.12", + "@angular/forms": "^8.2.12", + "@angular/material": "^8.2.3", + "@angular/platform-browser": "^8.2.12", + "@angular/platform-browser-dynamic": "^8.2.12", + "@angular/router": "^8.2.12", + "@nationalbankbelgium/ngx-form-errors": "../../dist", + "@ngx-translate/core": "^11.0.1", + "core-js": "^3.3.5", + "eligrey-classlist-js-polyfill": "1.2.20180112", + "material-design-icons": "^3.0.1", + "normalize.css": "^8.0.1", + "rxjs": "^6.4.0", + "tslib": "~1.10.0", + "zone.js": "~0.9.1" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^0.803.15", + "@angular/cli": "^8.3.15", + "@angular/compiler-cli": "^8.2.12", + "@angular/language-service": "^8.2.12", + "@types/jasmine": "^3.3.8", + "@types/jasminewd2": "^2.0.3", + "@types/node": "^8.9.4", + "codelyzer": "^5.0.0", + "jasmine-core": "~3.4.0", + "jasmine-spec-reporter": "~4.2.1", + "karma": "^4.1.0", + "karma-chrome-launcher": "^2.2.0", + "karma-coverage-istanbul-reporter": "~2.0.1", + "karma-jasmine": "~2.0.1", + "karma-jasmine-html-reporter": "^1.4.0", + "protractor": "^5.4.0", + "ts-node": "~7.0.0", + "tslint": "^5.15.0", + "typescript": "~3.5.3" + } +} diff --git a/demo-app/ng8/src/app/app-routing.module.ts b/demo-app/ng8/src/app/app-routing.module.ts new file mode 100644 index 0000000..7dc1804 --- /dev/null +++ b/demo-app/ng8/src/app/app-routing.module.ts @@ -0,0 +1,16 @@ +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; +import { NgxFormsExampleComponent, ReactiveFormsExampleComponent, TemplateDrivenFormsExampleComponent } from "./pages"; + +const routes: Routes = [ + { path: "", redirectTo: "/template-driven-forms", pathMatch: "full" }, + { path: "reactive-forms", component: ReactiveFormsExampleComponent }, + { path: "template-driven-forms", component: TemplateDrivenFormsExampleComponent }, + { path: "ngx-form-errors", component: NgxFormsExampleComponent } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule {} diff --git a/demo-app/ng8/src/app/app.component.html b/demo-app/ng8/src/app/app.component.html new file mode 100644 index 0000000..23fcd35 --- /dev/null +++ b/demo-app/ng8/src/app/app.component.html @@ -0,0 +1,21 @@ + + +

Ngx-Form-Errors

+

 - Validation messages in Reactive Forms made easy

+
+ + + +
+ + + + + + + + + + diff --git a/demo-app/ng8/src/app/app.component.scss b/demo-app/ng8/src/app/app.component.scss new file mode 100644 index 0000000..4ae3688 --- /dev/null +++ b/demo-app/ng8/src/app/app.component.scss @@ -0,0 +1,25 @@ +mat-toolbar { + .slogan { + font-size: 16px; + font-style: italic; + line-height: normal; + } + + .spacer { + flex: 1 1 auto; + } +} + +mat-sidenav-container { + flex: 100% 1; + + mat-sidenav { + max-height: 100%; + overflow-y: auto; + } + + mat-sidenav-content { + max-height: 100%; + overflow-y: auto; + } +} diff --git a/demo-app/ng8/src/app/app.component.spec.ts b/demo-app/ng8/src/app/app.component.spec.ts new file mode 100644 index 0000000..59314db --- /dev/null +++ b/demo-app/ng8/src/app/app.component.spec.ts @@ -0,0 +1,79 @@ +import { NO_ERRORS_SCHEMA } from "@angular/core"; +import { async, ComponentFixture, TestBed } from "@angular/core/testing"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { NoopAnimationsModule } from "@angular/platform-browser/animations"; +import { BrowserDynamicTestingModule } from "@angular/platform-browser-dynamic/testing"; +import { MatButtonToggleModule } from "@angular/material/button-toggle"; +import { MatCardModule } from "@angular/material/card"; +import { MatFormFieldModule } from "@angular/material/form-field"; +import { MatInputModule } from "@angular/material/input"; +import { MatListModule } from "@angular/material/list"; +import { MatSidenavModule } from "@angular/material/sidenav"; +import { MatToolbarModule } from "@angular/material/toolbar"; +import { TranslateModule } from "@ngx-translate/core"; +import { NgxFormErrorsModule } from "@nationalbankbelgium/ngx-form-errors"; +import { AppComponent } from "./app.component"; +import { AppRoutingModule } from "./app-routing.module"; +import { CardComponent, LanguageSelectorComponent, NavigationComponent, SimpleFormErrorComponent } from "./components"; +import { NgxFormsExampleComponent, ReactiveFormsExampleComponent, TemplateDrivenFormsExampleComponent } from "./pages"; + +describe("AppComponent", () => { + let fixture: ComponentFixture; + + beforeEach(async(() => { + return TestBed.configureTestingModule({ + declarations: [ + AppComponent, + CardComponent, + NavigationComponent, + LanguageSelectorComponent, + NgxFormsExampleComponent, + ReactiveFormsExampleComponent, + TemplateDrivenFormsExampleComponent, + SimpleFormErrorComponent + ], + imports: [ + FormsModule, + ReactiveFormsModule, + MatButtonToggleModule, + MatCardModule, + MatFormFieldModule, + MatInputModule, + MatListModule, + MatSidenavModule, + MatToolbarModule, + AppRoutingModule, + NoopAnimationsModule, + NgxFormErrorsModule.forRoot({ + formErrorComponent: SimpleFormErrorComponent + }), + TranslateModule.forRoot() + ], + schemas: [NO_ERRORS_SCHEMA] // don't want to import mat-icon in these tests + }) + .overrideModule(BrowserDynamicTestingModule, { + set: { + entryComponents: [SimpleFormErrorComponent] + } + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + }); + + it("should create the app", () => { + const app: AppComponent = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + }); + + it("should render title in a h1 tag", () => { + fixture.detectChanges(); + const compiled: HTMLElement = fixture.debugElement.nativeElement; + const h1Element = compiled.querySelector("h1"); + expect(h1Element).toBeTruthy(); + expect(h1Element.textContent).toContain("Ngx-Form-Errors"); + }); +}); diff --git a/demo-app/ng8/src/app/app.component.ts b/demo-app/ng8/src/app/app.component.ts new file mode 100644 index 0000000..aa0eab2 --- /dev/null +++ b/demo-app/ng8/src/app/app.component.ts @@ -0,0 +1,41 @@ +import { Component, OnDestroy, ViewChild } from "@angular/core"; +import { Event, NavigationEnd, Router } from "@angular/router"; +import { MatSidenav } from "@angular/material/sidenav"; +import { BreakpointObserver, BreakpointState } from "@angular/cdk/layout"; +import { of, Subscription } from "rxjs"; + +const MEDIA_MATCH = "(max-width: 600px)"; + +@Component({ + selector: "app-root", + templateUrl: "./app.component.html", + styleUrls: ["./app.component.scss"] +}) +export class AppComponent implements OnDestroy { + @ViewChild("sidenav", { static: false }) // see https://angular.io/guide/static-query-migration + private _sidenav!: MatSidenav; + + public mobileQueryMatches = false; + + private _routerSubscription: Subscription; + private _mediaQuerySubscription: Subscription; + + public constructor(private _router: Router, public breakpointObserver: BreakpointObserver) { + this.mobileQueryMatches = this.breakpointObserver.isMatched(MEDIA_MATCH); + + this._mediaQuerySubscription = this.breakpointObserver.observe([MEDIA_MATCH]).subscribe((state: BreakpointState) => { + this.mobileQueryMatches = state.matches; + }); + + this._routerSubscription = this._router.events.subscribe((value: Event) => { + if (value instanceof NavigationEnd && this._sidenav.mode === "over") { + of(this._sidenav.close()).subscribe(); + } + }); + } + + public ngOnDestroy(): void { + this._mediaQuerySubscription.unsubscribe(); + this._routerSubscription.unsubscribe(); + } +} diff --git a/demo-app/ng8/src/app/app.module.ts b/demo-app/ng8/src/app/app.module.ts new file mode 100644 index 0000000..4e954ed --- /dev/null +++ b/demo-app/ng8/src/app/app.module.ts @@ -0,0 +1,95 @@ +import { BrowserModule, DomSanitizer } from "@angular/platform-browser"; +import { NgModule } from "@angular/core"; +import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; +import { FormsModule, ReactiveFormsModule } from "@angular/forms"; +import { HttpClientModule } from "@angular/common/http"; +import { TranslateModule, TranslateService } from "@ngx-translate/core"; +import { MatButtonModule } from "@angular/material/button"; +import { MatButtonToggleModule } from "@angular/material/button-toggle"; +import { MatCardModule } from "@angular/material/card"; +import { MatFormFieldModule } from "@angular/material/form-field"; +import { MatInputModule } from "@angular/material/input"; +import { MatListModule } from "@angular/material/list"; +import { MatSidenavModule } from "@angular/material/sidenav"; +import { MatGridListModule } from "@angular/material/grid-list"; +import { MatIconModule, MatIconRegistry } from "@angular/material/icon"; +import { MatToolbarModule } from "@angular/material/toolbar"; +import { NgxFormErrorsMessageService, NgxFormErrorsModule } from "@nationalbankbelgium/ngx-form-errors"; +import { AppComponent } from "./app.component"; +import { initializeTranslation } from "./translation.config"; +import { AppRoutingModule } from "./app-routing.module"; +import { + CardComponent, + LanguageSelectorComponent, + NavigationComponent, + SimpleFormErrorComponent, + TranslatedFormErrorComponent +} from "./components"; +import { NgxFormsExampleComponent, ReactiveFormsExampleComponent, TemplateDrivenFormsExampleComponent } from "./pages"; + +/* tslint:disable:no-hardcoded-credentials */ +@NgModule({ + declarations: [ + AppComponent, + LanguageSelectorComponent, + SimpleFormErrorComponent, + TranslatedFormErrorComponent, + ReactiveFormsExampleComponent, + NgxFormsExampleComponent, + TemplateDrivenFormsExampleComponent, + NavigationComponent, + CardComponent + ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + AppRoutingModule, + FormsModule, + HttpClientModule, + MatButtonModule, + MatButtonToggleModule, + MatCardModule, + MatFormFieldModule, + MatGridListModule, + MatInputModule, + MatToolbarModule, + MatListModule, + MatSidenavModule, + MatIconModule, + ReactiveFormsModule, + TranslateModule.forRoot(), + NgxFormErrorsModule.forRoot({ + formErrorComponent: TranslatedFormErrorComponent + }) + ], + exports: [LanguageSelectorComponent], + providers: [], + entryComponents: [SimpleFormErrorComponent, TranslatedFormErrorComponent], + bootstrap: [AppComponent] +}) +export class AppModule { + public constructor( + private translateService: TranslateService, + private errorMessageService: NgxFormErrorsMessageService, + iconRegistry: MatIconRegistry, + sanitizer: DomSanitizer + ) { + initializeTranslation(this.translateService); + + iconRegistry.addSvgIcon("github", sanitizer.bypassSecurityTrustResourceUrl("assets/img/github-icon.svg")); + + this.errorMessageService.addErrorMessages({ + required: "DEMO.FORM_VALIDATION.WITH_NGX_FORM_ERRORS.REQUIRED", + "matchingPasswords.password.required": "DEMO.FORM_VALIDATION.WITH_NGX_FORM_ERRORS.PASSWORD_REQUIRED", + minlength: "DEMO.FORM_VALIDATION.WITH_NGX_FORM_ERRORS.PASSWORD.MIN_LENGTH", + maxlength: "DEMO.FORM_VALIDATION.WITH_NGX_FORM_ERRORS.PASSWORD.MAX_LENGTH", + pattern: "DEMO.FORM_VALIDATION.WITH_NGX_FORM_ERRORS.PASSWORD.PATTERN" + }); + + this.errorMessageService.addFieldNames({ + username: "DEMO.FIELDS.USER_NAME", + "matchingPasswords.password": "not used, the alias defined via the directive takes precedence over this", + "matchingPasswords.confirmPassword": "DEMO.FIELDS.CONFIRM_PASSWORD" + }); + } +} diff --git a/demo-app/ng8/src/app/components/card/card.component.html b/demo-app/ng8/src/app/components/card/card.component.html new file mode 100644 index 0000000..42620e9 --- /dev/null +++ b/demo-app/ng8/src/app/components/card/card.component.html @@ -0,0 +1,3 @@ + + + diff --git a/demo-app/ng8/src/app/components/card/card.component.scss b/demo-app/ng8/src/app/components/card/card.component.scss new file mode 100644 index 0000000..e61ec8f --- /dev/null +++ b/demo-app/ng8/src/app/components/card/card.component.scss @@ -0,0 +1,5 @@ +:host mat-card { + box-sizing: border-box; + width: 100%; + min-height: 100%; +} diff --git a/demo-app/ng8/src/app/components/card/card.component.ts b/demo-app/ng8/src/app/components/card/card.component.ts new file mode 100644 index 0000000..39ebfd3 --- /dev/null +++ b/demo-app/ng8/src/app/components/card/card.component.ts @@ -0,0 +1,46 @@ +import { Component, HostBinding, Input } from "@angular/core"; + +@Component({ + selector: "app-card", + templateUrl: "./card.component.html", + styleUrls: ["./card.component.scss"] +}) +export class CardComponent { + @HostBinding("class.app-color-primary") + public primaryColor = false; + @HostBinding("class.app-color-accent") + public accentColor = false; + @HostBinding("class.app-color-warning") + public warningColor = false; + @HostBinding("class.app-color-success") + public successColor = false; + + @Input() + public set color(color: "primary" | "accent" | "warning" | "success") { + this.primaryColor = false; + this.accentColor = false; + this.warningColor = false; + this.successColor = false; + + switch (color) { + case "primary": + this.primaryColor = true; + break; + case "accent": + this.accentColor = true; + break; + case "warning": + this.warningColor = true; + break; + case "success": + this.successColor = true; + break; + default: + break; + } + } + + public constructor() { + /*Do Nothing*/ + } +} diff --git a/demo-app/ng8/src/app/components/card/card.theme.scss b/demo-app/ng8/src/app/components/card/card.theme.scss new file mode 100644 index 0000000..7a9a666 --- /dev/null +++ b/demo-app/ng8/src/app/components/card/card.theme.scss @@ -0,0 +1,27 @@ +@mixin card-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + $warning: map-get($theme, warn); + $success: map-get($theme, success); + + app-card.app-color-primary mat-card { + background-color: mat-color($primary, 500); + color: mat-contrast($primary, 500); + } + + app-card.app-color-accent mat-card { + background-color: mat-color($accent, 500); + color: mat-contrast($accent, 500); + } + + app-card.app-color-warning mat-card { + background-color: mat-color($warning, 500); + color: mat-contrast($warning, 500); + } + + app-card.app-color-success mat-card { + /*Themes do not have a success map by default*/ + background-color: mat-color($success, 500); + color: mat-contrast($success, 500); + } +} diff --git a/demo-app/ng8/src/app/components/card/index.ts b/demo-app/ng8/src/app/components/card/index.ts new file mode 100644 index 0000000..8151bac --- /dev/null +++ b/demo-app/ng8/src/app/components/card/index.ts @@ -0,0 +1 @@ +export * from "./card.component"; diff --git a/demo-app/ng8/src/app/components/index.ts b/demo-app/ng8/src/app/components/index.ts new file mode 100644 index 0000000..8b7e4e2 --- /dev/null +++ b/demo-app/ng8/src/app/components/index.ts @@ -0,0 +1,5 @@ +export * from "./card"; +export * from "./language-selector"; +export * from "./navigation"; +export * from "./simple-form-error"; +export * from "./translated-form-error"; diff --git a/demo-app/ng8/src/app/components/language-selector/index.ts b/demo-app/ng8/src/app/components/language-selector/index.ts new file mode 100644 index 0000000..8cc6a9b --- /dev/null +++ b/demo-app/ng8/src/app/components/language-selector/index.ts @@ -0,0 +1 @@ +export * from "./language-selector.component"; diff --git a/demo-app/ng8/src/app/components/language-selector/language-selector.component.html b/demo-app/ng8/src/app/components/language-selector/language-selector.component.html new file mode 100644 index 0000000..8012f6d --- /dev/null +++ b/demo-app/ng8/src/app/components/language-selector/language-selector.component.html @@ -0,0 +1,12 @@ + + + {{ language | uppercase }} + + diff --git a/demo-app/ng8/src/app/components/language-selector/language-selector.component.scss b/demo-app/ng8/src/app/components/language-selector/language-selector.component.scss new file mode 100644 index 0000000..01481a1 --- /dev/null +++ b/demo-app/ng8/src/app/components/language-selector/language-selector.component.scss @@ -0,0 +1,9 @@ +:host mat-button-toggle-group { + box-sizing: border-box; + width: 100%; + border-radius: 0; + + mat-button-toggle.accent { + flex: 1; + } +} diff --git a/demo-app/ng8/src/app/components/language-selector/language-selector.component.ts b/demo-app/ng8/src/app/components/language-selector/language-selector.component.ts new file mode 100644 index 0000000..debed9d --- /dev/null +++ b/demo-app/ng8/src/app/components/language-selector/language-selector.component.ts @@ -0,0 +1,80 @@ +import { Component, HostBinding, OnDestroy, OnInit } from "@angular/core"; +import { Subscription } from "rxjs"; +import { LangChangeEvent, TranslateService } from "@ngx-translate/core"; + +/** + * Name of the component + */ +const componentName = "language-selector"; + +/** + * Component to select the application's language from a list of available languages passed as parameter. + */ +@Component({ + selector: "app-language-selector", + templateUrl: "./language-selector.component.html", + styleUrls: ["./language-selector.component.scss"] +}) +export class LanguageSelectorComponent implements OnInit, OnDestroy { + @HostBinding("class") + public cssClass: string = componentName; + + /** + * The currently selected language + */ + public selectedLanguage: string; + + /** + * A reference to the translateService subscription, needed to unsubscribe upon destroy. + */ + private languageChangeSubscription: Subscription; + + public supportedLanguages: string[] = ["en", "fr", "nl"]; + + /** + * Class constructor + * @param translateService - the translation service of the application + */ + public constructor(protected translateService: TranslateService) { + this.selectedLanguage = this.translateService.currentLang; + + this.languageChangeSubscription = this.translateService.onLangChange.subscribe( + (event: LangChangeEvent) => (this.selectedLanguage = event.lang), + () => console.error(componentName + ": an error occurred getting the current language.") + ); + } + + /** + * Component lifecycle hook + */ + public ngOnInit(): void { + console.log(componentName + ": controller initialized"); + } + + /** + * Component lifecycle hook + */ + public ngOnDestroy(): void { + if (this.languageChangeSubscription) { + this.languageChangeSubscription.unsubscribe(); + } + } + + /** + * Change the current language based on the selection made by the user + */ + public changeLanguage(language: string): void { + if (this.selectedLanguage !== language) { + this.selectedLanguage = language; + + this.translateService.use(language); + } + } + + /** + * @ignore + */ + public trackLanguage(index: number): number { + return index; + } +} diff --git a/demo-app/ng8/src/app/components/language-selector/language-selector.theme.scss b/demo-app/ng8/src/app/components/language-selector/language-selector.theme.scss new file mode 100644 index 0000000..1351110 --- /dev/null +++ b/demo-app/ng8/src/app/components/language-selector/language-selector.theme.scss @@ -0,0 +1,20 @@ +@mixin language-selector-theme($theme) { + $primary: map-get($theme, primary); + + .language-selector mat-button-toggle-group mat-button-toggle { + &.active { + &, + &:hover, + &:active { + background-color: mat-color($primary, 500); + color: mat-contrast($primary, 500); + } + } + + &:hover, + &:focus { + background-color: mat-color($primary, 100); + color: mat-contrast($primary, 100); + } + } +} diff --git a/demo-app/ng8/src/app/components/navigation/index.ts b/demo-app/ng8/src/app/components/navigation/index.ts new file mode 100644 index 0000000..01572aa --- /dev/null +++ b/demo-app/ng8/src/app/components/navigation/index.ts @@ -0,0 +1 @@ +export * from "./navigation.component"; diff --git a/demo-app/ng8/src/app/components/navigation/navigation.component.html b/demo-app/ng8/src/app/components/navigation/navigation.component.html new file mode 100644 index 0000000..9aaa995 --- /dev/null +++ b/demo-app/ng8/src/app/components/navigation/navigation.component.html @@ -0,0 +1,5 @@ + + Template Driven Forms + Reactive Forms + Ngx Form Errors + diff --git a/demo-app/ng8/src/app/components/navigation/navigation.component.scss b/demo-app/ng8/src/app/components/navigation/navigation.component.scss new file mode 100644 index 0000000..26f19b6 --- /dev/null +++ b/demo-app/ng8/src/app/components/navigation/navigation.component.scss @@ -0,0 +1,7 @@ +:host mat-nav-list { + padding: 0; + + a { + outline: none; + } +} diff --git a/demo-app/ng8/src/app/components/navigation/navigation.component.ts b/demo-app/ng8/src/app/components/navigation/navigation.component.ts new file mode 100644 index 0000000..80fa6fc --- /dev/null +++ b/demo-app/ng8/src/app/components/navigation/navigation.component.ts @@ -0,0 +1,17 @@ +import { Component, HostBinding } from "@angular/core"; + +const componentName = "navigation"; + +@Component({ + selector: "app-navigation", + templateUrl: "./navigation.component.html", + styleUrls: ["./navigation.component.scss"] +}) +export class NavigationComponent { + @HostBinding("class") + public cssClass: string = componentName; + + public constructor() { + /*Do Nothing*/ + } +} diff --git a/demo-app/ng8/src/app/components/navigation/navigation.theme.scss b/demo-app/ng8/src/app/components/navigation/navigation.theme.scss new file mode 100644 index 0000000..3eae7b0 --- /dev/null +++ b/demo-app/ng8/src/app/components/navigation/navigation.theme.scss @@ -0,0 +1,19 @@ +@mixin app-navigation-theme($theme) { + $primary: map-get($theme, primary); + $accent: map-get($theme, accent); + .navigation mat-nav-list a.mat-list-item { + &.active { + &, + &:hover, + &:active { + background-color: mat-color($primary, 500); + color: mat-contrast($primary, 500); + } + } + + &:hover { + background-color: mat-color($primary, 100); + color: mat-contrast($primary, 100); + } + } +} diff --git a/demo-app/ng8/src/app/components/simple-form-error/index.ts b/demo-app/ng8/src/app/components/simple-form-error/index.ts new file mode 100644 index 0000000..5236289 --- /dev/null +++ b/demo-app/ng8/src/app/components/simple-form-error/index.ts @@ -0,0 +1 @@ +export * from "./simple-form-error.component"; diff --git a/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.html b/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.html new file mode 100644 index 0000000..08ffa07 --- /dev/null +++ b/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.html @@ -0,0 +1 @@ +
{{ error.message }}
diff --git a/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.ts b/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.ts new file mode 100644 index 0000000..e73b3e3 --- /dev/null +++ b/demo-app/ng8/src/app/components/simple-form-error/simple-form-error.component.ts @@ -0,0 +1,29 @@ +import { Component, HostBinding } from "@angular/core"; +import { Observable } from "rxjs"; +import { NgxFormErrorComponent, NgxFormFieldError } from "@nationalbankbelgium/ngx-form-errors"; + +@Component({ + selector: "app-simple-form-error", + templateUrl: "./simple-form-error.component.html" +}) +export class SimpleFormErrorComponent implements NgxFormErrorComponent { + @HostBinding("class") + public cssClass = "simple-form-error"; + + public errors: NgxFormFieldError[] = []; + public errors$!: Observable; + + public constructor() { + /* empty constructor */ + } + + public subscribeToErrors(): void { + this.errors$.subscribe((errors: NgxFormFieldError[]) => { + this.errors = errors; + }); + } + + public trackError(index: number): number { + return index; + } +} diff --git a/demo-app/ng8/src/app/components/translated-form-error/index.ts b/demo-app/ng8/src/app/components/translated-form-error/index.ts new file mode 100644 index 0000000..4fad8db --- /dev/null +++ b/demo-app/ng8/src/app/components/translated-form-error/index.ts @@ -0,0 +1 @@ +export * from "./translated-form-error.component"; diff --git a/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.html b/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.html new file mode 100644 index 0000000..5b6869f --- /dev/null +++ b/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.html @@ -0,0 +1 @@ + {{ error.message | translate: error.params }} diff --git a/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.ts b/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.ts new file mode 100644 index 0000000..548f50e --- /dev/null +++ b/demo-app/ng8/src/app/components/translated-form-error/translated-form-error.component.ts @@ -0,0 +1,51 @@ +import { Component, HostBinding, OnInit } from "@angular/core"; +import { LangChangeEvent, TranslateService } from "@ngx-translate/core"; +import { Observable } from "rxjs"; +import { NgxFormErrorComponent, NgxFormFieldError } from "@nationalbankbelgium/ngx-form-errors"; + +@Component({ + selector: "app-translated-form-error", + templateUrl: "./translated-form-error.component.html" +}) +export class TranslatedFormErrorComponent implements NgxFormErrorComponent, OnInit { + @HostBinding("class") + public cssClass = "translated-form-error"; + + public errors: NgxFormFieldError[] = []; + public errors$!: Observable; + public fieldName = "undefined"; + + public constructor(public translateService: TranslateService) {} + + public ngOnInit(): void { + this.translateService.onLangChange.subscribe((_ev: LangChangeEvent) => { + this.translateFieldName(); + }); + } + + public subscribeToErrors(): void { + this.errors$.subscribe((errors: NgxFormFieldError[]) => { + this.errors = errors; + + if (errors.length) { + // the formField can be retrieved from the "fieldName" param of any of the errors + this.fieldName = errors[0].params.fieldName; + this.translateFieldName(); + } + }); + } + + public translateFieldName(): void { + for (const error of this.errors) { + error.params = { ...error.params, fieldName: this.translateService.instant(this.fieldName) }; + } + } + + public getErrorClass(): string { + return this.errors.length > 2 ? "maximum-height" : "small-height"; + } + + public trackError(index: number): number { + return index; + } +} diff --git a/demo-app/ng8/src/app/pages/index.ts b/demo-app/ng8/src/app/pages/index.ts new file mode 100644 index 0000000..16da068 --- /dev/null +++ b/demo-app/ng8/src/app/pages/index.ts @@ -0,0 +1,3 @@ +export * from "./ngx-forms-example"; +export * from "./reactive-forms-example"; +export * from "./template-driven-forms-example"; diff --git a/demo-app/ng8/src/app/pages/ngx-forms-example/index.ts b/demo-app/ng8/src/app/pages/ngx-forms-example/index.ts new file mode 100644 index 0000000..5cc334e --- /dev/null +++ b/demo-app/ng8/src/app/pages/ngx-forms-example/index.ts @@ -0,0 +1 @@ +export * from "./ngx-forms-example.component"; diff --git a/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.html b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.html new file mode 100644 index 0000000..9468c50 --- /dev/null +++ b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.html @@ -0,0 +1,145 @@ +
+

Reactive Forms with NgxFormErrors

+ +
+
+ + + + + + + + + +
+ + + + + + + + + + + + + +
+
+ + + + + + +
+ + + + Username + +
Has errors: {{ usernameField.hasErrors }}
+
Has 'required' error: {{ usernameField.hasError("required") }}
+
Is touched? {{ usernameField.hasState("touched") }}
+
+ 'required' error: +
{{ usernameField.getError("required") | json }}
+
+
+ Errors: +
{{ usernameField.errors | json }}
+
+
+
+ + + Password + +
Has errors: {{ passwordField.hasErrors }}
+
Has 'pattern' error: {{ passwordField.hasError("pattern") }}
+
Is touched? {{ passwordField.hasState("touched") }}
+
+ 'pattern' error: +
{{ passwordField.getError("pattern") | json }}
+
+
+ Errors: +
{{ passwordField.errors | json }}
+
+
+
+ + + Confirm password + +
Has errors: {{ confirmPasswordField.hasErrors }}
+
Has 'required' error: {{ confirmPasswordField.hasError("required") }}
+
Is touched? {{ confirmPasswordField.hasState("touched") }}
+
+ 'required' error: +
{{ confirmPasswordField.getError("required") | json }}
+
+
+ Errors: +
{{ confirmPasswordField.errors | json }}
+
+
+
+
+ + + + No validation errors + + + +
    +
  • + +
  • + +
  • + +
  • + +
  • + +
  • +
+
+
+
+
diff --git a/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss new file mode 100644 index 0000000..4c2c5c6 --- /dev/null +++ b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.scss @@ -0,0 +1,75 @@ +@import "variables"; + +.grid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-gap: 10px; +} + +.form-card { + grid-column-start: 1; + grid-column-end: 4; + + mat-form-field { + box-sizing: border-box; + width: 100%; + + @media #{$monitor-query} { + width: 45%; + &:last-child { + margin-left: 10%; + } + } + } + + mat-card-actions { + display: flex; + align-items: flex-start; + flex-wrap: wrap; + margin: -10px; + + button { + margin: 10px; + @media #{$mobile-query} { + width: 100%; + } + } + } +} + +.form-field-info { + @media #{$table-query} { + grid-column-start: 1; + grid-column-end: 4; + } + + mat-card-content { + > div { + padding: 5px 0; + } + + pre { + overflow: auto; + box-sizing: border-box; + display: block; + width: 100%; + max-height: 75px; + + margin: inherit; + padding: 5px; + border-radius: 4px; + + background-color: rgba(0, 0, 0, 0.2); + + &:empty { + display: none; + } + } + } +} + +.form-validation-messages { + grid-column-start: 1; + grid-column-end: 4; +} diff --git a/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts new file mode 100644 index 0000000..b7cd6b0 --- /dev/null +++ b/demo-app/ng8/src/app/pages/ngx-forms-example/ngx-forms-example.component.ts @@ -0,0 +1,60 @@ +/*tslint:disable:template-use-track-by-function template-cyclomatic-complexity*/ +import { Component } from "@angular/core"; +import { AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, Validators } from "@angular/forms"; +import { ErrorStateMatcher } from "@angular/material/core"; +import { ParentErrorStateMatcher } from "../../parent-error-state-matcher"; +import { PasswordValidator } from "../../password-validator"; + +@Component({ + selector: "app-ngx-forms-example", + templateUrl: "./ngx-forms-example.component.html", + styleUrls: ["./ngx-forms-example.component.scss"] +}) +export class NgxFormsExampleComponent { + public formGroup: FormGroup; + public parentErrorStateMatcher: ErrorStateMatcher = new ParentErrorStateMatcher(); + public passwordPattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]+$"; + public showValidationDetails = false; + public showValidationSummary = true; + + public constructor(private formBuilder: FormBuilder) { + this.formGroup = this.formBuilder.group({ + username: [undefined, Validators.required], + matchingPasswords: new FormGroup( + { + password: new FormControl( + "", + Validators.compose([ + Validators.minLength(3), + Validators.maxLength(10), + Validators.required, + Validators.pattern(this.passwordPattern) // this is for the letters (both uppercase and lowercase) and numbers validation + ]) + ), + confirmPassword: new FormControl("", Validators.required) + }, + { + validators: (formGroup: AbstractControl): ValidationErrors | null => { + return PasswordValidator.areEqual(formGroup); + } + } + ) + }); + } + + public toggleValidationDetails(): void { + this.showValidationDetails = !this.showValidationDetails; + } + + public toggleValidationSummary(): void { + this.showValidationSummary = !this.showValidationSummary; + } + + public onSubmitUserDetails(formGroup: FormGroup): void { + console.log("Submitted form:", formGroup.value); + } + + public getFormStatus(): void { + console.log("Form status", this.formGroup); + } +} diff --git a/demo-app/ng8/src/app/pages/reactive-forms-example/index.ts b/demo-app/ng8/src/app/pages/reactive-forms-example/index.ts new file mode 100644 index 0000000..32b4ab4 --- /dev/null +++ b/demo-app/ng8/src/app/pages/reactive-forms-example/index.ts @@ -0,0 +1 @@ +export * from "./reactive-forms-example.component"; diff --git a/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.html b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.html new file mode 100644 index 0000000..9862a51 --- /dev/null +++ b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.html @@ -0,0 +1,205 @@ +
+
Reactive Forms (Model Driven Forms)
+ +
+
+ + + + + +
+ {{ validation.message | translate }} +
+
+
+ +
+ + + +
+ {{ validation.message | translate }} +
+
+
+ + + + +
+ {{ validation.message | translate }} +
+
+
+
+
+ + + + + + + +
+ + + + Username + +
Has errors: {{ !!formGroup.get("username").errors }}
+
Has 'required' error: {{ formGroup.get("username").hasError("required") }}
+
+ 'required' error: +
{{ formGroup.get("username").getError("required") | json }}
+
+
Is touched? {{ formGroup.get("username").touched }}
+
+ Errors: +
{{ formGroup.get("username").errors | json }}
+
+
+
+ + + Password + +
Has errors: {{ !!formGroup.get("matchingPasswords.password").errors }}
+
Has 'pattern' error: {{ formGroup.get("matchingPasswords.password").hasError("pattern") }}
+
Is touched? {{ formGroup.get("matchingPasswords.password").touched }}
+
+ 'pattern' error: +
{{ formGroup.get("matchingPasswords.password").getError("pattern") | json }}
+
+
+ Errors: +
{{ formGroup.get("matchingPasswords.password").errors | json }}
+
+
+
+ + + Confirm password + +
Has errors: {{ !!formGroup.get("matchingPasswords.confirmPassword").errors }}
+
Has 'required' error: {{ formGroup.get("matchingPasswords.confirmPassword").hasError("required") }}
+
Is touched? {{ formGroup.get("matchingPasswords.confirmPassword").touched }}
+
+ 'required' error: +
{{ formGroup.get("matchingPasswords.confirmPassword").getError("required") | json }}
+
+
+ Errors: +
{{ formGroup.get("matchingPasswords.confirmPassword").errors | json }}
+
+
+
+
+ + +

+ No validation errors +

+
    + + +
  • + {{ validation.message | translate }} +
  • +
    +
    + + +
  • + {{ validation.message | translate }} +
  • +
    +
    + + +
  • + {{ validation.message | translate }} +
  • +
    +
    +
+
+
+
+
diff --git a/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss new file mode 100644 index 0000000..4c2c5c6 --- /dev/null +++ b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.scss @@ -0,0 +1,75 @@ +@import "variables"; + +.grid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-gap: 10px; +} + +.form-card { + grid-column-start: 1; + grid-column-end: 4; + + mat-form-field { + box-sizing: border-box; + width: 100%; + + @media #{$monitor-query} { + width: 45%; + &:last-child { + margin-left: 10%; + } + } + } + + mat-card-actions { + display: flex; + align-items: flex-start; + flex-wrap: wrap; + margin: -10px; + + button { + margin: 10px; + @media #{$mobile-query} { + width: 100%; + } + } + } +} + +.form-field-info { + @media #{$table-query} { + grid-column-start: 1; + grid-column-end: 4; + } + + mat-card-content { + > div { + padding: 5px 0; + } + + pre { + overflow: auto; + box-sizing: border-box; + display: block; + width: 100%; + max-height: 75px; + + margin: inherit; + padding: 5px; + border-radius: 4px; + + background-color: rgba(0, 0, 0, 0.2); + + &:empty { + display: none; + } + } + } +} + +.form-validation-messages { + grid-column-start: 1; + grid-column-end: 4; +} diff --git a/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts new file mode 100644 index 0000000..d4e4d71 --- /dev/null +++ b/demo-app/ng8/src/app/pages/reactive-forms-example/reactive-forms-example.component.ts @@ -0,0 +1,92 @@ +/*tslint:disable:template-use-track-by-function template-cyclomatic-complexity*/ +import { Component } from "@angular/core"; +import { AbstractControl, FormBuilder, FormControl, FormGroup, ValidationErrors, Validators } from "@angular/forms"; +import { ErrorStateMatcher } from "@angular/material/core"; +import { PasswordValidator } from "../../password-validator"; +import { ParentErrorStateMatcher } from "../../parent-error-state-matcher"; + +@Component({ + selector: "app-reactive-forms-example", + templateUrl: "./reactive-forms-example.component.html", + styleUrls: ["./reactive-forms-example.component.scss"] +}) +export class ReactiveFormsExampleComponent { + public formGroup: FormGroup; + public validationMessages: { [key: string]: { type: string; message: string }[] }; + public parentErrorStateMatcher: ErrorStateMatcher = new ParentErrorStateMatcher(); + public passwordPattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]+$"; + public showValidationDetails = false; + public showValidationSummary = true; + + public constructor(private formBuilder: FormBuilder) { + this.formGroup = this.formBuilder.group({ + username: [undefined, Validators.required], + matchingPasswords: new FormGroup( + { + password: new FormControl( + "", + Validators.compose([ + Validators.minLength(3), + Validators.maxLength(10), + Validators.required, + Validators.pattern(this.passwordPattern) // this is for the letters (both uppercase and lowercase) and numbers validation + ]) + ), + confirmPassword: new FormControl("", Validators.required) + }, + { + validators: (formGroup: AbstractControl): ValidationErrors | null => { + return PasswordValidator.areEqual(formGroup); + } + } + ) + }); + + this.validationMessages = { + username: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.USER_NAME.REQUIRED" + }, + { type: "unique", message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.USER_NAME.UNIQUE" } + ], + password: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.REQUIRED" + }, + { + type: "minlength", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.MIN_LENGTH" + }, + { type: "pattern", message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.PATTERN" } + ], + confirmPassword: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.CONFIRM_PASSWORD.REQUIRED" + }, + { + type: "areEqual", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.CONFIRM_PASSWORD.ARE_EQUAL" + } + ] + }; + } + + public toggleValidationDetails(): void { + this.showValidationDetails = !this.showValidationDetails; + } + + public toggleValidationSummary(): void { + this.showValidationSummary = !this.showValidationSummary; + } + + public onSubmitUserDetails(formGroup: FormGroup): void { + console.log("Submitted form:", formGroup.value); + } + + public getFormStatus(): void { + console.log("Form status", this.formGroup); + } +} diff --git a/demo-app/ng8/src/app/pages/template-driven-forms-example/index.ts b/demo-app/ng8/src/app/pages/template-driven-forms-example/index.ts new file mode 100644 index 0000000..bf702ec --- /dev/null +++ b/demo-app/ng8/src/app/pages/template-driven-forms-example/index.ts @@ -0,0 +1 @@ +export * from "./template-driven-forms-example.component"; diff --git a/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html new file mode 100644 index 0000000..3e8f933 --- /dev/null +++ b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.html @@ -0,0 +1,173 @@ +
+
Template Driven Forms
+ +
+
+ + + + + +
+ {{ validation.message | translate }} +
+
+
+
+ + + +
+ {{ validation.message | translate }} +
+
+
+ + + + +
+ {{ validation.message | translate }} +
+
+
+
+
+ + + + + + + +
+ + + + Username + +
Has errors: {{ !!usernameField.errors }}
+
Has 'required' error: {{ usernameField.hasError("required") }}
+
+ 'required' error: +
{{ usernameField.getError("required") | json }}
+
+
Is touched? {{ usernameField.touched }}
+
+ Errors: +
{{ usernameField.errors | json }}
+
+
+
+ + + Password + +
Has errors: {{ !!passwordField.errors }}
+
Has 'pattern' error: {{ passwordField.hasError("pattern") }}
+
Is touched? {{ passwordField.touched }}
+
+ 'pattern' error: +
{{ passwordField.getError("pattern") | json }}
+
+
+ Errors: +
{{ passwordField.errors | json }}
+
+
+
+ + + Confirm password + +
Has errors: {{ !!confirmPasswordField.errors }}
+
Has 'required' error: {{ confirmPasswordField.hasError("required") }}
+
Is touched? {{ confirmPasswordField.touched }}
+
+ 'required' error: +
{{ confirmPasswordField.getError("required") | json }}
+
+
+ Errors: +
{{ confirmPasswordField.errors | json }}
+
+
+
+
+ + +

No validation errors

+
    + +
  • {{ validation.message | translate }}
  • +
    + + +
  • {{ validation.message | translate }}
  • +
    + + +
  • + {{ validation.message | translate }} +
  • +
    +
+
+
+
+
diff --git a/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss new file mode 100644 index 0000000..4c2c5c6 --- /dev/null +++ b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.scss @@ -0,0 +1,75 @@ +@import "variables"; + +.grid { + display: grid; + grid-template-rows: auto; + grid-template-columns: 1fr 1fr 1fr; + grid-gap: 10px; +} + +.form-card { + grid-column-start: 1; + grid-column-end: 4; + + mat-form-field { + box-sizing: border-box; + width: 100%; + + @media #{$monitor-query} { + width: 45%; + &:last-child { + margin-left: 10%; + } + } + } + + mat-card-actions { + display: flex; + align-items: flex-start; + flex-wrap: wrap; + margin: -10px; + + button { + margin: 10px; + @media #{$mobile-query} { + width: 100%; + } + } + } +} + +.form-field-info { + @media #{$table-query} { + grid-column-start: 1; + grid-column-end: 4; + } + + mat-card-content { + > div { + padding: 5px 0; + } + + pre { + overflow: auto; + box-sizing: border-box; + display: block; + width: 100%; + max-height: 75px; + + margin: inherit; + padding: 5px; + border-radius: 4px; + + background-color: rgba(0, 0, 0, 0.2); + + &:empty { + display: none; + } + } + } +} + +.form-validation-messages { + grid-column-start: 1; + grid-column-end: 4; +} diff --git a/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts new file mode 100644 index 0000000..664d9de --- /dev/null +++ b/demo-app/ng8/src/app/pages/template-driven-forms-example/template-driven-forms-example.component.ts @@ -0,0 +1,70 @@ +/*tslint:disable:template-use-track-by-function template-cyclomatic-complexity*/ +import { Component } from "@angular/core"; +import { NgForm } from "@angular/forms"; +import { ErrorStateMatcher } from "@angular/material/core"; +import { ParentErrorStateMatcher } from "../../parent-error-state-matcher"; + +@Component({ + selector: "app-template-driven-forms-example", + templateUrl: "./template-driven-forms-example.component.html", + styleUrls: ["./template-driven-forms-example.component.scss"] +}) +export class TemplateDrivenFormsExampleComponent { + public username = ""; + public password = ""; + public confirmPassword = ""; + + public parentErrorStateMatcher: ErrorStateMatcher = new ParentErrorStateMatcher(); + public passwordPattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]+$"; + public validationMessages: { [key: string]: { type: string; message: string }[] }; + public showValidationDetails = false; + public showValidationSummary = true; + + public constructor() { + this.validationMessages = { + username: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.USER_NAME.REQUIRED" + } + ], + password: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.REQUIRED" + }, + { + type: "minlength", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.MIN_LENGTH" + }, + { type: "pattern", message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.PASSWORD.PATTERN" } + ], + confirmPassword: [ + { + type: "required", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.CONFIRM_PASSWORD.REQUIRED" + }, + { + type: "areEqual", + message: "DEMO.FORM_VALIDATION.WITHOUT_NGX_FORM_ERRORS.CONFIRM_PASSWORD.ARE_EQUAL" + } + ] + }; + } + + public toggleValidationDetails(): void { + this.showValidationDetails = !this.showValidationDetails; + } + + public toggleValidationSummary(): void { + this.showValidationSummary = !this.showValidationSummary; + } + + public onSubmitUserDetails(ngForm: NgForm): void { + console.log("Submitted form:", ngForm.value); + } + + public getFormStatus(ngForm: NgForm): void { + console.log("Form status", ngForm); + } +} diff --git a/demo-app/ng8/src/app/parent-error-state-matcher.ts b/demo-app/ng8/src/app/parent-error-state-matcher.ts new file mode 100644 index 0000000..2057c1b --- /dev/null +++ b/demo-app/ng8/src/app/parent-error-state-matcher.ts @@ -0,0 +1,12 @@ +import { ErrorStateMatcher } from "@angular/material/typings/core"; +import { FormControl, FormGroupDirective, NgForm } from "@angular/forms"; + +/** Error when invalid control is dirty, touched, or submitted. */ +export class ParentErrorStateMatcher implements ErrorStateMatcher { + public isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean { + const isSubmitted: boolean = !!(form && form.submitted); + const formGroupValid: boolean = !!(form && form.valid); + + return !!((control && control.invalid && (control.dirty || control.touched)) || isSubmitted || formGroupValid); + } +} diff --git a/demo-app/ng8/src/app/password-validator.ts b/demo-app/ng8/src/app/password-validator.ts new file mode 100644 index 0000000..73212a3 --- /dev/null +++ b/demo-app/ng8/src/app/password-validator.ts @@ -0,0 +1,32 @@ +import { FormControl, FormGroup, ValidationErrors } from "@angular/forms"; + +export class PasswordValidator { + // Inspired on: http://plnkr.co/edit/Zcbg2T3tOxYmhxs7vaAm?p=preview + public static areEqual(formGroup: FormGroup): ValidationErrors | null { + let value: string | undefined; + let valid = true; + for (const key in formGroup.controls) { + if (formGroup.controls.hasOwnProperty(key)) { + const control: FormControl = formGroup.controls[key]; + + if (value === undefined) { + value = control.value; + } else { + if (value !== control.value) { + valid = false; + break; + } + } + } + } + + if (valid) { + /* tslint:disable-next-line:no-null-keyword */ + return null; + } + + return { + areEqual: true + }; + } +} diff --git a/demo-app/ng8/src/app/translation.config.ts b/demo-app/ng8/src/app/translation.config.ts new file mode 100644 index 0000000..edade77 --- /dev/null +++ b/demo-app/ng8/src/app/translation.config.ts @@ -0,0 +1,15 @@ +import { TranslateService } from "@ngx-translate/core"; + +const translationsEn: object = require("../assets/translations/en.json"); +const translationsFr: object = require("../assets/translations/fr.json"); +const translationsNl: object = require("../assets/translations/nl.json"); + +export function initializeTranslation(translateService: TranslateService): void { + translateService.addLangs(["en", "fr", "nl"]); + translateService.setDefaultLang("en"); + translateService.use("en"); + + translateService.setTranslation("en", translationsEn); + translateService.setTranslation("fr", translationsFr); + translateService.setTranslation("nl", translationsNl); +} diff --git a/demo-app/ng8/src/assets/img/github-icon.svg b/demo-app/ng8/src/assets/img/github-icon.svg new file mode 100644 index 0000000..d51ebb1 --- /dev/null +++ b/demo-app/ng8/src/assets/img/github-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/demo-app/ng8/src/assets/translations/en.json b/demo-app/ng8/src/assets/translations/en.json new file mode 100644 index 0000000..478e4eb --- /dev/null +++ b/demo-app/ng8/src/assets/translations/en.json @@ -0,0 +1,47 @@ +{ + "DEMO": { + "PLACEHOLDERS": { + "USER_NAME": "Username", + "PASSWORD": "Password", + "CONFIRM_PASSWORD": "Confirm password" + }, + "FIELDS": { + "USER_NAME": "Your name", + "PASSWORD_ALIAS": "A valid passcode", + "CONFIRM_PASSWORD": "Password confirmation" + }, + "FORM_VALIDATION": { + "WITHOUT_NGX_FORM_ERRORS": { + "REQUIRED": "This field is required", + "USER_NAME": { + "REQUIRED": "Username is required", + "UNIQUE": "Your username has already been taken" + }, + "PASSWORD": { + "REQUIRED": "Password is required", + "MIN_LENGTH": "Password must be at least 3 characters long", + "PATTERN": "Your password must contain at least one uppercase, one lowercase, and one number" + }, + "CONFIRM_PASSWORD": { + "REQUIRED": "Confirm password is required", + "ARE_EQUAL": "Password mismatch" + } + }, + "WITH_NGX_FORM_ERRORS": { + "REQUIRED": "{{fieldName}} is required", + "PASSWORD_REQUIRED": "{{fieldName}} must be provided", + "USER_NAME": { + "UNIQUE": "Your username has already been taken" + }, + "PASSWORD": { + "MAX_LENGTH": "Password cannot be more than {{requiredLength}} characters long", + "MIN_LENGTH": "Password must be at least {{requiredLength}} characters long", + "PATTERN": "Your password must contain at least one uppercase, one lowercase, and one number" + }, + "CONFIRM_PASSWORD": { + "ARE_EQUAL": "Password mismatch" + } + } + } + } +} diff --git a/demo-app/ng8/src/assets/translations/fr.json b/demo-app/ng8/src/assets/translations/fr.json new file mode 100644 index 0000000..1033373 --- /dev/null +++ b/demo-app/ng8/src/assets/translations/fr.json @@ -0,0 +1,47 @@ +{ + "DEMO": { + "PLACEHOLDERS": { + "USER_NAME": "Nom d'utilisateur", + "PASSWORD": "Mot de passe", + "CONFIRM_PASSWORD": "Confirmez le mot de passe" + }, + "FIELDS": { + "USER_NAME": "Votre nom d'utilisateur", + "PASSWORD_ALIAS": "Un code d'authentification valide", + "CONFIRM_PASSWORD": "Confirmation mot de passe" + }, + "FORM_VALIDATION": { + "WITHOUT_NGX_FORM_ERRORS": { + "REQUIRED": "Ce champ est nécessaire", + "USER_NAME": { + "REQUIRED": "Nom d'utilisateur est nécessaire", + "UNIQUE": "Votre nom d'utilisateur a déjà été pris" + }, + "PASSWORD": { + "REQUIRED": "Mot de passe est nécessaire", + "MIN_LENGTH": "Mot de passe doit comporter au moins 3 caractères", + "PATTERN": "Votre mot de passe doit contenir au moins une majuscule, une minuscule et un chiffre." + }, + "CONFIRM_PASSWORD": { + "REQUIRED": "Confirmez le mot de passe est nécessaire", + "ARE_EQUAL": "Non concordance des mots de passe passwords" + } + }, + "WITH_NGX_FORM_ERRORS": { + "REQUIRED": "{{fieldName}} est nécessaire", + "PASSWORD_REQUIRED": "{{fieldName}} doit être fourni", + "USER_NAME": { + "UNIQUE": "Votre nom d'utilisateur a déjà été pris" + }, + "PASSWORD": { + "MAX_LENGTH": "Mot de passe ne peut pas y avoir plus de {{requiredLength}} caractères", + "MIN_LENGTH": "Mot de passe doit comporter au moins {{requiredLength}} caractères", + "PATTERN": "Votre mot de passe doit contenir au moins une majuscule, une minuscule et un chiffre." + }, + "CONFIRM_PASSWORD": { + "ARE_EQUAL": "Non concordance des mots de passe passwords" + } + } + } + } +} diff --git a/demo-app/ng8/src/assets/translations/nl.json b/demo-app/ng8/src/assets/translations/nl.json new file mode 100644 index 0000000..cbd837f --- /dev/null +++ b/demo-app/ng8/src/assets/translations/nl.json @@ -0,0 +1,47 @@ +{ + "DEMO": { + "PLACEHOLDERS": { + "USER_NAME": "Gebruikersnaam", + "PASSWORD": "Wachtwoord", + "CONFIRM_PASSWORD": "Bevestig wachtwoord" + }, + "FIELDS": { + "USER_NAME": "Uw gebruikersnaam", + "PASSWORD_ALIAS": "Een geldig wachtwoord", + "CONFIRM_PASSWORD": "Wachtwoordbevestiging" + }, + "FORM_VALIDATION": { + "WITHOUT_NGX_FORM_ERRORS": { + "REQUIRED": "Dit veld is verplicht", + "USER_NAME": { + "REQUIRED": "Gebruikersnaam is verplicht", + "UNIQUE": "Uw gebruikersnaam is al in gebruik" + }, + "PASSWORD": { + "REQUIRED": "Wachtwoord is verplicht", + "MIN_LENGTH": "Wachtwoord moet minimaal 3 tekens lang zijn", + "PATTERN": "Uw wachtwoord moet minimaal één hoofdletter, één kleine letter en één cijfer bevatten" + }, + "CONFIRM_PASSWORD": { + "REQUIRED": "Bevestig wachtwoord is verplicht", + "ARE_EQUAL": "Wachtwoord komt niet overeen" + } + }, + "WITH_NGX_FORM_ERRORS": { + "REQUIRED": "{{fieldName}} is verplicht", + "PASSWORD_REQUIRED": "{{fieldName}} moet worden gegeven", + "USER_NAME": { + "UNIQUE": "Uw gebruikersnaam is al in gebruik" + }, + "PASSWORD": { + "MAX_LENGTH": "Wachtwoord mag niet meer dan {{requiredLength}} tekens lang zijn", + "MIN_LENGTH": "Wachtwoord moet minimaal {{requiredLength}} tekens lang zijn", + "PATTERN": "Uw Wachtwoord moet minimaal één hoofdletter, één kleine letter en één cijfer bevatten" + }, + "CONFIRM_PASSWORD": { + "ARE_EQUAL": "Wachtwoord komt niet overeen" + } + } + } + } +} diff --git a/demo-app/ng8/src/environments/environment.prod.ts b/demo-app/ng8/src/environments/environment.prod.ts new file mode 100644 index 0000000..8b7239d --- /dev/null +++ b/demo-app/ng8/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/demo-app/ng8/src/environments/environment.ts b/demo-app/ng8/src/environments/environment.ts new file mode 100644 index 0000000..c5a517a --- /dev/null +++ b/demo-app/ng8/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/dist/zone-error'; // Included with Angular CLI. diff --git a/demo-app/ng8/src/favicon.ico b/demo-app/ng8/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + NgxFormErrors Showcase + + + + + + + + diff --git a/demo-app/ng8/src/main.ts b/demo-app/ng8/src/main.ts new file mode 100644 index 0000000..04b909e --- /dev/null +++ b/demo-app/ng8/src/main.ts @@ -0,0 +1,13 @@ +import { enableProdMode } from "@angular/core"; +import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"; + +import { AppModule } from "./app/app.module"; +import { environment } from "./environments/environment"; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic() + .bootstrapModule(AppModule) + .catch((err: any) => console.error(err)); diff --git a/demo-app/ng8/src/polyfills.ts b/demo-app/ng8/src/polyfills.ts new file mode 100644 index 0000000..46cc6fa --- /dev/null +++ b/demo-app/ng8/src/polyfills.ts @@ -0,0 +1,72 @@ +/** + * 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/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ +/* tslint:disable:no-import-side-effect */ +/** + * IE9, IE10 and IE11 requires all of the following polyfills. + */ +import "core-js/es"; + +/** + * IE10 and IE11 requires the following for NgClass support on SVG elements + */ +import "eligrey-classlist-js-polyfill"; + +/** + * IE10 and IE11 requires the following for the Reflect API. + */ +import "core-js/proposals/reflect-metadata"; + +/** + * Web Animations `@angular/platform-browser/animations` + * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. + * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). + */ +// import "web-animations-js"; // Run `npm install --save web-animations-js`. + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags.ts'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ["scroll", "mousemove"]; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + */ +(window as any).__Zone_enable_cross_context_check = true; + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import "zone.js/dist/zone"; // Included with Angular CLI. + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/demo-app/ng8/src/styles/_app.theme.scss b/demo-app/ng8/src/styles/_app.theme.scss new file mode 100644 index 0000000..0aa510f --- /dev/null +++ b/demo-app/ng8/src/styles/_app.theme.scss @@ -0,0 +1,125 @@ +@import "~@angular/material/theming"; +@import "../app/components/navigation/navigation.theme"; +@import "../app/components/language-selector/language-selector.theme"; +@import "../app/components/card/card.theme"; + +$guardsman-red: ( + 50: #f7e1e1, + 100: #eab3b3, + 200: #dd8080, + 300: #cf4d4d, + 400: #c42727, + 500: #ba0101, + 600: #b30101, + 700: #ab0101, + 800: #a30101, + 900: #940000, + A100: #ffbfbf, + A200: #ff8c8c, + A400: #ff5959, + A700: #ff4040, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $dark-primary-text, + A700: $light-primary-text + ) +); + +$eminence: ( + 50: #ede6f0, + 100: #d3c1da, + 200: #b698c1, + 300: #986ea8, + 400: #824f95, + 500: #6c3082, + 600: #642b7a, + 700: #59246f, + 800: #4f1e65, + 900: #3d1352, + A100: #d58cff, + A200: #c259ff, + A400: #af26ff, + A700: #a60dff, + contrast: ( + 50: $light-primary-text, + 100: $light-primary-text, + 200: $light-primary-text, + 300: $light-primary-text, + 400: $light-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $light-primary-text, + A200: $light-primary-text, + A400: $light-primary-text, + A700: $light-primary-text + ) +); + +$lochinvar: ( + 50: #e6f1f0, + 100: #c0ddda, + 200: #96c6c2, + 300: #6bafa9, + 400: #4c9d96, + 500: #2c8c84, + 600: #27847c, + 700: #217971, + 800: #1b6f67, + 900: #105c54, + A100: #93fff2, + A200: #60ffed, + A400: #2dffe7, + A700: #14ffe4, + contrast: ( + 50: $dark-secondary-text, + 100: $dark-secondary-text, + 200: $dark-secondary-text, + 300: $dark-secondary-text, + 400: $dark-secondary-text, + 500: $light-secondary-text, + 600: $light-secondary-text, + 700: $light-secondary-text, + 800: $light-secondary-text, + 900: $light-secondary-text, + A100: $dark-secondary-text, + A200: $dark-secondary-text, + A400: $dark-secondary-text, + A700: $dark-secondary-text + ) +); + +@include mat-core(); + +$demo-app-primary: mat-palette($eminence); +$demo-app-accent: mat-palette($lochinvar); + +$demo-app-warn: mat-palette($guardsman-red); +$demo-app-success: mat-palette($mat-light-green); + +$demo-mat-theme: mat-light-theme($demo-app-primary, $demo-app-accent, $demo-app-warn); +$demo-custom-theme: ( + success: $demo-app-success +); + +$demo-app-theme: map-merge($demo-mat-theme, $demo-custom-theme); + +$theme: $demo-app-theme; + +@include angular-material-theme($theme); +@include app-navigation-theme($theme); +@include language-selector-theme($theme); +@include card-theme($theme); diff --git a/demo-app/ng8/src/styles/_variables.scss b/demo-app/ng8/src/styles/_variables.scss new file mode 100644 index 0000000..ab6b24b --- /dev/null +++ b/demo-app/ng8/src/styles/_variables.scss @@ -0,0 +1,3 @@ +$monitor-query: "screen and (min-width:1200px)"; +$table-query: "screen and (max-width: 1200px)"; +$mobile-query: "screen and (max-width: 600px)"; diff --git a/demo-app/ng8/src/styles/styles.scss b/demo-app/ng8/src/styles/styles.scss new file mode 100644 index 0000000..474e353 --- /dev/null +++ b/demo-app/ng8/src/styles/styles.scss @@ -0,0 +1,15 @@ +@import "~material-design-icons/iconfont/material-icons.css"; +@import "app.theme"; + +app-root { + height: 100vh; + display: flex; + flex-direction: column; +} + +.container { + margin: 20px auto; + padding: 20px; + box-sizing: border-box; + max-width: 1200px; +} diff --git a/demo-app/ng8/src/test.ts b/demo-app/ng8/src/test.ts new file mode 100644 index 0000000..42631f3 --- /dev/null +++ b/demo-app/ng8/src/test.ts @@ -0,0 +1,15 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +/* tslint:disable:no-import-side-effect */ +import "zone.js/dist/zone-testing"; +import { getTestBed } from "@angular/core/testing"; +import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from "@angular/platform-browser-dynamic/testing"; + +declare const require: any; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()); +// Then we find all the tests. +const context = require.context("./", true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/demo-app/ng8/tsconfig.app.json b/demo-app/ng8/tsconfig.app.json new file mode 100644 index 0000000..6e9bcd7 --- /dev/null +++ b/demo-app/ng8/tsconfig.app.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["node"], + "paths": { + "@angular/*": ["./node_modules/@angular/*"] + } + }, + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.ts"], + "exclude": ["src/test.ts", "src/**/*.spec.ts"] +} diff --git a/demo-app/ng8/tsconfig.json b/demo-app/ng8/tsconfig.json new file mode 100644 index 0000000..dcefc35 --- /dev/null +++ b/demo-app/ng8/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "es2015", + "moduleResolution": "node", + "importHelpers": true, + "target": "es5", + "typeRoots": ["node_modules/@types"], + "lib": ["dom", "dom.iterable", "es2017"] + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/demo-app/ng8/tsconfig.spec.json b/demo-app/ng8/tsconfig.spec.json new file mode 100644 index 0000000..430cf75 --- /dev/null +++ b/demo-app/ng8/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": ["jasmine", "node"] + }, + "files": ["src/test.ts", "src/polyfills.ts"], + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] +} diff --git a/demo-app/ng8/tslint.json b/demo-app/ng8/tslint.json new file mode 100644 index 0000000..ea04de9 --- /dev/null +++ b/demo-app/ng8/tslint.json @@ -0,0 +1,71 @@ +{ + //"extends": ["../../tslint.json"], + "extends": [ + "tslint:latest", + "tslint-sonarts", + //"@nationalbankbelgium/code-style/codelyzer/4.5.x", + "codelyzer", + "@nationalbankbelgium/code-style/tslint/4.3.x", + "tslint-config-prettier" + ], + "defaultSeverity": "error", + "rules": { + "completed-docs": false, + "directive-selector": [true, "attribute", "app", "camelCase"], + "component-selector": [true, "element", "app", "kebab-case"], + "max-union-size": [true, 4], + "member-ordering": [ + true, + { + "order": ["static-field", "instance-field", "static-method", "instance-method"] + } + ], + "typedef-whitespace": [ + true, + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + } + ], + "whitespace": [true, "check-branch", "check-decl", "check-operator", "check-separator", "check-type"], + + "use-view-encapsulation": false, + + // Codelyzer recommended rules + "angular-whitespace": [true, "check-interpolation", "check-semicolon"], + "no-inputs-metadata-property": true, + "no-outputs-metadata-property": true, + "no-host-metadata-property": true, + "no-attribute-decorator": true, + "no-input-rename": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-forward-ref": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true, + "no-output-native": true, + "component-max-inline-declarations": true, + "no-life-cycle-call": true, + "prefer-output-readonly": true, + "no-conflicting-lifecycle": true, + "use-component-selector": true, + "no-queries-metadata-property": true, + "component-class-suffix": [true, "Component"], + "directive-class-suffix": [true, "Directive"], + + // Codelyzer rules + "template-banana-in-box": true, + "contextual-lifecycle": true, + "contextual-decorator": true, + "no-pipe-impure": true, + "template-no-negated-async": true, + "use-pipe-decorator": true, + "template-use-track-by-function": true, + "no-unused-css": true, + "template-cyclomatic-complexity": [true, 10], + "template-conditional-complexity": [true, 4] + } +} diff --git a/demo-app/src/polyfills/css-grid-layout-polyfill.js b/demo-app/src/polyfills/css-grid-layout-polyfill.js deleted file mode 100644 index c3a806f..0000000 --- a/demo-app/src/polyfills/css-grid-layout-polyfill.js +++ /dev/null @@ -1,7139 +0,0 @@ -/*! CSS-POLYFILLS - v0.1.0 - 2018-05-24 - https://github.com/FremyCompany/css-polyfills - Copyright (c) 2018 François REMY; MIT-Licensed !*/ - -!(function() { - "use strict"; - var module = { exports: {} }; - var require = (function() { - var modules = {}; - var require = function(m) { - return modules[m]; - }; - require.define = function(m) { - modules[m] = module.exports; - module.exports = {}; - }; - return require; - })(); - - //////////////////////////////////////// - - !(function(window, document) { - "use strict"; - - // - // some code for console polyfilling - // - if (!window.console) { - window.console = { - backlog: "", - - log: function(x) { - this.backlog += x + "\n"; - if (window.debug) alert(x); - }, - - dir: function(x) { - try { - var elm = function(e) { - if (e.innerHTML) { - return { - tagName: e.tagName, - className: e.className, - id: e.id, - innerHTML: e.innerHTML.substr(0, 100) - }; - } else { - return { - nodeName: e.nodeName, - nodeValue: e.nodeValue - }; - } - }; - - var jsonify = function(o) { - var seen = []; - var jso = JSON.stringify(o, function(k, v) { - if (typeof v == "object") { - if (!seen.indexOf(v)) { - return "__cycle__"; - } - if (v instanceof window.Node) { - return elm(v); - } - seen.push(v); - } - return v; - }); - return jso; - }; - - this.log(jsonify(x)); - } catch (ex) { - this.log(x); - } - }, - - warn: function(x) { - this.log(x); - }, - - error: function(x) { - this.log("ERROR:"); - this.log(x); - } - }; - - if (!window.onerror) { - window.onerror = function() { - console.log([].slice.call(arguments, 0).join("\n")); - }; - } - } - - // - // this special console is used as a proxy emulating the CSS console of browsers - // - window.cssConsole = { - enabled: !!window.debug, - warnEnabled: true, - log: function(x) { - if (this.enabled) console.log(x); - }, - dir: function(x) { - if (this.enabled) console.dir(x); - }, - warn: function(x) { - if (this.warnEnabled) console.warn(x); - }, - error: function(x) { - console.error(x); - } - }; - })(window, document); - require.define("src/core/polyfill-dom-console.js"); - - //////////////////////////////////////// - - void (function() { - // request animation frame - var vendors = ["webkit", "moz", "ms", "o"]; - for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { - var vp = vendors[i]; - window.requestAnimationFrame = window[vp + "RequestAnimationFrame"]; - window.cancelAnimationFrame = window[vp + "CancelAnimationFrame"] || window[vp + "CancelRequestAnimationFrame"]; - } - if (!window.requestAnimationFrame || !window.cancelAnimationFrame) { - // tick every 16ms - var listener_index = 0; - var listeners = []; - var tmp = []; - var tick = function() { - var now = +new Date(); - var callbacks = listeners; - listeners = tmp; - for (var i = 0; i < callbacks.length; i++) { - callbacks[i](now); - } - listener_index += callbacks.length; - callbacks.length = 0; - tmp = callbacks; - setTimeout(tick, 16); - }; - tick(); - - // add a listener - window.requestAnimationFrame = function(callback) { - return listener_index + listeners.push(callback); - }; - - // remove a listener - window.cancelAnimationFrame = function(index) { - index -= listener_index; - if (index >= 0 && index < listeners.length) { - listeners[index] = function() {}; - } - }; - } - - // setImmediate - if (!window.setImmediate) { - window.setImmediate = function(f) { - return setTimeout(f, 0); - }; - window.cancelImmediate = clearTimeout; - } - })(); - - require.define("src/core/polyfill-dom-requestAnimationFrame.js"); - - //////////////////////////////////////// - - // - // note: this file is based on Tab Atkins's CSS Parser - // please include him (@tabatkins) if you open any issue for this file - // - module.exports = (function(window, document) { - "use strict"; - - // - // exports - // - var cssSyntax = { - tokenize: function(string) { - /*filled later*/ - }, - parse: function(tokens) { - /*filled later*/ - } - }; - - // - // css tokenizer - // - - // Add support for token lists (superclass of array) - function TokenList() { - var array = []; - array.toCSSString = TokenListToCSSString; - return array; - } - - function TokenListToCSSString(sep) { - if (sep) { - return this.map(function(o) { - return o.toCSSString(); - }).join(sep); - } else { - return ( - this.asCSSString || - (this.asCSSString = this.map(function(o) { - return o.toCSSString(); - }) - .join("/**/") - .replace(/( +\/\*\*\/ *| * | *\/\*\*\/ +)/g, " ") - .replace(/( +\/\*\*\/ *| * | *\/\*\*\/ +)/g, " ") - .replace(/(\!|\:|\;|\@|\.|\,|\*|\=|\&|\\|\/|\<|\>|\[|\{|\(|\]|\}|\)|\|)\/\*\*\//g, "$1") - .replace(/\/\*\*\/(\!|\:|\;|\@|\.|\,|\*|\=|\&|\\|\/|\<|\>|\[|\{|\(|\]|\}|\)|\|)/g, "$1")) - ); - } - } - - cssSyntax.TokenList = TokenList; - cssSyntax.TokenListToCSSString = TokenListToCSSString; - - function between(num, first, last) { - return num >= first && num <= last; - } - - function digit(code) { - return between(code, 0x30, 0x39); - } - - function hexdigit(code) { - return digit(code) || between(code, 0x41, 0x46) || between(code, 0x61, 0x66); - } - - function uppercaseletter(code) { - return between(code, 0x41, 0x5a); - } - - function lowercaseletter(code) { - return between(code, 0x61, 0x7a); - } - - function letter(code) { - return uppercaseletter(code) || lowercaseletter(code); - } - - function nonascii(code) { - return code >= 0x80; - } - - function namestartchar(code) { - return letter(code) || nonascii(code) || code == 0x5f; - } - - function namechar(code) { - return namestartchar(code) || digit(code) || code == 0x2d; - } - - function nonprintable(code) { - return between(code, 0, 8) || code == 0xb || between(code, 0xe, 0x1f) || code == 0x7f; - } - - function newline(code) { - return code == 0xa; - } - - function whitespace(code) { - return newline(code) || code == 9 || code == 0x20; - } - - function badescape(code) { - return newline(code) || isNaN(code); - } - - var maximumallowedcodepoint = 0x10ffff; - - function InvalidCharacterError(message) { - this.message = message; - } - InvalidCharacterError.prototype = new Error(); - InvalidCharacterError.prototype.name = "InvalidCharacterError"; - - function preprocess(str) { - // Turn a string into an array of code points, - // following the preprocessing cleanup rules. - var codepoints = []; - for (var i = 0; i < str.length; i++) { - var code = str.charCodeAt(i); - if (code == 0xd && str.charCodeAt(i + 1) == 0xa) { - code = 0xa; - i++; - } - if (code == 0xd || code == 0xc) code = 0xa; - if (code == 0x0) code = 0xfffd; - if (between(code, 0xd800, 0xdbff) && between(str.charCodeAt(i + 1), 0xdc00, 0xdfff)) { - // Decode a surrogate pair into an astral codepoint. - var lead = code - 0xd800; - var trail = str.charCodeAt(i + 1) - 0xdc00; - code = Math.pow(2, 21) + lead * Math.pow(2, 10) + trail; - } - codepoints.push(code); - } - return codepoints; - } - - function stringFromCode(code) { - if (code <= 0xffff) return String.fromCharCode(code); - // Otherwise, encode astral char as surrogate pair. - code -= Math.pow(2, 21); - var lead = Math.floor(code / Math.pow(2, 10)) + 0xd800; - var trail = code % Math.pow(2, 10); - +0xdc00; - return String.fromCharCode(lead) + String.fromCharCode(trail); - } - - function tokenize(str) { - str = preprocess(str); - var i = -1; - var tokens = new TokenList(); - var code; - - // Line number information. - var line = 0; - var column = 0; - // The only use of lastLineLength is in reconsume(). - var lastLineLength = 0; - var incrLineno = function() { - line += 1; - lastLineLength = column; - column = 0; - }; - var locStart = { line: line, column: column }; - - var codepoint = function(i) { - if (i >= str.length) { - return -1; - } - return str[i]; - }; - var next = function(num) { - if (num === undefined) { - num = 1; - } - if (num > 3) { - throw "Spec Error: no more than three codepoints of lookahead."; - } - return codepoint(i + num); - }; - var consume = function(num) { - if (num === undefined) num = 1; - i += num; - code = codepoint(i); - if (newline(code)) incrLineno(); - else column += num; - //console.log('Consume '+i+' '+String.fromCharCode(code) + ' 0x' + code.toString(16)); - return true; - }; - var reconsume = function() { - i -= 1; - if (newline(code)) { - line -= 1; - column = lastLineLength; - } else { - column -= 1; - } - locStart.line = line; - locStart.column = column; - return true; - }; - var eof = function(codepoint) { - if (codepoint === undefined) codepoint = code; - return codepoint == -1; - }; - var donothing = function() {}; - var tokenizeerror = function() { - console.log("Parse error at index " + i + ", processing codepoint 0x" + code.toString(16) + "."); - return true; - }; - - var consumeAToken = function() { - consumeComments(); - consume(); - if (whitespace(code)) { - while (whitespace(next())) consume(); - return new WhitespaceToken(); - } else if (code == 0x22) return consumeAStringToken(); - else if (code == 0x23) { - if (namechar(next()) || areAValidEscape(next(1), next(2))) { - var token = new HashToken(); - if (wouldStartAnIdentifier(next(1), next(2), next(3))) token.type = "id"; - token.value = consumeAName(); - return token; - } else { - return new DelimToken(code); - } - } else if (code == 0x24) { - if (next() == 0x3d) { - consume(); - return new SuffixMatchToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x27) return consumeAStringToken(); - else if (code == 0x28) return new OpenParenToken(); - else if (code == 0x29) return new CloseParenToken(); - else if (code == 0x2a) { - if (next() == 0x3d) { - consume(); - return new SubstringMatchToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x2b) { - if (startsWithANumber()) { - reconsume(); - return consumeANumericToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x2c) return new CommaToken(); - else if (code == 0x2d) { - if (startsWithANumber()) { - reconsume(); - return consumeANumericToken(); - } else if (next(1) == 0x2d && next(2) == 0x3e) { - consume(2); - return new CDCToken(); - } else if (startsWithAnIdentifier()) { - reconsume(); - return consumeAnIdentlikeToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x2e) { - if (startsWithANumber()) { - reconsume(); - return consumeANumericToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x3a) return new ColonToken(); - else if (code == 0x3b) return new SemicolonToken(); - else if (code == 0x3c) { - if (next(1) == 0x21 && next(2) == 0x2d && next(3) == 0x2d) { - consume(3); - return new CDOToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x40) { - if (wouldStartAnIdentifier(next(1), next(2), next(3))) { - return new AtKeywordToken(consumeAName()); - } else { - return new DelimToken(code); - } - } else if (code == 0x5b) return new OpenSquareToken(); - else if (code == 0x5c) { - if (startsWithAValidEscape()) { - reconsume(); - return consumeAnIdentlikeToken(); - } else { - tokenizeerror(); - return new DelimToken(code); - } - } else if (code == 0x5d) return new CloseSquareToken(); - else if (code == 0x5e) { - if (next() == 0x3d) { - consume(); - return new PrefixMatchToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x7b) return new OpenCurlyToken(); - else if (code == 0x7c) { - if (next() == 0x3d) { - consume(); - return new DashMatchToken(); - } else if (next() == 0x7c) { - consume(); - return new ColumnToken(); - } else { - return new DelimToken(code); - } - } else if (code == 0x7d) return new CloseCurlyToken(); - else if (code == 0x7e) { - if (next() == 0x3d) { - consume(); - return new IncludeMatchToken(); - } else { - return new DelimToken(code); - } - } else if (digit(code)) { - reconsume(); - return consumeANumericToken(); - } else if (namestartchar(code)) { - reconsume(); - return consumeAnIdentlikeToken(); - } else if (eof()) return new EOFToken(); - else return new DelimToken(code); - }; - - var consumeComments = function() { - while (next(1) == 0x2f && next(2) == 0x2a) { - consume(2); - while (true) { - consume(); - if (code == 0x2a && next() == 0x2f) { - consume(); - break; - } else if (eof()) { - tokenizeerror(); - return; - } - } - } - }; - - var consumeANumericToken = function() { - var num = consumeANumber(); - if (wouldStartAnIdentifier(next(1), next(2), next(3))) { - var token = new DimensionToken(); - token.value = num.value; - token.repr = num.repr; - token.type = num.type; - token.unit = consumeAName(); - return token; - } else if (next() == 0x25) { - consume(); - var token = new PercentageToken(); - token.value = num.value; - token.repr = num.repr; - return token; - } else { - var token = new NumberToken(); - token.value = num.value; - token.repr = num.repr; - token.type = num.type; - return token; - } - }; - - var consumeAnIdentlikeToken = function() { - var str = consumeAName(); - if (str.toLowerCase() == "url" && next() == 0x28) { - consume(); - while (whitespace(next(1)) && whitespace(next(2))) consume(); - if (next() == 0x22 || next() == 0x27) { - return new FunctionToken(str); - } else if (whitespace(next()) && (next(2) == 0x22 || next(2) == 0x27)) { - return new FunctionToken(str); - } else { - return consumeAURLToken(); - } - } else if (next() == 0x28) { - consume(); - return new FunctionToken(str); - } else { - return new IdentifierToken(str); - } - }; - - var consumeAStringToken = function(endingCodePoint) { - if (endingCodePoint === undefined) endingCodePoint = code; - var string = ""; - while (consume()) { - if (code == endingCodePoint || eof()) { - return new StringToken(string); - } else if (newline(code)) { - tokenizeerror(); - reconsume(); - return new BadStringToken(); - } else if (code == 0x5c) { - if (eof(next())) { - donothing(); - } else if (newline(next())) { - consume(); - } else { - string += stringFromCode(consumeEscape()); - } - } else { - string += stringFromCode(code); - } - } - }; - - var consumeAURLToken = function() { - var token = new URLToken(""); - while (whitespace(next())) consume(); - if (eof(next())) return token; - while (consume()) { - if (code == 0x29 || eof()) { - return token; - } else if (whitespace(code)) { - while (whitespace(next())) consume(); - if (next() == 0x29 || eof(next())) { - consume(); - return token; - } else { - consumeTheRemnantsOfABadURL(); - return new BadURLToken(); - } - } else if (code == 0x22 || code == 0x27 || code == 0x28 || nonprintable(code)) { - tokenizeerror(); - consumeTheRemnantsOfABadURL(); - return new BadURLToken(); - } else if (code == 0x5c) { - if (startsWithAValidEscape()) { - token.value += stringFromCode(consumeEscape()); - } else { - tokenizeerror(); - consumeTheRemnantsOfABadURL(); - return new BadURLToken(); - } - } else { - token.value += stringFromCode(code); - } - } - }; - - var consumeEscape = function() { - // Assume the the current character is the \ - // and the next code point is not a newline. - consume(); - if (hexdigit(code)) { - // Consume 1-6 hex digits - var digits = [code]; - for (var total = 0; total < 5; total++) { - if (hexdigit(next())) { - consume(); - digits.push(code); - } else { - break; - } - } - if (whitespace(next())) consume(); - var value = parseInt( - digits - .map(function(x) { - return String.fromCharCode(x); - }) - .join(""), - 16 - ); - if (value > maximumallowedcodepoint) value = 0xfffd; - return value; - } else if (eof()) { - return 0xfffd; - } else { - return code; - } - }; - - var areAValidEscape = function(c1, c2) { - if (c1 != 0x5c) return false; - if (newline(c2)) return false; - return true; - }; - var startsWithAValidEscape = function() { - return areAValidEscape(code, next()); - }; - - var wouldStartAnIdentifier = function(c1, c2, c3) { - if (c1 == 0x2d) { - return namestartchar(c2) || c2 == 0x2d || areAValidEscape(c2, c3); - } else if (namestartchar(c1)) { - return true; - } else if (c1 == 0x5c) { - return areAValidEscape(c1, c2); - } else { - return false; - } - }; - var startsWithAnIdentifier = function() { - return wouldStartAnIdentifier(code, next(1), next(2)); - }; - - var wouldStartANumber = function(c1, c2, c3) { - if (c1 == 0x2b || c1 == 0x2d) { - if (digit(c2)) return true; - if (c2 == 0x2e && digit(c3)) return true; - return false; - } else if (c1 == 0x2e) { - if (digit(c2)) return true; - return false; - } else if (digit(c1)) { - return true; - } else { - return false; - } - }; - var startsWithANumber = function() { - return wouldStartANumber(code, next(1), next(2)); - }; - - var consumeAName = function() { - var result = ""; - while (consume()) { - if (namechar(code)) { - result += stringFromCode(code); - } else if (startsWithAValidEscape()) { - result += stringFromCode(consumeEscape()); - } else { - reconsume(); - return result; - } - } - }; - - var consumeANumber = function() { - var repr = ""; - var type = "integer"; - if (next() == 0x2b || next() == 0x2d) { - consume(); - repr += stringFromCode(code); - } - while (digit(next())) { - consume(); - repr += stringFromCode(code); - } - if (next(1) == 0x2e && digit(next(2))) { - consume(); - repr += stringFromCode(code); - consume(); - repr += stringFromCode(code); - type = "number"; - while (digit(next())) { - consume(); - repr += stringFromCode(code); - } - } - var c1 = next(1), - c2 = next(2), - c3 = next(3); - if ((c1 == 0x45 || c1 == 0x65) && digit(c2)) { - consume(); - repr += stringFromCode(code); - consume(); - repr += stringFromCode(code); - type = "number"; - while (digit(next())) { - consume(); - repr += stringFromCode(code); - } - } else if ((c1 == 0x45 || c1 == 0x65) && (c2 == 0x2b || c2 == 0x2d) && digit(c3)) { - consume(); - repr += stringFromCode(code); - consume(); - repr += stringFromCode(code); - consume(); - repr += stringFromCode(code); - type = "number"; - while (digit(next())) { - consume(); - repr += stringFromCode(code); - } - } - var value = convertAStringToANumber(repr); - return { type: type, value: value, repr: repr }; - }; - - var convertAStringToANumber = function(string) { - // CSS's number rules are identical to JS, afaik. - return +string; - }; - - var consumeTheRemnantsOfABadURL = function() { - while (consume()) { - if (code == 0x2d || eof()) { - return; - } else if (startsWithAValidEscape()) { - consumeEscape(); - donothing(); - } else { - donothing(); - } - } - }; - - var iterationCount = 0; - while (!eof(next())) { - tokens.push(consumeAToken()); - if (iterationCount++ > str.length * 2) throw new Error("The CSS Tokenizer is infinite-looping"); - } - return tokens; - } - - function CSSParserToken() { - return this; - } - - CSSParserToken.prototype.toJSON = function() { - return { token: this.tokenType }; - }; - CSSParserToken.prototype.toString = function() { - return this.tokenType; - }; - CSSParserToken.prototype.toCSSString = function() { - return "" + this; - }; - - function BadStringToken() { - return this; - } - - BadStringToken.prototype = new CSSParserToken(); - BadStringToken.prototype.tokenType = "BADSTRING"; - BadStringToken.prototype.toCSSString = function() { - return "'"; - }; - - function BadURLToken() { - return this; - } - - BadURLToken.prototype = new CSSParserToken(); - BadURLToken.prototype.tokenType = "BADURL"; - BadURLToken.prototype.toCSSString = function() { - return "url("; - }; - - function WhitespaceToken() { - return this; - } - - WhitespaceToken.prototype = new CSSParserToken(); - WhitespaceToken.prototype.tokenType = "WHITESPACE"; - WhitespaceToken.prototype.toString = function() { - return "WS"; - }; - WhitespaceToken.prototype.toCSSString = function() { - return " "; - }; - - function CDOToken() { - return this; - } - - CDOToken.prototype = new CSSParserToken(); - CDOToken.prototype.tokenType = "CDO"; - CDOToken.prototype.toCSSString = function() { - return ""; - }; - - function ColonToken() { - return this; - } - - ColonToken.prototype = new CSSParserToken(); - ColonToken.prototype.tokenType = ":"; - - function SemicolonToken() { - return this; - } - - SemicolonToken.prototype = new CSSParserToken(); - SemicolonToken.prototype.tokenType = ";"; - - function CommaToken() { - return this; - } - - CommaToken.prototype = new CSSParserToken(); - CommaToken.prototype.tokenType = ","; - CommaToken.prototype.value = ";"; // backwards-compat with DELIM token - - function GroupingToken() { - return this; - } - - GroupingToken.prototype = new CSSParserToken(); - - function OpenCurlyToken() { - this.value = "{"; - this.mirror = "}"; - return this; - } - - OpenCurlyToken.prototype = new GroupingToken(); - OpenCurlyToken.prototype.tokenType = "{"; - - function CloseCurlyToken() { - this.value = "}"; - this.mirror = "{"; - return this; - } - - CloseCurlyToken.prototype = new GroupingToken(); - CloseCurlyToken.prototype.tokenType = "}"; - - function OpenSquareToken() { - this.value = "["; - this.mirror = "]"; - return this; - } - - OpenSquareToken.prototype = new GroupingToken(); - OpenSquareToken.prototype.tokenType = "["; - - function CloseSquareToken() { - this.value = "]"; - this.mirror = "["; - return this; - } - - CloseSquareToken.prototype = new GroupingToken(); - CloseSquareToken.prototype.tokenType = "]"; - - function OpenParenToken() { - this.value = "("; - this.mirror = ")"; - return this; - } - - OpenParenToken.prototype = new GroupingToken(); - OpenParenToken.prototype.tokenType = "("; - - function CloseParenToken() { - this.value = ")"; - this.mirror = "("; - return this; - } - - CloseParenToken.prototype = new GroupingToken(); - CloseParenToken.prototype.tokenType = ")"; - - function IncludeMatchToken() { - return this; - } - - IncludeMatchToken.prototype = new CSSParserToken(); - IncludeMatchToken.prototype.tokenType = "~="; - - function DashMatchToken() { - return this; - } - - DashMatchToken.prototype = new CSSParserToken(); - DashMatchToken.prototype.tokenType = "|="; - - function PrefixMatchToken() { - return this; - } - - PrefixMatchToken.prototype = new CSSParserToken(); - PrefixMatchToken.prototype.tokenType = "^="; - - function SuffixMatchToken() { - return this; - } - - SuffixMatchToken.prototype = new CSSParserToken(); - SuffixMatchToken.prototype.tokenType = "$="; - - function SubstringMatchToken() { - return this; - } - - SubstringMatchToken.prototype = new CSSParserToken(); - SubstringMatchToken.prototype.tokenType = "*="; - - function ColumnToken() { - return this; - } - - ColumnToken.prototype = new CSSParserToken(); - ColumnToken.prototype.tokenType = "||"; - - function EOFToken() { - return this; - } - - EOFToken.prototype = new CSSParserToken(); - EOFToken.prototype.tokenType = "EOF"; - EOFToken.prototype.toCSSString = function() { - return ""; - }; - - function DelimToken(code) { - this.value = stringFromCode(code); - return this; - } - - DelimToken.prototype = new CSSParserToken(); - DelimToken.prototype.tokenType = "DELIM"; - DelimToken.prototype.toString = function() { - return "DELIM(" + this.value + ")"; - }; - DelimToken.prototype.toCSSString = function() { - return this.value == "\\" ? "\\\n" : this.value; - }; - - function StringValuedToken() { - return this; - } - - StringValuedToken.prototype = new CSSParserToken(); - StringValuedToken.prototype.ASCIIMatch = function(str) { - return this.value.toLowerCase() == str.toLowerCase(); - }; - - function IdentifierToken(val) { - this.value = val; - } - - IdentifierToken.prototype = new StringValuedToken(); - IdentifierToken.prototype.tokenType = "IDENT"; - IdentifierToken.prototype.toString = function() { - return "IDENT(" + this.value + ")"; - }; - IdentifierToken.prototype.toCSSString = function() { - return escapeIdent(this.value); - }; - - function FunctionToken(val) { - this.value = val; - this.mirror = ")"; - } - - FunctionToken.prototype = new StringValuedToken(); - FunctionToken.prototype.tokenType = "FUNCTION"; - FunctionToken.prototype.toString = function() { - return "FUNCTION(" + this.value + ")"; - }; - FunctionToken.prototype.toCSSString = function() { - return escapeIdent(this.value) + "("; - }; - - function AtKeywordToken(val) { - this.value = val; - } - - AtKeywordToken.prototype = new StringValuedToken(); - AtKeywordToken.prototype.tokenType = "AT-KEYWORD"; - AtKeywordToken.prototype.toString = function() { - return "AT(" + this.value + ")"; - }; - AtKeywordToken.prototype.toCSSString = function() { - return "@" + escapeIdent(this.value); - }; - - function HashToken(val) { - this.value = val; - this.type = "unrestricted"; - } - - HashToken.prototype = new StringValuedToken(); - HashToken.prototype.tokenType = "HASH"; - HashToken.prototype.toString = function() { - return "HASH(" + this.value + ")"; - }; - HashToken.prototype.toCSSString = function() { - var escapeValue = this.type == "id" ? escapeIdent : escapeHash; - return "#" + escapeValue(this.value); - }; - - function StringToken(val) { - this.value = val; - } - - StringToken.prototype = new StringValuedToken(); - StringToken.prototype.tokenType = "STRING"; - StringToken.prototype.toString = function() { - return '"' + escapeString(this.value) + '"'; - }; - - function URLToken(val) { - this.value = val; - } - - URLToken.prototype = new StringValuedToken(); - URLToken.prototype.tokenType = "URL"; - URLToken.prototype.toString = function() { - return "URL(" + this.value + ")"; - }; - URLToken.prototype.toCSSString = function() { - return 'url("' + escapeString(this.value) + '")'; - }; - - function NumberToken() { - this.value = null; - this.type = "integer"; - this.repr = ""; - } - - NumberToken.prototype = new CSSParserToken(); - NumberToken.prototype.tokenType = "NUMBER"; - NumberToken.prototype.toString = function() { - if (this.type == "integer") return "INT(" + this.value + ")"; - return "NUMBER(" + this.value + ")"; - }; - NumberToken.prototype.toJSON = function() { - var json = this.constructor.prototype.constructor.prototype.toJSON.call(this); - json.value = this.value; - json.type = this.type; - json.repr = this.repr; - return json; - }; - NumberToken.prototype.toCSSString = function() { - return this.repr; - }; - - function PercentageToken() { - this.value = null; - this.repr = ""; - } - - PercentageToken.prototype = new CSSParserToken(); - PercentageToken.prototype.tokenType = "PERCENTAGE"; - PercentageToken.prototype.toString = function() { - return "PERCENTAGE(" + this.value + ")"; - }; - PercentageToken.prototype.toCSSString = function() { - return this.repr + "%"; - }; - - function DimensionToken() { - this.value = null; - this.type = "integer"; - this.repr = ""; - this.unit = ""; - } - - DimensionToken.prototype = new CSSParserToken(); - DimensionToken.prototype.tokenType = "DIMENSION"; - DimensionToken.prototype.toString = function() { - return "DIM(" + this.value + "," + this.unit + ")"; - }; - DimensionToken.prototype.toCSSString = function() { - var source = this.repr; - var unit = escapeIdent(this.unit); - if (unit[0].toLowerCase() == "e" && (unit[1] == "-" || between(unit.charCodeAt(1), 0x30, 0x39))) { - // Unit is ambiguous with scinot - // Remove the leading "e", replace with escape. - unit = "\\65 " + unit.slice(1, unit.length); - } - return source + unit; - }; - - function escapeIdent(string) { - string = "" + string; - var result = ""; - var firstcode = string.charCodeAt(0); - for (var i = 0; i < string.length; i++) { - var code = string.charCodeAt(i); - if (code == 0x0) { - throw new InvalidCharacterError("Invalid character: the input contains U+0000."); - } - - if ( - between(code, 0x1, 0x1f) || - code == 0x7f || - (i == 0 && between(code, 0x30, 0x39)) || - (i == 1 && between(code, 0x30, 0x39) && firstcode == 0x2d) - ) { - result += "\\" + code.toString(16) + " "; - } else if ( - code >= 0x80 || - code == 0x2d || - code == 0x5f || - between(code, 0x30, 0x39) || - between(code, 0x41, 0x5a) || - between(code, 0x61, 0x7a) - ) { - result += string[i]; - } else { - result += "\\" + string[i]; - } - } - return result; - } - - function escapeHash(string) { - // Escapes the contents of "unrestricted"-type hash tokens. - // Won't preserve the ID-ness of "id"-type hash tokens; - // use escapeIdent() for that. - string = "" + string; - var result = ""; - var firstcode = string.charCodeAt(0); - for (var i = 0; i < string.length; i++) { - var code = string.charCodeAt(i); - if (code == 0x0) { - throw new InvalidCharacterError("Invalid character: the input contains U+0000."); - } - - if ( - code >= 0x80 || - code == 0x2d || - code == 0x5f || - between(code, 0x30, 0x39) || - between(code, 0x41, 0x5a) || - between(code, 0x61, 0x7a) - ) { - result += string[i]; - } else { - result += "\\" + code.toString(16) + " "; - } - } - return result; - } - - function escapeString(string) { - string = "" + string; - var result = ""; - for (var i = 0; i < string.length; i++) { - var code = string.charCodeAt(i); - - if (code == 0x0) { - throw new InvalidCharacterError("Invalid character: the input contains U+0000."); - } - - if (between(code, 0x1, 0x1f) || code == 0x7f) { - result += "\\" + code.toString(16) + " "; - } else if (code == 0x22 || code == 0x5c) { - result += "\\" + string[i]; - } else { - result += string[i]; - } - } - return result; - } - - // Exportation. - cssSyntax.tokenize = tokenize; - cssSyntax.IdentToken = IdentifierToken; - cssSyntax.IdentifierToken = IdentifierToken; - cssSyntax.FunctionToken = FunctionToken; - cssSyntax.AtKeywordToken = AtKeywordToken; - cssSyntax.HashToken = HashToken; - cssSyntax.StringToken = StringToken; - cssSyntax.BadStringToken = BadStringToken; - cssSyntax.URLToken = URLToken; - cssSyntax.BadURLToken = BadURLToken; - cssSyntax.DelimToken = DelimToken; - cssSyntax.NumberToken = NumberToken; - cssSyntax.PercentageToken = PercentageToken; - cssSyntax.DimensionToken = DimensionToken; - cssSyntax.IncludeMatchToken = IncludeMatchToken; - cssSyntax.DashMatchToken = DashMatchToken; - cssSyntax.PrefixMatchToken = PrefixMatchToken; - cssSyntax.SuffixMatchToken = SuffixMatchToken; - cssSyntax.SubstringMatchToken = SubstringMatchToken; - cssSyntax.ColumnToken = ColumnToken; - cssSyntax.WhitespaceToken = WhitespaceToken; - cssSyntax.CDOToken = CDOToken; - cssSyntax.CDCToken = CDCToken; - cssSyntax.ColonToken = ColonToken; - cssSyntax.SemicolonToken = SemicolonToken; - cssSyntax.CommaToken = CommaToken; - cssSyntax.OpenParenToken = OpenParenToken; - cssSyntax.CloseParenToken = CloseParenToken; - cssSyntax.OpenSquareToken = OpenSquareToken; - cssSyntax.CloseSquareToken = CloseSquareToken; - cssSyntax.OpenCurlyToken = OpenCurlyToken; - cssSyntax.CloseCurlyToken = CloseCurlyToken; - cssSyntax.EOFToken = EOFToken; - cssSyntax.CSSParserToken = CSSParserToken; - cssSyntax.GroupingToken = GroupingToken; - - // - // css parser - // - - function TokenStream(tokens) { - // Assume that tokens is an array. - this.tokens = tokens; - this.i = -1; - } - - TokenStream.prototype.tokenAt = function(i) { - if (i < this.tokens.length) return this.tokens[i]; - return new EOFToken(); - }; - TokenStream.prototype.consume = function(num) { - if (num === undefined) num = 1; - this.i += num; - this.token = this.tokenAt(this.i); - //console.log(this.i, this.token); - return true; - }; - TokenStream.prototype.next = function() { - return this.tokenAt(this.i + 1); - }; - TokenStream.prototype.reconsume = function() { - this.i--; - }; - - function parseerror(s, msg) { - console.log("Parse error at token " + s.i + ": " + s.token + ".\n" + msg); - return true; - } - - function donothing() { - return true; - } - - function consumeAListOfRules(s, topLevel) { - var rules = new TokenList(); - var rule; - while (s.consume()) { - if (s.token instanceof WhitespaceToken) { - continue; - } else if (s.token instanceof EOFToken) { - return rules; - } else if (s.token instanceof CDOToken || s.token instanceof CDCToken) { - if (topLevel == "top-level") continue; - s.reconsume(); - if ((rule = consumeAStyleRule(s))) rules.push(rule); - } else if (s.token instanceof AtKeywordToken) { - s.reconsume(); - if ((rule = consumeAnAtRule(s))) rules.push(rule); - } else { - s.reconsume(); - if ((rule = consumeAStyleRule(s))) rules.push(rule); - } - } - } - - function consumeAnAtRule(s) { - s.consume(); - var rule = new AtRule(s.token.value); - while (s.consume()) { - if (s.token instanceof SemicolonToken || s.token instanceof EOFToken) { - return rule; - } else if (s.token instanceof OpenCurlyToken) { - rule.value = consumeASimpleBlock(s); - return rule; - } else if (s.token instanceof SimpleBlock && s.token.name == "{") { - rule.value = s.token; - return rule; - } else { - s.reconsume(); - rule.prelude.push(consumeAComponentValue(s)); - } - } - } - - function consumeAStyleRule(s) { - var rule = new StyleRule(); - while (s.consume()) { - if (s.token instanceof EOFToken) { - parseerror(s, "Hit EOF when trying to parse the prelude of a qualified rule."); - return; - } else if (s.token instanceof OpenCurlyToken) { - rule.value = consumeASimpleBlock(s); - return rule; - } else if (s.token instanceof SimpleBlock && s.token.name == "{") { - rule.value = s.token; - return rule; - } else { - s.reconsume(); - rule.prelude.push(consumeAComponentValue(s)); - } - } - } - - function consumeAListOfDeclarations(s) { - var decls = new TokenList(); - while (s.consume()) { - if (s.token instanceof WhitespaceToken || s.token instanceof SemicolonToken) { - donothing(); - } else if (s.token instanceof EOFToken) { - return decls; - } else if (s.token instanceof AtKeywordToken) { - s.reconsume(); - decls.push(consumeAnAtRule(s)); - } else if (s.token instanceof IdentifierToken) { - var temp = [s.token]; - while (!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken)) temp.push(consumeAComponentValue(s)); - var decl; - if ((decl = consumeADeclaration(new TokenStream(temp)))) decls.push(decl); - } else { - parseerror(s); - s.reconsume(); - while (!(s.next() instanceof SemicolonToken || s.next() instanceof EOFToken)) consumeAComponentValue(s); - } - } - } - - function consumeADeclaration(s) { - // Assumes that the next input token will be an ident token. - s.consume(); - var decl = new Declaration(s.token.value); - while (s.next() instanceof WhitespaceToken) s.consume(); - if (!(s.next() instanceof ColonToken)) { - parseerror(s); - return; - } else { - s.consume(); - } - while (!(s.next() instanceof EOFToken)) { - decl.value.push(consumeAComponentValue(s)); - } - var foundImportant = false; - for (var i = decl.value.length - 1; i >= 0; i--) { - if (decl.value[i] instanceof WhitespaceToken) { - continue; - } else if (decl.value[i] instanceof IdentifierToken && decl.value[i].ASCIIMatch("important")) { - foundImportant = true; - } else if (foundImportant && decl.value[i] instanceof DelimToken && decl.value[i].value == "!") { - decl.value.splice(i, decl.value.length); - decl.important = true; - break; - } else { - break; - } - } - return decl; - } - - function consumeAComponentValue(s) { - s.consume(); - if (s.token instanceof OpenCurlyToken || s.token instanceof OpenSquareToken || s.token instanceof OpenParenToken) - return consumeASimpleBlock(s); - if (s.token instanceof FunctionToken) return consumeAFunction(s); - return s.token; - } - - function consumeASimpleBlock(s) { - var mirror = s.token.mirror; - var block = new SimpleBlock(s.token.value); - while (s.consume()) { - if (s.token instanceof EOFToken || (s.token instanceof GroupingToken && s.token.value == mirror)) return block; - else { - s.reconsume(); - block.value.push(consumeAComponentValue(s)); - } - } - } - - function consumeAFunction(s) { - var func = new Func(s.token.value); - while (s.consume()) { - if (s.token instanceof EOFToken || s.token instanceof CloseParenToken) return func; - else { - s.reconsume(); - func.value.push(consumeAComponentValue(s)); - } - } - } - - function normalizeInput(input) { - if (typeof input == "string") return new TokenStream(tokenize(input)); - if (input instanceof TokenStream) return input; - if (input.length !== undefined) return new TokenStream(input); - else throw SyntaxError(input); - } - - function parseAStylesheet(s) { - s = normalizeInput(s); - var sheet = new Stylesheet(); - sheet.value = consumeAListOfRules(s, "top-level"); - return sheet; - } - - function parseAListOfRules(s) { - s = normalizeInput(s); - return consumeAListOfRules(s); - } - - function parseARule(s) { - s = normalizeInput(s); - while (s.next() instanceof WhitespaceToken) s.consume(); - if (s.next() instanceof EOFToken) throw SyntaxError(); - if (s.next() instanceof AtKeywordToken) { - var rule = consumeAnAtRule(s); - } else { - var rule = consumeAStyleRule(s); - if (!rule) throw SyntaxError(); - } - while (s.next() instanceof WhitespaceToken) s.consume(); - if (s.next() instanceof EOFToken) return rule; - throw SyntaxError(); - } - - function parseADeclaration(s) { - s = normalizeInput(s); - while (s.next() instanceof WhitespaceToken) s.consume(); - if (!(s.next() instanceof IdentifierToken)) throw SyntaxError(); - var decl = consumeADeclaration(s); - if (!decl) { - throw new SyntaxError(); - } - return decl; - } - - function parseAListOfDeclarations(s) { - s = normalizeInput(s); - return consumeAListOfDeclarations(s); - } - - function parseAComponentValue(s) { - s = normalizeInput(s); - while (s.next() instanceof WhitespaceToken) s.consume(); - if (s.next() instanceof EOFToken) throw SyntaxError(); - var val = consumeAComponentValue(s); - if (!val) throw SyntaxError(); - while (s.next() instanceof WhitespaceToken) s.consume(); - if (!(s.next() instanceof EOFToken)) throw new SyntaxError(); - return val; - } - - function parseAListOfComponentValues(s) { - s = normalizeInput(s); - var vals = new TokenList(); - while (true) { - var val = consumeAComponentValue(s); - if (val instanceof EOFToken) return vals; - else vals.push(val); - } - } - - function parseACommaSeparatedListOfComponentValues(s) { - s = normalizeInput(s); - var listOfCVLs = new TokenList(); - while (true) { - var vals = new TokenList(); - while (true) { - var val = consumeAComponentValue(s); - if (val instanceof EOFToken) { - listOfCVLs.push(vals); - return listOfCVLs; - } else if (val instanceof CommaToken) { - listOfCVLs.push(vals); - break; - } else { - vals.push(val); - } - } - } - } - - function CSSParserRule() { - return this; - } - - CSSParserRule.prototype.toString = function(indent) { - return JSON.stringify(this, null, indent); - }; - - function Stylesheet() { - this.value = new TokenList(); - return this; - } - - Stylesheet.prototype = new CSSParserRule(); - Stylesheet.prototype.type = "STYLESHEET"; - Stylesheet.prototype.toCSSString = function() { - return this.value.toCSSString("\n"); - }; - - function AtRule(name) { - this.name = name; - this.prelude = new TokenList(); - this.value = null; - return this; - } - - AtRule.prototype = new CSSParserRule(); - AtRule.prototype.toCSSString = function() { - if (this.value) { - return "@" + escapeIdent(this.name) + " " + this.prelude.toCSSString() + this.value.toCSSString(); - } else { - return "@" + escapeIdent(this.name) + " " + this.prelude.toCSSString() + "; "; - } - }; - AtRule.prototype.toStylesheet = function() { - return this.asStylesheet || (this.asStylesheet = this.value ? parseAStylesheet(this.value.value) : new Stylesheet()); - }; - - function StyleRule() { - this.prelude = new TokenList(); - this.selector = this.prelude; - this.value = null; - return this; - } - - StyleRule.prototype = new CSSParserRule(); - StyleRule.prototype.type = "STYLE-RULE"; - StyleRule.prototype.toCSSString = function() { - return this.prelude.toCSSString() + this.value.toCSSString(); - }; - StyleRule.prototype.getSelector = function() { - return this.prelude; - }; - StyleRule.prototype.getDeclarations = function() { - if (!(this.value instanceof SimpleBlock)) { - return new TokenList(); - } - var value = this.value.value; - return parseAListOfDeclarations(value); - }; - - function Declaration(name) { - this.name = name; - this.value = new TokenList(); - this.important = false; - return this; - } - - Declaration.prototype = new CSSParserRule(); - Declaration.prototype.type = "DECLARATION"; - Declaration.prototype.toCSSString = function() { - return this.name + ":" + this.value.toCSSString() + "; "; - }; - - function SimpleBlock(type) { - this.name = type; - this.value = new TokenList(); - return this; - } - - SimpleBlock.prototype = new CSSParserRule(); - SimpleBlock.prototype.type = "BLOCK"; - SimpleBlock.prototype.toCSSString = function() { - switch (this.name) { - case "(": - return "(" + this.value.toCSSString() + ")"; - - case "[": - return "[" + this.value.toCSSString() + "]"; - - case "{": - return "{" + this.value.toCSSString() + "}"; - - default: - //best guess - return this.name + this.value.toCSSString() + this.name; - } - }; - - function Func(name) { - this.name = name; - this.value = new TokenList(); - return this; - } - - Func.prototype = new CSSParserRule(); - Func.prototype.type = "FUNCTION"; - Func.prototype.toCSSString = function() { - return this.name + "(" + this.value.toCSSString() + ")"; - }; - Func.prototype.getArguments = function() { - var args = new TokenList(); - var arg = new TokenList(); - var value = this.value; - for (var i = 0; i < value.length; i++) { - if (value[i].tokenType == ",") { - args.push(arg); - arg = new TokenList(); - } else { - arg.push(value[i]); - } - } - if (args.length > 0 || arg.length > 0) { - args.push(arg); - } - return args; - }; - - function FuncArg() { - this.value = new TokenList(); - return this; - } - - FuncArg.prototype = new CSSParserRule(); - FuncArg.prototype.type = "FUNCTION-ARG"; - FuncArg.prototype.toCSSString = function() { - return this.value.toCSSString() + ", "; - }; - - // Exportation. - cssSyntax.CSSParserRule = CSSParserRule; - cssSyntax.Stylesheet = Stylesheet; - cssSyntax.AtRule = AtRule; - cssSyntax.StyleRule = StyleRule; - cssSyntax.Declaration = Declaration; - cssSyntax.SimpleBlock = SimpleBlock; - cssSyntax.Func = Func; - cssSyntax.parseAStylesheet = parseAStylesheet; - cssSyntax.parseAListOfRules = parseAListOfRules; - cssSyntax.parseARule = parseARule; - cssSyntax.parseADeclaration = parseADeclaration; - cssSyntax.parseAListOfDeclarations = parseAListOfDeclarations; - cssSyntax.parseAComponentValue = parseAComponentValue; - cssSyntax.parseAListOfComponentValues = parseAListOfComponentValues; - cssSyntax.parseACommaSeparatedListOfComponentValues = parseACommaSeparatedListOfComponentValues; - cssSyntax.parse = parseAStylesheet; - cssSyntax.parseCSSValue = parseAListOfComponentValues; - - return cssSyntax; - })(); - - require.define("src/core/css-syntax.js"); - - //////////////////////////////////////// - - module.exports = (function(window, document) { - "use strict"; - - require("src/core/polyfill-dom-console.js"); - - // - // some other basic om code - // - var domEvents = { - // - // the following functions are about event cloning - // - cloneMouseEvent: function cloneMouseEvent(e) { - var evt = document.createEvent("MouseEvent"); - evt.initMouseEvent( - e.type, - e.canBubble || e.bubbles, - e.cancelable, - e.view, - e.detail, - e.screenX, - e.screenY, - e.clientX, - e.clientY, - e.ctrlKey, - e.altKey, - e.shiftKey, - e.metaKey, - e.button, - e.relatedTarget - ); - return evt; - }, - - cloneKeyboardEvent: function cloneKeyboardEvent(e) { - // TODO: this doesn't work cross-browser... - // see https://gist.github.com/termi/4654819/ for the huge code - return domEvents.cloneCustomEvent(e); - }, - - cloneCustomEvent: function cloneCustomEvent(e) { - var ne = document.createEvent("CustomEvent"); - ne.initCustomEvent(e.type, e.canBubble || e.bubbles, e.cancelable, "detail" in e ? e.detail : e); - for (var prop in e) { - try { - if (e[prop] != ne[prop] && e[prop] != e.target) { - try { - ne[prop] = e[prop]; - } catch (ex) { - Object.defineProperty(ne, prop, { - get: function() { - return e[prop]; - } - }); - } - } - } catch (ex) {} - } - return ne; - }, - - cloneEvent: function cloneEvent(e) { - if (e instanceof MouseEvent) { - return domEvents.cloneMouseEvent(e); - } else if (e instanceof KeyboardEvent) { - return domEvents.cloneKeyboardEvent(e); - } else { - return domEvents.cloneCustomEvent(e); - } - }, - - // - // allows you to drop event support to any class easily - // - EventTarget: { - implementsIn: function(eventClass, static_class) { - if (!static_class && typeof eventClass == "function") eventClass = eventClass.prototype; - - eventClass.dispatchEvent = domEvents.EventTarget.prototype.dispatchEvent; - eventClass.addEventListener = domEvents.EventTarget.prototype.addEventListener; - eventClass.removeEventListener = domEvents.EventTarget.prototype.removeEventListener; - }, - prototype: {} - } - }; - - domEvents.EventTarget.prototype.addEventListener = function(eventType, f) { - if (!this.eventListeners) this.eventListeners = []; - - var ls = this.eventListeners[eventType] || (this.eventListeners[eventType] = []); - if (ls.indexOf(f) == -1) { - ls.push(f); - } - }; - - domEvents.EventTarget.prototype.removeEventListener = function(eventType, f) { - if (!this.eventListeners) this.eventListeners = []; - - var ls = this.eventListeners[eventType] || (this.eventListeners[eventType] = []), - i; - if ((i = ls.indexOf(f)) !== -1) { - ls.splice(i, 1); - } - }; - - domEvents.EventTarget.prototype.dispatchEvent = function(event_or_type) { - if (!this.eventListeners) this.eventListeners = []; - - // abort quickly when no listener has been set up - if (typeof event_or_type == "string") { - if (!this.eventListeners[event_or_type] || this.eventListeners[event_or_type].length == 0) { - return; - } - } else { - if (!this.eventListeners[event_or_type.type] || this.eventListeners[event_or_type.type].length == 0) { - return; - } - } - - // convert the event - var event = event_or_type; - - function setUpPropertyForwarding(e, ee, key) { - Object.defineProperty(ee, key, { - get: function() { - var v = e[key]; - if (typeof v == "function") { - return v.bind(e); - } else { - return v; - } - }, - set: function(v) { - e[key] = v; - } - }); - } - - function setUpTarget(e, v) { - try { - Object.defineProperty(e, "target", { - get: function() { - return v; - } - }); - } catch (ex) { - } finally { - if (e.target !== v) { - var ee = Object.create(Object.getPrototypeOf(e)); - ee = setUpTarget(ee, v); - for (key in e) { - if (key != "target") setUpPropertyForwarding(e, ee, key); - } - return ee; - } else { - return e; - } - } - } - - // try to set the target - if (typeof event == "object") { - try { - event = setUpTarget(event, this); - } catch (ex) {} - } else if (typeof event == "string") { - event = document.createEvent("CustomEvent"); - event.initCustomEvent(event_or_type, /*canBubble:*/ true, /*cancelable:*/ false, /*detail:*/ this); - try { - event = setUpTarget(event, this); - } catch (ex) {} - } else { - throw new Error("dispatchEvent expect an Event object or a string containing the event type"); - } - - // call all listeners - var ls = this.eventListeners[event.type] || (this.eventListeners[event.type] = []); - for (var i = ls.length; i--; ) { - try { - ls[i](event); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - } - - return event.isDefaultPrevented; - }; - - return domEvents; - })(window, document); - require.define("src/core/dom-events.js"); - - //////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - //// //// - //// prerequirements of qSL //// - //// //// - ///////////////////////////////////////////////////////////////// - //// //// - //// Please note that I require querySelectorAll to work //// - //// //// - //// See http://github.com/termi/CSS_selector_engine/ //// - //// for a polyfill for older browsers //// - //// //// - ///////////////////////////////////////////////////////////////// - - // TODO: improve event streams - // - look for a few optimizations ideas in gecko/webkit - // - use arrays in CompositeEventStream to avoid nested debouncings - module.exports = (function(window, document) { - "use strict"; - - /// - /// event stream implementation - /// please note this is required to 'live update' the qSA requests - /// - function EventStream(connect, disconnect, reconnect) { - var self = this; - - // validate arguments - if (!disconnect) disconnect = function() {}; - if (!reconnect) reconnect = connect; - - // high-level states - var isConnected = false; - var isDisconnected = false; - var shouldDisconnect = false; - - // global variables - var callback = null; - var yieldEvent = function() { - // call the callback function, and pend disposal - shouldDisconnect = true; - try { - callback && callback(self); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - - // if no action was taken, dispose - if (shouldDisconnect) { - dispose(); - } - }; - - // export the interface - var schedule = (this.schedule = function(newCallback) { - // do not allow to schedule on disconnected event streams - if (isDisconnected) { - throw new Error("Cannot schedule on a disconnected event stream"); - } - - // do not allow to schedule on already scheduled event streams - if (isConnected && !shouldDisconnect) { - throw new Error("Cannot schedule on an already-scheduled event stream"); - } - - // schedule the new callback - callback = newCallback; - shouldDisconnect = false; - - // reconnect to the stream - if (isConnected) { - reconnect(yieldEvent); - } else { - connect(yieldEvent); - isConnected = true; - } - }); - - var dispose = (this.dispose = function() { - // do not allow to dispose non-connected streams - if (isConnected) { - // disconnect & save resources - disconnect(); - self = null; - yieldEvent = null; - callback = null; - isConnected = false; - isDisconnected = true; - shouldDisconnect = false; - } - }); - } - - /// - /// call a function every frame - /// - function AnimationFrameEventStream(options) { - // flag that says whether the observer is still needed or not - var rid = 0; - - // start the event stream - EventStream.call( - this, - function connect(yieldEvent) { - rid = requestAnimationFrame(yieldEvent); - }, - function disconnect() { - cancelAnimationFrame(rid); - } - ); - } - - /// - /// call a function every timeout - /// - function TimeoutEventStream(options) { - // flag that says whether the observer is still needed or not - var rid = 0; - var timeout = typeof options == "number" ? +options : "timeout" in options ? +options.timeout : 333; - - // start the event stream - EventStream.call( - this, - function connect(yieldEvent) { - rid = setTimeout(yieldEvent, timeout); - }, - function disconnect() { - clearTimeout(rid); - } - ); - } - - /// - /// call a function every time the mouse moves - /// - function MouseEventStream() { - var self = this; - var pointermove = "PointerEvent" in window ? "pointermove" : "MSPointerEvent" in window ? "MSPointerMove" : "mousemove"; - - // flag that says whether the event is still observed or not - var scheduled = false; - var interval = 0; - - // handle the synchronous nature of mutation events - var yieldEvent = null; - var yieldEventDelayed = function() { - if (scheduled) return; - window.removeEventListener(pointermove, yieldEventDelayed, true); - scheduled = requestAnimationFrame(yieldEvent); - }; - - // start the event stream - EventStream.call( - this, - function connect(newYieldEvent) { - yieldEvent = newYieldEvent; - window.addEventListener(pointermove, yieldEventDelayed, true); - }, - function disconnect() { - window.removeEventListener(pointermove, yieldEventDelayed, true); - cancelAnimationFrame(scheduled); - yieldEventDelayed = null; - yieldEvent = null; - scheduled = false; - }, - function reconnect(newYieldEvent) { - yieldEvent = newYieldEvent; - scheduled = false; - window.addEventListener(pointermove, yieldEventDelayed, true); - } - ); - } - - /// - /// call a function every time the mouse is clicked/unclicked - /// - function MouseButtonEventStream() { - var self = this; - var pointerup = "PointerEvent" in window ? "pointerup" : "MSPointerEvent" in window ? "MSPointerUp" : "mouseup"; - var pointerdown = "PointerEvent" in window ? "pointerdown" : "MSPointerEvent" in window ? "MSPointerDown" : "mousedown"; - - // flag that says whether the event is still observed or not - var scheduled = false; - var interval = 0; - - // handle the synchronous nature of mutation events - var yieldEvent = null; - var yieldEventDelayed = function() { - if (scheduled) return; - window.removeEventListener(pointerup, yieldEventDelayed, true); - window.removeEventListener(pointerdown, yieldEventDelayed, true); - scheduled = requestAnimationFrame(yieldEvent); - }; - - // start the event stream - EventStream.call( - this, - function connect(newYieldEvent) { - yieldEvent = newYieldEvent; - window.addEventListener(pointerup, yieldEventDelayed, true); - window.addEventListener(pointerdown, yieldEventDelayed, true); - }, - function disconnect() { - window.removeEventListener(pointerup, yieldEventDelayed, true); - window.removeEventListener(pointerdown, yieldEventDelayed, true); - cancelAnimationFrame(scheduled); - yieldEventDelayed = null; - yieldEvent = null; - scheduled = false; - }, - function reconnect(newYieldEvent) { - yieldEvent = newYieldEvent; - scheduled = false; - window.addEventListener(pointerup, yieldEventDelayed, true); - window.addEventListener(pointerdown, yieldEventDelayed, true); - } - ); - } - - /// - /// call a function whenever the DOM is modified - /// - var DOMUpdateEventStream; - if ("MutationObserver" in window) { - DOMUpdateEventStream = function DOMUpdateEventStream(options) { - // configuration of the observer - if (options) { - var target = "target" in options ? options.target : document.documentElement; - var config = { - subtree: "subtree" in options ? !!options.subtree : true, - attributes: "attributes" in options ? !!options.attributes : true, - childList: "childList" in options ? !!options.childList : true, - characterData: "characterData" in options ? !!options.characterData : false - }; - } else { - var target = document.documentElement; - var config = { - subtree: true, - attributes: true, - childList: true, - characterData: false - }; - } - - // start the event stream - var observer = null; - EventStream.call( - this, - function connect(yieldEvent) { - if (config) { - observer = new MutationObserver(yieldEvent); - observer.observe(target, config); - target = null; - config = null; - } - }, - function disconnect() { - observer && observer.disconnect(); - observer = null; - }, - function reconnect() { - observer.takeRecords(); - } - ); - }; - } else if ("MutationEvent" in window) { - DOMUpdateEventStream = function DOMUpdateEventStream(options) { - var self = this; - - // flag that says whether the event is still observed or not - var scheduled = false; - - // configuration of the observer - if (options) { - var target = "target" in options ? options.target : document.documentElement; - } else { - var target = document.documentElement; - } - - // handle the synchronous nature of mutation events - var yieldEvent = null; - var yieldEventDelayed = function() { - if (scheduled || !yieldEventDelayed) return; - document.removeEventListener("DOMContentLoaded", yieldEventDelayed, false); - document.removeEventListener("DOMContentLoaded", yieldEventDelayed, false); - target.removeEventListener("DOMSubtreeModified", yieldEventDelayed, false); - scheduled = requestAnimationFrame(yieldEvent); - }; - - // start the event stream - EventStream.call( - this, - function connect(newYieldEvent) { - yieldEvent = newYieldEvent; - document.addEventListener("DOMContentLoaded", yieldEventDelayed, false); - target.addEventListener("DOMSubtreeModified", yieldEventDelayed, false); - }, - function disconnect() { - document.removeEventListener("DOMContentLoaded", yieldEventDelayed, false); - target.removeEventListener("DOMSubtreeModified", yieldEventDelayed, false); - cancelAnimationFrame(scheduled); - yieldEventDelayed = null; - yieldEvent = null; - scheduled = false; - }, - function reconnect(newYieldEvent) { - yieldEvent = newYieldEvent; - scheduled = false; - target.addEventListener("DOMSubtreeModified", yieldEventDelayed, false); - } - ); - }; - } else { - DOMUpdateEventStream = AnimationFrameEventStream; - } - - /// - /// call a function every time the focus shifts - /// - function FocusEventStream() { - var self = this; - - // handle the filtering nature of focus events - var yieldEvent = null; - var previousActiveElement = null; - var previousHasFocus = false; - var rid = 0; - var yieldEventDelayed = function() { - // if the focus didn't change - if (previousActiveElement == document.activeElement && previousHasFocus == document.hasFocus()) { - // then do not generate an event - setTimeout(yieldEventDelayed, 333); // focus that didn't move is expected to stay - } else { - // else, generate one & save config - previousActiveElement = document.activeElement; - previousHasFocus = document.hasFocus(); - yieldEvent(); - } - }; - - // start the event stream - EventStream.call( - this, - function connect(newYieldEvent) { - yieldEvent = newYieldEvent; - rid = setTimeout(yieldEventDelayed, 500); // let the document load - }, - function disconnect() { - clearTimeout(rid); - yieldEventDelayed = null; - yieldEvent = null; - rid = 0; - }, - function reconnect(newYieldEvent) { - yieldEvent = newYieldEvent; - rid = setTimeout(yieldEventDelayed, 100); // focus by tab navigation moves fast - } - ); - } - - /// - /// composite event stream - /// because sometimes you need more than one event source - /// - function CompositeEventStream(stream1, stream2) { - var self = this; - - // fields - var yieldEvent = null; - var s1 = false, - s2 = false; - var yieldEventWrapper = function(s) { - if (s == stream1) s1 = true; - if (s == stream2) s2 = true; - if (s1 && s2) return; - yieldEvent(self); - }; - - // start the event stream - EventStream.call( - this, - function connect(newYieldEvent) { - yieldEvent = newYieldEvent; - stream1.schedule(yieldEventWrapper); - stream2.schedule(yieldEventWrapper); - }, - function disconnect() { - stream1.dispose(); - stream2.dispose(); - }, - function reconnect(newYieldEvent) { - yieldEvent = newYieldEvent; - s1 && stream1.schedule(yieldEventWrapper); - s2 && stream2.schedule(yieldEventWrapper); - s1 = s2 = false; - } - ); - } - - return { - EventStream: EventStream, - AnimationFrameEventStream: AnimationFrameEventStream, - TimeoutEventStream: TimeoutEventStream, - MouseEventStream: MouseEventStream, - MouseButtonEventStream: MouseButtonEventStream, - DOMUpdateEventStream: DOMUpdateEventStream, - FocusEventStream: FocusEventStream, - CompositeEventStream: CompositeEventStream - }; - })(window, document); - require.define("src/core/dom-experimental-event-streams.js"); - - //////////////////////////////////////// - - ///////////////////////////////////////////////////////////////// - //// //// - //// Implementation of qSL //// - //// //// - ///////////////////////////////////////////////////////////////// - //// //// - //// Please note that I require querySelectorAll to work //// - //// //// - //// See http://github.com/termi/CSS_selector_engine/ //// - //// for a polyfill for older browsers //// - //// //// - ///////////////////////////////////////////////////////////////// - - module.exports = (function(window, document) { - "use strict"; - - // import dependencies - var eventStreams = require("src/core/dom-experimental-event-streams.js"), - DOMUpdateEventStream = eventStreams.DOMUpdateEventStream, - AnimationFrameEventStream = eventStreams.AnimationFrameEventStream, - CompositeEventStream = eventStreams.CompositeEventStream, - FocusEventStream = eventStreams.FocusEventStream, - MouseButtonEventStream = eventStreams.MouseButtonEventStream, - TimeoutEventStream = eventStreams.TimeoutEventStream, - MouseEventStream = eventStreams.MouseEventStream; - - /// - /// the live querySelectorAll implementation - /// - function querySelectorLive(selector, handler, root) { - // restrict the selector coverage to some part of the DOM only - var root = root || document; - - // TODO: make use of "mutatedAncestorElement" to update only elements inside the mutated zone - - var currentElms = []; - var loop = function loop(eventStream) { - // schedule next run - eventStream.schedule(loop); - - // update elements matching the selector - var newElms = []; - var oldElms = currentElms.slice(0); - var temps = root.querySelectorAll(selector); - for (var i = (newElms.length = temps.length); i; ) { - newElms.push(temps[--i]); - } - currentElms = newElms.slice(0); - temps = null; - - // first let's clear all elements that have been removed from the document - oldElms = oldElms.filter(function(e) { - // check whether the current element is still there - var isStillInDocument = e === document.documentElement || document.documentElement.contains(e); - - if (isStillInDocument) { - // NEED_COMPARE: we will compare this element to the new list - return true; - } else { - // DELETE: raise onremoved, pop old elements - try { - handler.onremoved && handler.onremoved(e); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - return false; - } - }); - - // now pop and match until both lists are exhausted - // (we use the fact the returned elements are in document order) - var el1 = oldElms.pop(); - var el2 = newElms.pop(); - while (el1 || el2) { - if (el1 === el2) { - // MATCH: pop both elements - el1 = oldElms.pop(); - el2 = newElms.pop(); - } else if (el2 && /*el1 is after el2*/ (!el1 || (el2.compareDocumentPosition(el1) & (1 | 2 | 8 | 32)) === 0)) { - // INSERT: raise onadded, pop new elements - try { - handler.onadded && handler.onadded(el2); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - el2 = newElms.pop(); - } else { - // DELETE: raise onremoved, pop old elements - try { - handler.onremoved && handler.onremoved(el1); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - el1 = oldElms.pop(); - } - } - }; - - // use the event stream that best matches our needs - var simpleSelector = selector.replace( - /:(dir|lang|root|empty|blank|nth-child|nth-last-child|first-child|last-child|only-child|nth-of-type|nth-last-of-child|fist-of-type|last-of-type|only-of-type|not|matches|default)\b/gi, - "" - ); - var eventStream; - if (simpleSelector.indexOf(":") == -1) { - // static stuff only - eventStream = new DOMUpdateEventStream({ target: root }); - } else { - // dynamic stuff too - eventStream = new DOMUpdateEventStream({ target: root }); - if (DOMUpdateEventStream != AnimationFrameEventStream) { - // detect the presence of focus-related pseudo-classes - var reg = /:(focus|active)\b/gi; - if (reg.test(simpleSelector)) { - // mouse events should be listened - eventStream = new CompositeEventStream(new FocusEventStream(), eventStream); - - // simplify simpleSelector - var reg = /:(focus)\b/gi; - simpleSelector = simpleSelector.replace(reg, ""); // :active has other hooks - } - - // detect the presence of mouse-button-related pseudo-classes - var reg = /:(active)\b/gi; - if (reg.test(simpleSelector)) { - // mouse events should be listened - eventStream = new CompositeEventStream(new MouseButtonEventStream(), eventStream); - - // simplify simpleSelector - simpleSelector = simpleSelector.replace(reg, ""); - } - - // detect the presence of user input pseudo-classes - var reg = /:(target|checked|indeterminate|valid|invalid|in-range|out-of-range|user-error)\b/gi; - if (reg.test(simpleSelector)) { - // slowly dynamic stuff do happen - eventStream = new CompositeEventStream(new TimeoutEventStream(250), eventStream); - - // simplify simpleSelector - simpleSelector = simpleSelector.replace(reg, ""); - - var reg = /:(any-link|link|visited|local-link|enabled|disabled|read-only|read-write|required|optional)\b/gi; - // simplify simpleSelector - simpleSelector = simpleSelector.replace(reg, ""); - } - - // detect the presence of nearly-static pseudo-classes - var reg = /:(any-link|link|visited|local-link|enabled|disabled|read-only|read-write|required|optional)\b/gi; - if (reg.test(simpleSelector)) { - // nearly static stuff do happen - eventStream = new CompositeEventStream(new TimeoutEventStream(333), eventStream); - - // simplify simpleSelector - simpleSelector = simpleSelector.replace(reg, ""); - } - - // detect the presence of mouse-related pseudo-classes - var reg = /:(hover)\b/gi; - if (reg.test(simpleSelector)) { - // mouse events should be listened - eventStream = new CompositeEventStream(new MouseEventStream(), eventStream); - - // simplify simpleSelector - simpleSelector = simpleSelector.replace(reg, ""); - } - - // detect the presence of unknown pseudo-classes - if (simpleSelector.indexOf(":") !== -1) { - // other stuff do happen, too (let's give up on events) - eventStream = new AnimationFrameEventStream(); - } - } - } - - // start handling changes - loop(eventStream); - } - - return querySelectorLive; - })(window, document); - require.define("src/core/dom-query-selector-live.js"); - - //////////////////////////////////////// - - // TODO: comment about the 'no_auto_stylesheet_detection' flag? - - module.exports = (function(window, document) { - "use strict"; - - // import dependencies - require("src/core/polyfill-dom-console.js"); - require("src/core/polyfill-dom-requestAnimationFrame.js"); - var cssSyntax = require("src/core/css-syntax.js"); - var domEvents = require("src/core/dom-events.js"); - var querySelectorLive = require("src/core/dom-query-selector-live.js"); - - // define the module - var cssCascade = { - // - // returns the priority of a unique selector (NO COMMA!) - // { the return value is an integer, with the same formula as webkit } - // - computeSelectorPriorityOf: function computeSelectorPriorityOf(selector) { - if (typeof selector == "string") selector = cssSyntax.parse(selector.trim() + "{}").value[0].selector; - - var numberOfIDs = 0; - var numberOfClasses = 0; - var numberOfTags = 0; - - // TODO: improve this parser, or find one on the web - for (var i = 0; i < selector.length; i++) { - if (selector[i] instanceof cssSyntax.IdentifierToken) { - numberOfTags++; - } else if (selector[i] instanceof cssSyntax.DelimToken) { - if (selector[i].value == ".") { - numberOfClasses++; - i++; - } - } else if (selector[i] instanceof cssSyntax.ColonToken) { - if (selector[++i] instanceof cssSyntax.ColonToken) { - numberOfTags++; - i++; - } else if (selector[i] instanceof cssSyntax.Func && /^(not|matches)$/i.test(selector[i].name)) { - var nestedPriority = this.computeSelectorPriorityOf(selector[i].value); - numberOfTags += nestedPriority % 256; - nestedPriority /= 256; - numberOfClasses += nestedPriority % 256; - nestedPriority /= 256; - numberOfIDs += nestedPriority; - } else { - numberOfClasses++; - } - } else if (selector[i] instanceof cssSyntax.SimpleBlock) { - if (selector[i].name == "[") { - numberOfClasses++; - } - } else if (selector[i] instanceof cssSyntax.HashToken) { - numberOfIDs++; - } else { - // TODO: stop ignoring unknown symbols? - } - } - - if (numberOfIDs > 255) numberOfIds = 255; - if (numberOfClasses > 255) numberOfClasses = 255; - if (numberOfTags > 255) numberOfTags = 255; - - return (numberOfIDs * 256 + numberOfClasses) * 256 + numberOfTags; - }, - - // - // returns an array of the css rules matching an element - // - findAllMatchingRules: function findAllMatchingRules(element) { - return this.findAllMatchingRulesWithPseudo(element); - }, - - // - // returns an array of the css rules matching a pseudo-element - // - findAllMatchingRulesWithPseudo: function findAllMatchingRules(element, pseudo) { - pseudo = pseudo ? ("" + pseudo).toLowerCase() : pseudo; - - // let's look for new results if needed... - var results = []; - - // walk the whole stylesheet... - var visit = function(rules) { - try { - for (var r = rules.length; r--; ) { - var rule = rules[r]; - - // media queries hook - if (rule.disabled) continue; - - if (rule instanceof cssSyntax.StyleRule) { - // consider each selector independently - var subrules = rule.subRules || cssCascade.splitRule(rule); - for (var sr = subrules.length; sr--; ) { - var selector = subrules[sr].selector - .toCSSString() - .replace(/ *(\/\*\*\/| ) */g, " ") - .trim(); - if (pseudo) { - // WE ONLY ACCEPT SELECTORS ENDING WITH THE PSEUDO - var selectorLow = selector.toLowerCase(); - var newLength = selector.length - pseudo.length - 1; - if (newLength <= 0) continue; - - if (selectorLow.lastIndexOf("::" + pseudo) == newLength - 1) { - selector = selector.substr(0, newLength - 1); - } else if (selectorLow.lastIndexOf(":" + pseudo) == newLength) { - selector = selector.substr(0, newLength); - } else { - continue; - } - - // fix selectors like "#element > :first-child ~ ::before" - if (selector.trim().length == 0) { - selector = "*"; - } else if (selector[selector.length - 1] == " ") { - selector += "*"; - } else if (selector[selector.length - 1] == "+") { - selector += "*"; - } else if (selector[selector.length - 1] == ">") { - selector += "*"; - } else if (selector[selector.length - 1] == "~") { - selector += "*"; - } - } - - // look if the selector matches - var isMatching = false; - try { - if (element.matches) isMatching = element.matches(selector); - else if (element.matchesSelector) isMatching = element.matchesSelector(selector); - else if (element.oMatchesSelector) isMatching = element.oMatchesSelector(selector); - else if (element.msMatchesSelector) isMatching = element.msMatchesSelector(selector); - else if (element.mozMatchesSelector) isMatching = element.mozMatchesSelector(selector); - else if (element.webkitMatchesSelector) isMatching = element.webkitMatchesSelector(selector); - else { - throw new Error("no element.matches?"); - } - } catch (ex) { - debugger; - setImmediate(function() { - throw ex; - }); - } - - // if yes, add it to the list of matched selectors - if (isMatching) { - results.push(subrules[sr]); - } - } - } else if (rule instanceof cssSyntax.AtRule && rule.name == "media") { - // visit them - visit(rule.toStylesheet().value); - } - } - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - }; - - for (var s = cssCascade.stylesheets.length; s--; ) { - var rules = cssCascade.stylesheets[s]; - visit(rules); - } - - return results; - }, - - // - // a list of all properties supported by the current browser - // - allCSSProperties: null, - getAllCSSProperties: function getAllCSSProperties() { - if (this.allCSSProperties) return this.allCSSProperties; - - // get all claimed properties - var s = getComputedStyle(document.documentElement); - var ps = new Array(s.length); - for (var i = s.length; i--; ) { - ps[i] = s[i]; - } - - // FIX A BUG WHERE WEBKIT DOESN'T REPORT ALL PROPERTIES - if (ps.indexOf("content") == -1) { - ps.push("content"); - } - if (ps.indexOf("counter-reset") == -1) { - ps.push("counter-reset"); - ps.push("counter-increment"); - - // FIX A BUG WHERE WEBKIT RETURNS SHIT FOR THE COMPUTED VALUE OF COUNTER-RESET - cssCascade.computationUnsafeProperties["counter-reset"] = true; - } - - // save in a cache for faster access the next times - return (this.allCSSProperties = ps); - }, - - // - // those properties are not safe for computation->specified round-tripping - // - computationUnsafeProperties: { - bottom: true, - direction: true, - display: true, - "font-size": true, - height: true, - left: true, - "line-height": true, - "margin-left": true, - "margin-right": true, - "margin-bottom": true, - "margin-top": true, - "max-height": true, - "max-width": true, - "min-height": true, - "min-width": true, - "padding-left": true, - "padding-right": true, - "padding-bottom": true, - "padding-top": true, - right: true, - "text-align": true, - "text-align-last": true, - top: true, - width: true, - __proto__: null - }, - - // - // a list of property we should inherit... - // - inheritingProperties: { - "border-collapse": true, - "border-spacing": true, - "caption-side": true, - color: true, - cursor: true, - direction: true, - "empty-cells": true, - "font-family": true, - "font-size": true, - "font-style": true, - "font-variant": true, - "font-weight": true, - font: true, - "letter-spacing": true, - "line-height": true, - "list-style-image": true, - "list-style-position": true, - "list-style-type": true, - "list-style": true, - orphans: true, - quotes: true, - "text-align": true, - "text-indent": true, - "text-transform": true, - visibility: true, - "white-space": true, - widows: true, - "word-break": true, - "word-spacing": true, - "word-wrap": true, - __proto__: null - }, - - // - // returns the default style for a tag - // - defaultStylesForTag: Object.create ? Object.create(null) : {}, - getDefaultStyleForTag: function getDefaultStyleForTag(tagName) { - // get result from cache - var result = this.defaultStylesForTag[tagName]; - if (result) return result; - - // create dummy virtual element - var element = document.createElement(tagName); - var style = (this.defaultStylesForTag[tagName] = getComputedStyle(element)); - if (style.display) return style; - - // webkit fix: insert the dummy element anywhere (head -> display:none) - document.head.insertBefore(element, document.head.firstChild); - return style; - }, - - // - // returns the specified style of an element. - // REMARK: may or may not unwrap "inherit" and "initial" depending on implementation - // REMARK: giving "matchedRules" as a parameter allow you to mutualize the "findAllMatching" rules calls - // - getSpecifiedStyle: function getSpecifiedStyle(element, cssPropertyName, matchedRules) { - // hook for css regions - var fragmentSource; - if ((fragmentSource = element.getAttribute("data-css-regions-fragment-of"))) { - fragmentSource = document.querySelector('[data-css-regions-fragment-source="' + fragmentSource + '"]'); - if (fragmentSource) return cssCascade.getSpecifiedStyle(fragmentSource, cssPropertyName); - } - - // give IE a thumbs up for this! - if (element.currentStyle && !window.opera) { - // ask IE to manage the style himself... - var bestValue = element.myStyle[cssPropertyName] || element.currentStyle[cssPropertyName]; - - // return a parsed representation of the value - return cssSyntax.parseAListOfComponentValues(bestValue); - } else { - // TODO: support the "initial" and "inherit" things? - - // first, let's try inline style as it's fast and generally accurate - // TODO: what if important rules override that? - try { - if ((bestValue = element.style.getPropertyValue(cssPropertyName) || element.myStyle[cssPropertyName])) { - return cssSyntax.parseAListOfComponentValues(bestValue); - } - } catch (ex) {} - - // find all relevant style rules - var isBestImportant = false; - var bestPriority = 0; - var bestValue = new cssSyntax.TokenList(); - var rules = - matchedRules || - (cssPropertyName in cssCascade.monitoredProperties - ? element.myMatchedRules || [] - : cssCascade.findAllMatchingRules(element)); - - var visit = function(rules) { - for (var i = rules.length; i--; ) { - // media queries hook - if (rules[i].disabled) continue; - - // find a relevant declaration - if (rules[i] instanceof cssSyntax.StyleRule) { - var decls = rules[i].getDeclarations(); - for (var j = decls.length - 1; j >= 0; j--) { - if (decls[j].type == "DECLARATION") { - if (decls[j].name == cssPropertyName) { - // only works if selectors containing a "," are deduplicated - var currentPriority = cssCascade.computeSelectorPriorityOf(rules[i].selector); - - if (isBestImportant) { - // only an important declaration can beat another important declaration - if (decls[j].important) { - if (currentPriority >= bestPriority) { - bestPriority = currentPriority; - bestValue = decls[j].value; - } - } - } else { - // an important declaration beats any non-important declaration - if (decls[j].important) { - isBestImportant = true; - bestPriority = currentPriority; - bestValue = decls[j].value; - } else { - // the selector priority has to be higher otherwise - if (currentPriority >= bestPriority) { - bestPriority = currentPriority; - bestValue = decls[j].value; - } - } - } - } - } - } - } else if (rules[i] instanceof cssSyntax.AtRule && rules[i].name == "media") { - // visit them - visit(rules[i].toStylesheet()); - } - } - }; - visit(rules); - - // return our best guess... - return bestValue || null; - } - }, - - // - // start monitoring a new stylesheet - // (should usually not be used because stylesheets load automatically) - // - stylesheets: [], - loadStyleSheet: function loadStyleSheet(cssText, i) { - // load in order - - // parse the stylesheet content - var rules = cssSyntax.parse(cssText).value; - - // add the stylesheet into the object model - if (typeof i !== "undefined") { - cssCascade.stylesheets[i] = rules; - } else { - i = cssCascade.stylesheets.push(rules); - } - - // make sure to monitor the required rules - cssCascade.startMonitoringStylesheet(rules); - }, - - // - // start monitoring a new stylesheet - // (should usually not be used because stylesheets load automatically) - // - loadStyleSheetTag: function loadStyleSheetTag(stylesheet, i) { - if (stylesheet.hasAttribute("data-css-polyfilled")) { - return; - } - - if (stylesheet.tagName == "LINK") { - // oh, no, we have to download it... - try { - // dummy value in-between - cssCascade.stylesheets[i] = new cssSyntax.TokenList(); - - // - var xhr = new XMLHttpRequest(); - xhr.href = stylesheet.href; - xhr.open("GET", stylesheet.href, true); - xhr.ruleIndex = i; - xhr.onreadystatechange = function() { - if (this.readyState == 4) { - // status 0 is a webkit bug for local files - if (this.status == 200 || this.status == 0) { - cssCascade.loadStyleSheet(this.responseText, this.ruleIndex); - } else { - cssConsole.log("css-cascade polyfill failled to load: " + this.href); - } - } - }; - xhr.send(); - } catch (ex) { - cssConsole.log("css-cascade polyfill failled to load: " + stylesheet.href); - } - } else { - // oh, cool, we just have to parse the content! - cssCascade.loadStyleSheet(stylesheet.textContent, i); - } - - // mark the stylesheet as ok - stylesheet.setAttribute("data-css-polyfilled", true); - }, - - // - // calling this function will load all currently existing stylesheets in the document - // (should usually not be used because stylesheets load automatically) - // - selectorForStylesheets: - "style:not([data-no-css-polyfill]):not([data-css-polyfilled]), link[rel=stylesheet]:not([data-no-css-polyfill]):not([data-css-polyfilled])", - loadAllStyleSheets: function loadAllStyleSheets() { - // for all stylesheets in the tag... - var head = document.head || document.documentElement; - var stylesheets = head.querySelectorAll(cssCascade.selectorForStylesheets); - - var intialLength = this.stylesheets.length; - this.stylesheets.length += stylesheets.length; - - // for all of them... - for (var i = stylesheets.length; i--; ) { - // - // load the stylesheet - // - var stylesheet = stylesheets[i]; - cssCascade.loadStyleSheetTag(stylesheet, intialLength + i); - } - }, - - // - // this is where we store event handlers for monitored properties - // - monitoredProperties: Object.create ? Object.create(null) : {}, - monitoredPropertiesHandler: { - onupdate: function(element, rule) { - // we need to find all regexps that matches - var mps = cssCascade.monitoredProperties; - var decls = rule.getDeclarations(); - for (var j = decls.length - 1; j >= 0; j--) { - if (decls[j].type == "DECLARATION") { - if (decls[j].name in mps) { - // call all handlers waiting for this - var hs = mps[decls[j].name]; - for (var hi = hs.length; hi--; ) { - hs[hi].onupdate(element, rule); - } - // don't call twice - break; - } - } - } - } - }, - - // - // add an handler to some properties (aka fire when their value *MAY* be affected) - // REMARK: because this event does not promise the value changed, you may want to figure it out before relayouting - // - startMonitoringProperties: function startMonitoringProperties(properties, handler) { - for (var i = properties.length; i--; ) { - var property = properties[i]; - var handlers = cssCascade.monitoredProperties[property] || (cssCascade.monitoredProperties[property] = []); - handlers.push(handler); - } - - for (var s = 0; s < cssCascade.stylesheets.length; s++) { - var currentStylesheet = cssCascade.stylesheets[s]; - cssCascade.startMonitoringStylesheet(currentStylesheet); - } - }, - - // - // calling this function will detect monitored rules in the stylesheet - // (should usually not be used because stylesheets load automatically) - // - startMonitoringStylesheet: function startMonitoringStylesheet(rules) { - for (var i = 0; i < rules.length; i++) { - // only consider style rules - if (rules[i] instanceof cssSyntax.StyleRule) { - // try to see if the current rule is worth monitoring - if (rules[i].isMonitored) continue; - - // for that, let's see if we can find a declaration we should watch - var decls = rules[i].getDeclarations(); - for (var j = decls.length - 1; j >= 0; j--) { - if (decls[j].type == "DECLARATION") { - if (decls[j].name in cssCascade.monitoredProperties) { - // if we found some, start monitoring - cssCascade.startMonitoringRule(rules[i]); - break; - } - } - } - } else if (rules[i] instanceof cssSyntax.AtRule) { - // handle @media - if (rules[i].name == "media" && window.matchMedia) { - cssCascade.startMonitoringMedia(rules[i]); - } - } - } - }, - - // - // calling this function will detect media query updates and fire events accordingly - // (should usually not be used because stylesheets load automatically) - // - startMonitoringMedia: function startMonitoringMedia(atrule) { - try { - var media = window.matchMedia(atrule.prelude.toCSSString()); - - // update all the rules when needed - var rules = atrule.toStylesheet().value; - cssCascade.updateMedia(rules, !media.matches, false); - media.addListener(function(newMedia) { - cssCascade.updateMedia(rules, !newMedia.matches, true); - }); - - // it seems I like taking risks... - cssCascade.startMonitoringStylesheet(rules); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - }, - - // - // define what happens when a media query status changes - // - updateMedia: function(rules, disabled, update) { - for (var i = rules.length; i--; ) { - rules[i].disabled = disabled; - // TODO: should probably get handled by a setter on the rule... - var sr = rules[i].subRules; - if (sr) { - for (var j = sr.length; j--; ) { - sr[j].disabled = disabled; - } - } - } - - // in case of update, all elements matching the selector went potentially updated... - if (update) { - for (var i = rules.length; i--; ) { - var els = document.querySelectorAll(rules[i].selector.toCSSString()); - for (var j = els.length; j--; ) { - cssCascade.monitoredPropertiesHandler.onupdate(els[j], rules[i]); - } - } - } - }, - - // - // splits a rule if it has multiple selectors - // - splitRule: function splitRule(rule) { - // create an array for all the subrules - var rules = []; - - // fill the array - var currentRule = new cssSyntax.StyleRule(); - currentRule.disabled = rule.disabled; - for (var i = 0; i < rule.selector.length; i++) { - if (rule.selector[i] instanceof cssSyntax.DelimToken && rule.selector[i].value == ",") { - currentRule.value = rule.value; - rules.push(currentRule); - currentRule = new cssSyntax.StyleRule(); - currentRule.disabled = rule.disabled; - } else { - currentRule.selector.push(rule.selector[i]); - } - } - currentRule.value = rule.value; - rules.push(currentRule); - - // save the result of the split as subrules - return (rule.subRules = rules); - }, - - // - // ask the css-selector implementation to notify changes for the rules - // - startMonitoringRule: function startMonitoringRule(rule) { - // avoid monitoring rules twice - if (!rule.isMonitored) { - rule.isMonitored = true; - } else { - return; - } - - // split the rule if it has multiple selectors - var rules = rule.subRules || cssCascade.splitRule(rule); - - // monitor the rules - for (var i = 0; i < rules.length; i++) { - rule = rules[i]; - querySelectorLive(rule.selector.toCSSString(), { - onadded: function(e) { - // add the rule to the matching list of this element - (e.myMatchedRules = e.myMatchedRules || []).unshift(rule); // TODO: does not respect priority order - - // generate an update event - cssCascade.monitoredPropertiesHandler.onupdate(e, rule); - }, - onremoved: function(e) { - // remove the rule from the matching list of this element - if (e.myMatchedRules) e.myMatchedRules.splice(e.myMatchedRules.indexOf(rule), 1); - - // generate an update event - cssCascade.monitoredPropertiesHandler.onupdate(e, rule); - } - }); - } - }, - - // - // converts a css property name to a javascript name - // - toCamelCase: function toCamelCase(variable) { - return variable.replace(/-([a-z])/g, function(str, letter) { - return letter.toUpperCase(); - }); - }, - - // - // add some magic code to support properties on the style interface - // - polyfillStyleInterface: function(cssPropertyName) { - var prop = { - get: function() { - // check we know which element we work on - try { - if (!this.parentElement) - throw new Error("Please use the anHTMLElement.myStyle property to get polyfilled properties"); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - return ""; - } - - try { - // non-computed style: return the local style of the element - this.clip = this.clip === undefined ? "" : this.clip; - return this.parentElement.getAttribute("data-style-" + cssPropertyName); - } catch (ex) { - // computed style: return the specified style of the element - var value = cssCascade.getSpecifiedStyle(this.parentElement, cssPropertyName, undefined, true); - return value && value.length > 0 ? value.toCSSString() : ""; - } - }, - - set: function(v) { - // check that the style is writable - this.clip = this.clip === undefined ? "" : this.clip; - - // check we know which element we work on - try { - if (!this.parentElement) - throw new Error("Please use the anHTMLElement.myStyle property to set polyfilled properties"); - } catch (ex) { - setImmediate(function() { - throw ex; - }); - return; - } - - // modify the local style of the element - if (this.parentElement.getAttribute("data-style-" + cssPropertyName) != v) { - this.parentElement.setAttribute("data-style-" + cssPropertyName, v); - } - } - }; - - var styleProtos = []; - try { - styleProtos.push(Object.getPrototypeOf(document.documentElement.style) || CSSStyleDeclaration); - } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(getComputedStyle(document.documentElement))); } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(document.documentElement.currentStyle)); } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(document.documentElement.runtimeStyle)); } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(document.documentElement.specifiedStyle)); } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(document.documentElement.cascadedStyle)); } catch (ex) {} - //try { styleProtos.push(Object.getPrototypeOf(document.documentElement.usedStyle)); } catch (ex) {} - - for (var i = styleProtos.length; i--; ) { - var styleProto = styleProtos[i]; - Object.defineProperty(styleProto, cssPropertyName, prop); - Object.defineProperty(styleProto, cssCascade.toCamelCase(cssPropertyName), prop); - } - cssCascade.startMonitoringRule( - cssSyntax.parse('[style*="' + cssPropertyName + '"]{' + cssPropertyName + ":attr(style)}").value[0] - ); - cssCascade.startMonitoringRule( - cssSyntax.parse("[data-style-" + cssPropertyName + "]{" + cssPropertyName + ":attr(style)}").value[0] - ); - - // add to the list of polyfilled properties... - cssCascade.getAllCSSProperties().push(cssPropertyName); - cssCascade.computationUnsafeProperties[cssPropertyName] = true; - } - }; - - // - // polyfill for browsers not support CSSStyleDeclaration.parentElement (all of them right now) - // - domEvents.EventTarget.implementsIn(cssCascade); - Object.defineProperty(Element.prototype, "myStyle", { - get: function() { - var style = this.style; - if (!style.parentElement) style.parentElement = this; - return style; - } - }); - - // - // load all stylesheets at the time the script is loaded - // then do it again when all stylesheets are downloaded - // and again if some style tag is added to the DOM - // - if (!("no_auto_stylesheet_detection" in window)) { - cssCascade.loadAllStyleSheets(); - document.addEventListener("DOMContentLoaded", function() { - cssCascade.loadAllStyleSheets(); - querySelectorLive(cssCascade.selectorForStylesheets, { - onadded: function(e) { - // TODO: respect DOM order? - cssCascade.loadStyleSheetTag(e); - cssCascade.dispatchEvent("stylesheetadded"); - } - }); - }); - } - - return cssCascade; - })(window, document); - require.define("src/core/css-cascade.js"); - - //////////////////////////////////////// - - // - // The CSS Style module attempts to provide helpers to deal with Style Declarations and elements - // [0] http://lists.w3.org/Archives/Public/www-style/2013Sep/0283.html - // - module.exports = (function(window, document) { - "use strict"; - - function usedStyleOf(element) { - var style = element.usedStyle || getComputedStyle(element); - if (!style.parentElement) { - style.parentElement = element; - } - return style; - } - - function currentStyleOf(element) { - var style = element.cascadedStyle || element.specifiedStyle || element.currentStyle || getComputedStyle(element); // TODO: check CSSOM spec for real name - if (!style.parentElement) { - style.parentElement = element; - } - return style; - } - - function styleOf(element) { - var style = element.style; - if (!style.parentElement) { - style.parentElement = element; - } - return style; - } - - function runtimeStyleOf(element) { - var style = /*element.runtimeStyle || */ element.style; - if (!style.parentElement) { - style.parentElement = element; - } - return style; - } - - function enforceStyle(element, property, value) { - var propertyBackup = null; - var usedValue = usedStyleOf(element).getPropertyValue(property); - if (value instanceof Array) { - if (value.indexOf(usedValue) >= 0) return null; - value = "" + value[0]; - } else { - value = "" + value; - } - - if (usedValue != value) { - var style = runtimeStyleOf(element); - propertyBackup = { - value: style.getPropertyValue(property), - priority: style.getPropertyPriority(property), - property: property - }; - style.setProperty(property, "", ""); // reset [0] - style.setProperty(property, "" + value, "important"); - } - - return propertyBackup; - } - - function enforceStyles(element, propertyValues, backups) { - var backups = backups || []; - for (var property in propertyValues) { - if (propertyValues.hasOwnProperty(key)) { - var currentBackup = enforceStyle(element, property, propertyValues[property]); - if (currentBackup) { - backups.push(currentBackup); - } - } - } - return backups; - } - - function restoreStyle(element, backup) { - if (backup) { - // get the element runtime style - var style = runtimeStyleOf(element); - - // reset [0] - style.setProperty(backup.property, "", ""); - - // restore - if (backup.value) { - style.setProperty(backup.property, backup.value, ""); - style.setProperty(backup.property, backup.value, backup.priority); - } - } - } - - function restoreStyles(element, backups) { - if (!backups || !(backups.length > 0)) { - return; - } - for (var i = backups.length; i--; ) { - restoreStyle(element, backups[i]); - } - } - - var cssStyle = { - styleOf: styleOf, - usedStyleOf: usedStyleOf, - currentStyleOf: currentStyleOf, - runtimeStyleOf: runtimeStyleOf, - enforceStyle: enforceStyle, - enforceStyles: enforceStyles, - restoreStyle: restoreStyle, - restoreStyles: restoreStyles - }; - - return cssStyle; - })(window); - require.define("src/core/css-style.js"); - - //////////////////////////////////////// - - module.exports = (function(window, document) { - "use strict"; - - var VSS_COUNT = 0; - - function VirtualStylesheetFactory() { - var This = this || Object.create(VirtualStylesheet.prototype); - - // create the style sheet - var styleElement = document.createElement("style"); - styleElement.id = "virtual-stylesheet-" + VSS_COUNT++; - styleElement.setAttribute("data-no-css-polyfill", "true"); - styleElement.appendChild(document.createTextNode("")); - document.querySelector(":root > head").appendChild(styleElement); - - // grab its stylesheet object - var ss = styleElement.sheet; - if (!ss.cssRules) ss.cssRules = ss.rules; - ss.removeRule = - ss.removeRule || - function(i) { - return ss.deleteRule(i); - }; - ss.addRule = - ss.addRule || - function(s, d, i) { - var rule = s + "{" + d + "}"; - var index = typeof i == "number" ? i : ss.cssRules.length; - return ss.insertRule(rule, index); - }; - - // create the mapping table - var rules = []; - - // add the factory - - This.stylesheets = Object.create(null); - This.createStyleSheet = function(name) { - return This.stylesheets[name] || (This.stylesheets[name] = new VirtualStylesheet(this, name)); - }; - - // add the methods - - This.addRule = function(selector, declarations, stylesheet, enabled) { - // convert selector & declarations to a non-empty string - selector = "" + selector + " "; - declarations = "" + declarations + " "; - - // add the rule to the known rules - rules.push({ stylesheet: stylesheet, selector: selector, declarations: declarations, enabled: enabled }); - - // add the rule to the enabled stylesheet, if needed - if (enabled) { - ss.addRule(selector, declarations); - } - }; - - This.disableAllRules = function(stylesheet) { - var ssIndex = ss.cssRules.length; - for (var i = rules.length; i--; ) { - var rule = rules[i]; - if (rule.enabled) { - ssIndex--; - if (rule.stylesheet == stylesheet) { - ss.removeRule(ssIndex); - rule.enabled = false; - } - } - } - }; - - This.enableAllRules = function(stylesheet) { - var ssIndex = 0; - for (var i = 0; i < rules.length; i++) { - var rule = rules[i]; - if (rule.enabled) { - ssIndex++; - } else { - if (rule.stylesheet == stylesheet) { - ss.addRule(rule.selector, rule.declarations, ssIndex); - rule.enabled = true; - ssIndex++; - } - } - } - }; - - This.deleteAllRules = function(stylesheet) { - var ssIndex = ss.cssRules.length; - for (var i = rules.length; i--; ) { - var rule = rules[i]; - if (rule.enabled) { - ssIndex--; - if (rule.stylesheet == stylesheet) { - ss.removeRule(ssIndex); - rules.splice(i, 1); - } - } - } - }; - } - - function VirtualStylesheet(factory, name) { - this.factory = factory; - this.name = name; - this.enabled = true; - } - - VirtualStylesheet.prototype.addRule = function(selector, declarations) { - this.factory.addRule(selector, declarations, this.name, this.enabled); - }; - - VirtualStylesheet.prototype.set = function(element, properties) { - // give an id to the element - if (!element.id) { - element.id = element.uniqueID; - } - - // compute the css rule to add - var selector = "#" + element.id; - var rule = ""; - for (var property in properties) { - if (properties.hasOwnProperty(property)) { - rule += property + ": " + properties[property] + " !important; "; - } - } - - // and then add it - this.addRule(selector, rule); - }; - - VirtualStylesheet.prototype.enable = function() { - this.factory.enableAllRules(this.name); - this.enabled = true; - }; - - VirtualStylesheet.prototype.disable = function() { - this.factory.disableAllRules(this.name); - this.enabled = false; - }; - - VirtualStylesheet.prototype.clear = function() { - this.factory.deleteAllRules(this.name); - }; - - VirtualStylesheet.prototype.revoke = function() { - this.clear(); - }; - - VirtualStylesheetFactory.VirtualStylesheet = VirtualStylesheet; - VirtualStylesheetFactory.VirtualStylesheetFactory = VirtualStylesheetFactory; - return VirtualStylesheetFactory; - })(window, document); - require.define("src/core/css-virtual-stylesheet-factory.js"); - - //////////////////////////////////////// - - void (function() { - if (!("uniqueID" in document.documentElement)) { - var uniqueID_counter = 0; - Object.defineProperty(Element.prototype, "uniqueID", { - get: function() { - if (this.id) { - return this.id; - } else { - return (this.id = "EL__" + ++uniqueID_counter + "__"); - } - } - }); - } - })(); - require.define("src/core/polyfill-dom-uniqueID.js"); - - //////////////////////////////////////// - - module.exports = (function(window, document) { - // import dependencies - var cssStyle = require("src/core/css-style.js"), - usedStyleOf = cssStyle.usedStyleOf, - currentStyleOf = cssStyle.currentStyleOf, - enforceStyle = cssStyle.enforceStyle, - restoreStyle = cssStyle.restoreStyle; - - // define the module - var cssSizing = { - absoluteMinWidthOf: function(element) { - // - // make the parent a relative container (if necessary) - // - var parentPositionBackup = enforceStyle(element.parentNode, "position", "relative"); - - // - // remove the element from the flow (if necessary) - // - var positionBackup = enforceStyle(element, "position", "absolute"); - - // - // put impossible sizing constraints to the element - // - var widthBackup = enforceStyle(element, "width", "0px"); - var minWidthBackup = enforceStyle(element, "min-width", "0px"); - - // - // see what size is finally being used - // - var result = element.offsetWidth; - - // - // restore styling where needed - // - restoreStyle(element, minWidthBackup); - restoreStyle(element, widthBackup); - restoreStyle(element, positionBackup); - restoreStyle(element.parentNode, parentPositionBackup); - - // - // return the result - // - return result; - }, - - minWidthOf: function(element) { - // - // make the parent an infinite relative container (if necessary) - // - var parentPositionBackup = enforceStyle(element.parentNode, "position", "relative"); - var parentWidthBackup = enforceStyle(element.parentNode, "width", "0px"); - var parentMinWidthBackup = enforceStyle(element.parentNode, "min-width", "0px"); - var parentMaxWidthBackup = enforceStyle(element.parentNode, "max-width", "0px"); - - // - // remove the element from the flow (if necessary) - // - var positionBackup = enforceStyle(element, "position", "absolute"); - - // - // put impossible sizing constraints to the element - // - var widthBackup = enforceStyle(element, "width", "auto"); - - // - // see what size is finally being used - // - var result = element.offsetWidth; - - // - // restore styling where needed - // - restoreStyle(element, widthBackup); - restoreStyle(element, positionBackup); - restoreStyle(element.parentNode, parentWidthBackup); - restoreStyle(element.parentNode, parentMaxWidthBackup); - restoreStyle(element.parentNode, parentMinWidthBackup); - restoreStyle(element.parentNode, parentPositionBackup); - - // - // return the result - // - return result; - }, - - maxWidthOf: function(element) { - // - // make the parent a relative container (if necessary) - // - var parentPositionBackup = enforceStyle(element.parentNode, "position", "relative"); - - // - // remove the element from the flow (if necessary) - // - var positionBackup = enforceStyle(element, "position", "absolute"); - - // - // put impossible sizing constraints to the element - // - var widthBackup = enforceStyle(element, "width", "auto"); - - // - // see what size is finally being used - // - var result = element.offsetWidth; - - // - // restore styling where needed - // - restoreStyle(element, widthBackup); - restoreStyle(element, positionBackup); - restoreStyle(element.parentNode, parentPositionBackup); - - // - // return the result - // - return result; - }, - - absoluteMaxWidthOf: function(element) { - // - // make the parent an infinite relative container (if necessary) - // - var parentPositionBackup = enforceStyle(element.parentNode, "position", "relative"); - var parentWidthBackup = enforceStyle(element.parentNode, "width", "9999px"); - var parentMinWidthBackup = enforceStyle(element.parentNode, "min-width", "9999px"); - - // - // remove the element from the flow (if necessary) - // - var positionBackup = enforceStyle(element, "position", "absolute"); - - // - // put impossible sizing constraints to the element - // - var widthBackup = enforceStyle(element, "width", "auto"); - - // - // see what size is finally being used - // - var result = element.offsetWidth; - - // - // restore styling where needed - // - restoreStyle(element, widthBackup); - restoreStyle(element, positionBackup); - restoreStyle(element.parentNode, parentWidthBackup); - restoreStyle(element.parentNode, parentMinWidthBackup); - restoreStyle(element.parentNode, parentPositionBackup); - - // - // return the result - // - return result; - } - }; - - return cssSizing; - })(window, document); - require.define("src/core/css-sizing.js"); - - //////////////////////////////////////// - - // - // The Box module defines algorithms for dealing with css boxes - // - module.exports = (function(window, document) { - // Original code licensed by Adobe Systems Incorporated under the Apache License 2.0. - // https://github.com/adobe-webplatform/brackets-css-shapes-editor/blob/master/thirdparty/CSSShapesEditor.js#L442 - - var cssBox = cssBox || {}; - cssBox.getBox = - // returns {top/left/bottom/right} for 'content/padding/border/margin-box' relative to the border box top-left corner. - function getBox(element, boxType) { - var width = element.offsetWidth, - height = element.offsetHeight, - style = getComputedStyle(element), - leftBorder = parseFloat(style.borderLeftWidth), - rightBorder = parseFloat(style.borderRightWidth), - topBorder = parseFloat(style.borderTopWidth), - bottomBorder = parseFloat(style.borderBottomWidth), - leftPadding = parseFloat(style.paddingLeft), - rightPadding = parseFloat(style.paddingRight), - topPadding = parseFloat(style.paddingTop), - bottomPadding = parseFloat(style.paddingBottom), - leftMargin = parseFloat(style.marginLeft), - rightMargin = parseFloat(style.marginRight), - topMargin = parseFloat(style.marginTop), - bottomMargin = parseFloat(style.marginBottom); - - var box = { - top: 0, - left: 0, - width: 0, - height: 0 - }; - - switch (boxType || "border-box") { - case "content-box": - box.top = topBorder + topPadding; - box.left = leftBorder + leftPadding; - box.width = width - leftBorder - leftPadding - rightPadding - rightBorder; - box.height = height - topBorder - topPadding - bottomPadding - bottomBorder; - break; - - case "padding-box": - box.top = topPadding; - box.left = leftPadding; - box.width = width - leftBorder - rightBorder; - box.height = height - topBorder - bottomBorder; - break; - - case "border-box": - box.top = 0; - box.left = 0; - box.width = width; - box.height = height; - break; - - case "margin-box": - box.top = 0 - topMargin; - box.left = 0 - leftMargin; - box.width = width + leftMargin + rightMargin; - box.height = height + topMargin + bottomMargin; - break; - - default: - throw new TypeError("Invalid parameter, boxType: " + boxType); - } - - return box; - }; - - return cssBox; - })(window, document); - require.define("src/core/css-box.js"); - - //////////////////////////////////////// - - // - // The CSS Units module is handling conversions between units - // - module.exports = (function(window, document) { - // import dependencies - var getBox = require("src/core/css-box.js").getBox; - - // define the module - var cssUnits = { - // converts "cssLength" from its inherent unit to pixels, and returns the result as a float - convertToPixels: function convertToPixels(cssLength, element, opts) { - if (typeof cssLength == "string") { - var match = cssLength.match(/^\s*(-?\d+(?:\.\d+)?)(\S*)\s*$/); - var currentLength = match ? parseFloat(match[1]) : 0.0; - var currentUnit = match ? match[2] : ""; - } else { - var currentLength = cssLength.value; - var currentUnit = cssLength.unit; - } - - var converter = convertToPixels.converters[currentUnit]; - if (!converter) throw new Error("No suitable conversion from unit '" + currentUnit + "' to unit 'px'"); - - var convertedLength = converter.call(null, currentLength, element || document.documentElement, opts); - return Math.round(20 * convertedLength) / 20; - }, - - // converts "pixelLength" from pixels to "destinUnit", and returns the result as a float - convertFromPixels: function convertFromPixels(pixelLength, destinUnit, element, opts) { - var converter = convertFromPixels.converters[destinUnit]; - if (!converter) throw new Error("No suitable conversion to unit '" + destinUnit + "' from unit 'px'"); - - var convertedLength = converter.call(null, pixelLength, element || document.documentElement, opts); - return Math.round(20 * convertedLength) / 20; - } - }; - - cssUnits.convertToPixels.converters = { - px: function(x) { - return x; - }, - in: function(x) { - return x * 96; - }, - cm: function(x) { - return x / 0.02645833333; - }, - mm: function(x) { - return x / 0.26458333333; - }, - pt: function(x) { - return x / 0.75; - }, - pc: function(x) { - return x / 0.0625; - }, - em: function(x, e) { - return x * parseFloat(e ? getComputedStyle(e).fontSize : 16); - }, - rem: function(x, e) { - return x * parseFloat(e ? getComputedStyle(e.ownerDocument.documentElement).fontSize : 16); - }, - vw: function(x, e) { - return (x / 100) * window.innerWidth; - }, - vh: function(x, e) { - return (x / 100) * window.innerHeight; - }, - "%": function(x, e, opts) { - opts = opts || {}; - - // get the box from which to compute the percentages - var box = e - ? getBox(e, opts.boxType) - : { - top: 0, - left: 0, - width: 0, - height: 0 - }; - - // now apply the conversion algorithm - switch (true) { - case opts.isRadius: - var radius = Math.sqrt(box.height * box.height + box.width * box.width) / Math.sqrt(2); - return Math.round((x / 100) * radius); - - case opts.isHeightRelated: - return (x / 100) * box.height; - - case opts.isWidthRelated: - default: - return (x / 100) * box.width; - } - } - }; - - cssUnits.convertFromPixels.converters = { - px: function(x) { - return x; - }, - in: function(x) { - return x / 96; - }, - cm: function(x) { - return x * 0.02645833333; - }, - mm: function(x) { - return x * 0.26458333333; - }, - pt: function(x) { - return x * 0.75; - }, - pc: function(x) { - return x * 0.0625; - }, - em: function(x, e) { - return x / parseFloat(e ? getComputedStyle(e).fontSize : 16); - }, - rem: function(x, e) { - return x / parseFloat(e ? getComputedStyle(e.ownerDocument.documentElement).fontSize : 16); - }, - vw: function(x, e) { - return (x * 100) / window.innerWidth; - }, - vh: function(x, e) { - return (x * 100) / window.innerHeight; - }, - "%": function(x, e, opts) { - opts = opts || {}; - - // get the box from which to compute the percentages - var box = e - ? getBox(e, opts.boxType) - : { - top: 0, - left: 0, - width: 0, - height: 0 - }; - - // now apply the conversion algorithm - switch (true) { - case opts.isRadius: - var radius = Math.sqrt(box.height * box.height + box.width * box.width) / Math.sqrt(2); - return Math.round((x * 100) / radius); - - case opts.isHeightRelated: - return (x * 100) / box.height; - - case opts.isWidthRelated: - default: - return (x * 100) / box.width; - } - } - }; - - return cssUnits; - })(window, document); - require.define("src/core/css-units.js"); - - //////////////////////////////////////// - - module.exports = (function(window, document) { - "use strict"; - - // import dependencies - var cssSyntax = require("src/core/css-syntax.js"); - - var cssStyle = require("src/core/css-style.js"), - usedStyleOf = cssStyle.usedStyleOf, - currentStyleOf = cssStyle.currentStyleOf, - enforceStyle = cssStyle.enforceStyle, - restoreStyle = cssStyle.restoreStyle; - - var VirtualStylesheetFactory = require("src/core/css-virtual-stylesheet-factory.js"); - - require("src/core/polyfill-dom-uniqueID.js"); - require("src/core/polyfill-dom-requestAnimationFrame.js"); - - var virtualStylesheetFactory = new VirtualStylesheetFactory(); - - var createRuntimeStyle = function(reason, element) { - // expand the reason - if (element) { - reason = (element.id || element.uniqueID) + "-" + reason; - } - - // return a virtual stylesheet - return virtualStylesheetFactory.createStyleSheet(reason); - }; - - var cssSizing = require("src/core/css-sizing.js"); - - var cssUnits = require("src/core/css-units.js"); - - // define the module - var LOCATE_AUTO = 0; - var LOCATE_LINE = 1; - var LOCATE_SPAN = 2; - var LOCATE_AREA = 3; - - var ALIGN_START = 0; - var ALIGN_CENTER = 1; - var ALIGN_END = 2; - var ALIGN_FIT = 3; - - var TRACK_BREADTH_AUTO = 0; - var TRACK_BREADTH_LENGTH = 1; - var TRACK_BREADTH_FRACTION = 2; - var TRACK_BREADTH_PERCENTAGE = 3; - var TRACK_BREADTH_MIN_CONTENT = 4; - var TRACK_BREADTH_MAX_CONTENT = 5; - - function GridTrackBreadth() { - this.minType = TRACK_BREADTH_AUTO; - this.minValue = "auto"; - this.maxType = TRACK_BREADTH_AUTO; - this.maxValue = "auto"; - } - - GridTrackBreadth.prototype = { - toString: function() { - if (this.minType == this.maxType && this.minValue == this.maxValue) { - switch (this.minType) { - case TRACK_BREADTH_AUTO: - return "auto"; - case TRACK_BREADTH_LENGTH: - return this.minValue + "px"; - case TRACK_BREADTH_FRACTION: - return this.minValue + "fr"; - case TRACK_BREADTH_PERCENTAGE: - return this.minValue + "%"; - case TRACK_BREADTH_MIN_CONTENT: - return "min-content"; - case TRACK_BREADTH_MAX_CONTENT: - return "max-content"; - } - } else { - var min = "auto"; - var max = "auto"; - switch (this.minType) { - case TRACK_BREADTH_AUTO: - min = "auto"; - break; - case TRACK_BREADTH_LENGTH: - min = this.minValue + "px"; - break; - case TRACK_BREADTH_FRACTION: - min = this.minValue + "fr"; - break; - case TRACK_BREADTH_PERCENTAGE: - min = this.minValue + "%"; - break; - case TRACK_BREADTH_MIN_CONTENT: - min = "min-content"; - break; - case TRACK_BREADTH_MAX_CONTENT: - min = "max-content"; - break; - } - switch (this.maxType) { - case TRACK_BREADTH_AUTO: - max = "auto"; - break; - case TRACK_BREADTH_LENGTH: - max = this.maxValue + "px"; - break; - case TRACK_BREADTH_FRACTION: - max = this.maxValue + "fr"; - break; - case TRACK_BREADTH_PERCENTAGE: - max = this.maxValue + "%"; - break; - case TRACK_BREADTH_MIN_CONTENT: - max = "min-content"; - break; - case TRACK_BREADTH_MAX_CONTENT: - max = "max-content"; - break; - } - return "minmax(" + min + ", " + max + ")"; - } - }, - setValue: function(type, val) { - this.minType = this.maxType = type; - this.minValue = this.maxValue = val; - }, - setMaxValue: function(type, val) { - this.maxType = type; - this.maxValue = val; - }, - setMinValue: function(type, val) { - this.minType = type; - this.minValue = val; - } - }; - - function GridItemPosition(type, name, index) { - this.type = type | LOCATE_AUTO; - this.name = name; - this.index = index | 0; - } - - GridItemPosition.prototype = { - extractXLineIndex: function(grid, TODO_args) { - throw "Not implemented"; - }, - extractYLineIndex: function(grid, TODO_args) { - throw "Not implemented"; - }, - toString: function() {} - }; - - function GridItem(element, parentGrid) { - this.element = element; - this.parentGrid = element.parentGridLayout = parentGrid; - - this.reset(); - this.buggy = true; - } - - GridItem.prototype = { - dispose: function() { - this.element.parentGridLayout = undefined; - }, - - reset: function() { - this.order = 0; - - this.minWidth = 0; - this.maxWidth = 0; - - this.hMargins = 0; - this.vMargins = 0; - this.hPaddings = 0; - this.vPaddings = 0; - this.hBorders = 0; - this.vBorders = 0; - - this.xStart = -1; - this.xEnd = -1; - - this.specifiedXStart = this.specifiedXStart || new GridItemPosition(); - this.specifiedXStart.type = LOCATE_AUTO; - this.specifiedXStart.name = undefined; - this.specifiedXStart.index = undefined; - - this.specifiedXEnd = this.specifiedXEnd || new GridItemPosition(); - this.specifiedXEnd.type = LOCATE_AUTO; - this.specifiedXEnd.name = undefined; - this.specifiedXEnd.index = undefined; - - this.yStart = -1; - this.yEnd = -1; - - this.specifiedYStart = this.specifiedYStart || new GridItemPosition(); - this.specifiedYStart.type = LOCATE_AUTO; - this.specifiedYStart.name = undefined; - this.specifiedYStart.index = undefined; - - this.specifiedYEnd = this.specifiedYEnd || new GridItemPosition(); - this.specifiedYEnd.type = LOCATE_AUTO; - this.specifiedYEnd.name = undefined; - this.specifiedYEnd.index = undefined; - - this.marginAlignX = ALIGN_CENTER; - this.marginAlignY = ALIGN_CENTER; - - this.paddingAlignX = ALIGN_FIT; - this.paddingAlignY = ALIGN_FIT; - }, - - updateFromElement: function() { - var element = this.element; - var usedStyle = usedStyleOf(element); - var style = currentStyleOf(element); - var getStyle = function(prop) { - var value = style[prop]; - if (typeof value == "undefined") { - return ""; - } - return value; - }; - - this.reset(); - this.buggy = false; - - // compute order property - this.order = parseInt(style["order"]) | 0; - - // compute size - this.minWidth = cssSizing.minWidthOf(element); - this.maxWidth = cssSizing.maxWidthOf(element); - - this.hMargins = parseInt(usedStyle.getPropertyValue("margin-left")) + parseInt(usedStyle.getPropertyValue("margin-right")); - this.vMargins = parseInt(usedStyle.getPropertyValue("margin-top")) + parseInt(usedStyle.getPropertyValue("margin-bottom")); - this.hPaddings = - parseInt(usedStyle.getPropertyValue("padding-left")) + parseInt(usedStyle.getPropertyValue("padding-right")); - this.vPaddings = - parseInt(usedStyle.getPropertyValue("padding-top")) + parseInt(usedStyle.getPropertyValue("padding-bottom")); - this.hBorders = - parseInt(usedStyle.getPropertyValue("border-left-width")) + parseInt(usedStyle.getPropertyValue("border-right-width")); - this.vBorders = - parseInt(usedStyle.getPropertyValue("border-top-width")) + parseInt(usedStyle.getPropertyValue("border-bottom-width")); - - // locate x and y lines together - if (style["grid-area"]) { - var parts = getStyle("grid-area").split("/"); - var is_ident = /^\s*([a-z][-_a-z0-9]*)\s*$/i; - var row_start = parts[0] || "auto"; - var col_start = parts[1] || (is_ident.test(row_start) ? row_start : "auto"); - var row_end = parts[2] || (is_ident.test(row_start) ? row_start : "auto"); - var col_end = parts[3] || (is_ident.test(col_start) ? col_start : "auto"); - this.parseLocationInstructions(this.specifiedXStart, this.specifiedXEnd, col_start + " / " + col_end); - this.parseLocationInstructions(this.specifiedYStart, this.specifiedYEnd, row_start + " / " + row_end); - } - - // locate x lines - if (style["grid-column"] || style["grid-column-start"] || style["grid-column-end"]) { - var parts = getStyle("grid-column").split("/"); - var start = getStyle("grid-column-start") || parts[0] || "auto"; - var end = getStyle("grid-column-end") || parts[1] || parts[0] || start; - this.parseLocationInstructions(this.specifiedXStart, this.specifiedXEnd, start + " / " + end); - } - - // locate y lines - if (style["grid-row"] || style["grid-row-start"] || style["grid-row-end"]) { - var parts = getStyle("grid-row").split("/"); - var start = getStyle("grid-row-start") || parts[0]; - var end = getStyle("grid-row-end") || parts[1] || parts[0]; - this.parseLocationInstructions(this.specifiedYStart, this.specifiedYEnd, start + " / " + end); - } - - // FIXME: is it possible to understand cascading here, and not use a fixed order? - // TODO: other positioning methods - }, - - parseLocationInstructions: function(specifiedStart, specifiedEnd, cssText) { - var unfiltred_value = cssSyntax.parseCSSValue(cssText); - var value = unfiltred_value.filter(function(o) { - return !(o instanceof cssSyntax.WhitespaceToken); - }); - value.toCSSString = function() { - return unfiltred_value.toCSSString(); - }; - var I = 0; - - var updateNameOrIndex = function(data) { - if (value[I] instanceof cssSyntax.IdentifierToken) { - // grid-column: C; - if (data.name) { - // duplicate line-name value - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (duplicate line name)"); - this.buggy = true; - return true; - } - data.name = value[I++].value; - return false; - } else if (value[I] instanceof cssSyntax.NumberToken) { - // grid-column: 3 - data.index = value[I].value | 0; - - // only accept integer values - if (value[I].value != data.index) { - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (non-integer number)"); - this.buggy = true; - return true; - } - - // do not accept zero - if (data.index == 0) { - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (line index can't be zero)"); - this.buggy = true; - return true; - } - - // do not accept negative spans - if (data.index <= 0 && data.type == LOCATE_SPAN) { - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (negative spans not allowed)"); - this.buggy = true; - return true; - } - - I++; - - return false; - } else if (value[I] instanceof cssSyntax.DelimToken && value[I].value == "/") { - // break grid-column-start detection - return true; - } else { - // this is wrong - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (invalid token)"); - this.buggy = true; - return true; - } - }; - - var gatherNameIndexPair = function(data) { - // first token to be analyzed (may be either kind) - updateNameOrIndex.call(this, data); - - // abort if no second token or buggy - if (this.buggy || !value[I]) { - return; - } - - // second token to be analyzed (will have to be the other kind) - updateNameOrIndex.call(this, data); - }; - - if (!value[I]) { - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (empty declaration)"); - this.buggy = true; - return; - } - - // first part - gridColumnStart: while (true) { - if (value[I] instanceof cssSyntax.IdentifierToken) { - if (value[I].value == "span") { - if (!value[++I]) { - console.error( - "INVALID DECLARATION: grid-column/row: " + - value.toCSSString() + - " (span is not a valid line name, more tokens expected)" - ); - this.buggy = true; - return; - } - - specifiedStart.type = LOCATE_SPAN; - specifiedStart.name = undefined; - specifiedStart.index = undefined; - gatherNameIndexPair.call(this, specifiedStart); - if (this.buggy) { - return; - } - break; - } else if (value[I].value == "auto") { - specifiedStart.type = LOCATE_AUTO; - specifiedStart.name = undefined; - specifiedStart.index = undefined; - I++; - break; - } else { - // grid-column: start-line... - specifiedStart.type = LOCATE_LINE; - specifiedStart.name = undefined; - specifiedStart.index = undefined; - gatherNameIndexPair.call(this, specifiedStart); - if (this.buggy) { - return; - } - - break; - } - } else if (value[I] instanceof cssSyntax.DelimToken && value[I].value == "/") { - // this is wrong - console.error( - "INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (no token to analyze before the slash token)" - ); - this.buggy = true; - return; - } else { - specifiedStart.type = LOCATE_LINE; - gatherNameIndexPair.call(this, specifiedStart); - if (this.buggy) { - return; - } - - break; - } - - break; - } - - // test whether there is a second part - if (value[I]) { - if (value[I] instanceof cssSyntax.DelimToken && value[I].value == "/") { - // second part will start now - if (!value[++I]) { - // unexpected lack token at the start of the second part - console.error( - "INVALID DECLARATION: grid-column/row: " + - value.toCSSString() + - " (expected at least one more token after the slash token)" - ); - this.buggy = true; - return; - } - } else { - // unexpected token at the end of the first part - console.error( - "INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (expected slash / or end of declaration)" - ); - this.buggy = true; - return; - } - } else { - // end of declaration - if (specifiedStart.type == LOCATE_LINE && specifiedStart.name != undefined && specifiedStart.index == undefined) { - // a value consisting of a custom ident is duplicated to the other side - specifiedEnd.type = LOCATE_LINE; - specifiedEnd.name = specifiedStart.name; - specifiedEnd.index = undefined; - } else { - // the default value (auto) is a 1-line span in all other cases - specifiedEnd.type = LOCATE_AUTO; - specifiedEnd.name = undefined; - specifiedEnd.index = undefined; - } - } - - // second part (after the "/" token) - gridColumnEnd: while (value[I]) { - if (value[I] instanceof cssSyntax.IdentifierToken) { - if (value[I].value == "span") { - if (!value[++I]) { - console.error( - "INVALID DECLARATION: grid-column/row: " + - value.toCSSString() + - " (span is not a valid line name, more tokens expected)" - ); - this.buggy = true; - return; - } - - specifiedEnd.type = LOCATE_SPAN; - specifiedEnd.name = undefined; - specifiedEnd.index = undefined; - gatherNameIndexPair.call(this, specifiedEnd); - if (this.buggy) { - return; - } - } else if (value[I].value == "auto") { - specifiedEnd.type = LOCATE_AUTO; - specifiedEnd.name = undefined; - specifiedEnd.index = undefined; - I++; - break; - } else { - // grid-column: start-line... - specifiedEnd.type = LOCATE_LINE; - specifiedEnd.name = undefined; - specifiedEnd.name = undefined; - specifiedEnd.index = undefined; - gatherNameIndexPair.call(this, specifiedEnd); - if (this.buggy) { - return; - } - - break; - } - } else if (value[I] instanceof cssSyntax.DelimToken && value[I].value == "/") { - // this is wrong - console.error( - "INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (no token to analyze before the slash token)" - ); - this.buggy = true; - return; - } else { - specifiedEnd.type = LOCATE_LINE; - gatherNameIndexPair.call(this, specifiedEnd); - if (this.buggy) { - return; - } - - break; - } - - break; - } - - if (value[I]) { - console.error("INVALID DECLARATION: grid-column/row: " + value.toCSSString() + " (tokens after end)"); - this.buggy = true; - return; - } - - // If the is omitted, it defaults to ‘1’. - //if(specifiedStart.name && specifiedStart.index == undefined) { specifiedStart.index = 1; } - //if(specifiedEnd.name && specifiedEnd.index == undefined) { specifiedEnd.index = 1; } - - // If both ‘grid-row/column-start’ and ‘grid-row/column-end’ specify a span, the end span is ignored. - if (specifiedEnd.type == LOCATE_SPAN && specifiedStart.type == LOCATE_SPAN) { - specifiedEnd.type = LOCATE_AUTO; - specifiedEnd.index = undefined; - specifiedEnd.name = undefined; - } - - return [specifiedStart, specifiedEnd]; - } - }; - - function GridLayout(element) { - // items - this.element = element; - this.element.gridLayout = this; - this.items = []; // array of GridItem - - // reset - this.reset(); - - // other fields - this.isLayoutScheduled = false; - } - - GridLayout.prototype = { - reset: function() { - // layout exclusion style - this.hlPadding = 0; - this.hrPadding = 0; - this.vtPadding = 0; - this.vbPadding = 0; - this.rowGap = 0; - this.colGap = 0; - - // computed - this.xLines = []; // array of array of names - this.xSizes = []; // array of numbers (in pixels) - - this.yLines = []; - this.ySizes = []; - - this.growX = false; - this.growY = true; - this.growDense = false; - - this.rcMatrix = []; // array of array of (whatever is not undefined, probably "true") - - // specified - this.specifiedXLines = []; - this.specifiedXSizes = []; - - this.specifiedYLines = []; - this.specifiedYSizes = []; - - this.defaultXSize = new GridTrackBreadth(); - this.defaultYSize = new GridTrackBreadth(); - }, - - R: function R(x, y) { - if (this.growY) { - // we grow by adding rows (normal behavior) - return y; - } else { - // we grow by adding columns (inversed behavior) - return x; - } - }, - - C: function C(x, y) { - if (this.growY) { - // we grow by adding rows (normal behavior) - return x; - } else { - // we grow by adding columns (inversed behavior) - return y; - } - }, - - dispose: function() { - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - item.dispose(); - } - this.element.gridLayout = undefined; - }, - - updateFromElement: function() { - // delete old items - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - item.dispose(); - } - - // add new items - this.items.length = 0; - var currentItem = this.element.firstElementChild; - while (currentItem) { - // add a new grid item for the element - var newGridItem = new GridItem(currentItem, this); - newGridItem.updateFromElement(); - this.items.push(newGridItem); - - // move to the next element - currentItem = currentItem.nextElementSibling; - } - - // sort them by css order (desc) then by dom order (asc) - var sortableItems = this.items.map(function(item, i) { - return { item: item, order: item.order, position: i }; - }); - sortableItems.sort(function(a, b) { - if (a.order == b.order) { - return a.position - b.position; - } else if (a.order > b.order) { - return +1; - } else { - return -1; - } - }); - this.items = sortableItems.map(function(data) { - return data.item; - }); - - // reset the style - this.reset(); - - // update its own style - var style = usedStyleOf(this.element); - var cssText = ""; - if ((cssText = style["grid-template"])) { - this.parseGridTemplate(cssText); - } - if ((cssText = style["grid-template-rows"])) { - this.parseRowsTemplate(cssText); - } - if ((cssText = style["grid-template-columns"])) { - this.parseColumnsTemplate(cssText); - } - if ((cssText = style["grid-template-areas"])) { - this.parseAreasTemplate(cssText); - } - if ((cssText = style["grid-auto-rows"])) { - this.parseAutoRowsBreadth(cssText); - } - if ((cssText = style["grid-auto-columns"])) { - this.parseAutoColumnsBreadth(cssText); - } - if ((cssText = style["grid-auto-flow"])) { - // FIXME: should be in a function - - // FIXME: not a real parse... - var tokens = cssText - .trim() - .toLowerCase() - .split(/\s+/g); - - // direction - if (tokens.indexOf("row") >= 0) { - this.growX = false; - this.growY = true; - } else if (tokens.indexOf("column") >= 0) { - this.growX = true; - this.growY = false; - } - - // algorithm - // FIXME: should also support 'stack' (wtf) - if (tokens.indexOf("dense") >= 0) { - this.growDense = true; - } else { - this.growDense = false; - } - } - if ((cssText = style["grid-row-gap"])) { - this.parseGridRowGap(cssText); - } - if ((cssText = style["grid-column-gap"])) { - this.parseGridColumnGap(cssText); - } - if ((cssText = style["grid-gap"])) { - this.parseGridGap(cssText); - } - - var usedStyle = style; - this.hlPadding = - parseInt(usedStyle.getPropertyValue("border-left-width")) + parseInt(usedStyle.getPropertyValue("padding-left")); - this.hrPadding = - parseInt(usedStyle.getPropertyValue("border-right-width")) + parseInt(usedStyle.getPropertyValue("padding-right")); - this.vtPadding = - parseInt(usedStyle.getPropertyValue("border-top-width")) + parseInt(usedStyle.getPropertyValue("padding-top")); - this.vbPadding = - parseInt(usedStyle.getPropertyValue("border-bottom-width")) + parseInt(usedStyle.getPropertyValue("padding-bottom")); - }, - - resetItems: function() { - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - item.xStart = item.xEnd = item.yStart = item.yEnd = -1; - } - }, - - resetLinesToSpecified: function() { - this.xLines = this.specifiedXLines.slice(0); - this.xSizes = this.specifiedXSizes.slice(0); - this.yLines = this.specifiedYLines.slice(0); - this.ySizes = this.specifiedYSizes.slice(0); - }, - - parseTrackBreadthToken: function(cssToken) { - // try to match a pattern - if (cssToken instanceof cssSyntax.IdentifierToken) { - if (cssToken.value == "auto") { - return { type: TRACK_BREADTH_AUTO, value: "auto" }; - } else if (cssToken.value == "min-content") { - return { type: TRACK_BREADTH_MIN_CONTENT, value: "min-content" }; - } else if (cssToken.value == "max-content") { - return { type: TRACK_BREADTH_MAX_CONTENT, value: "max-content" }; - } - } else if (cssToken instanceof cssSyntax.DimensionToken) { - if (cssToken.unit == "fr") { - return { type: TRACK_BREADTH_FRACTION, value: cssToken.value }; - } else { - return { - type: TRACK_BREADTH_LENGTH, - value: cssUnits.convertToPixels(cssToken.toCSSString(), this.element) - }; - } - } else if (cssToken instanceof cssSyntax.PercentageToken) { - return { type: TRACK_BREADTH_PERCENTAGE, value: cssToken.value }; - } else { - // TODO: recognize "calc()", too - } - - return null; - }, - - parseTrackBreadth: function(value, I) { - // TODO: try catch on null parsed token - var buggy = false; - - var currentTrackBreadth = new GridTrackBreadth(); - var parseTrackBreadthToken = function() { - // try to match a pattern - var result = this.parseTrackBreadthToken(value[I]); - if (result) { - I++; - return result; - } - - // no pattern matched, so the declaration is invalid: - console.error( - "INVALID DECLARATION: grid-template-rows/columns: " + value.toCSSString() + " (unrecognized track breadth)" - ); - buggy = true; - return; - }; - - if (value[I] instanceof cssSyntax.Func && value[I].name == "minmax") { - // we need to parse two subvalues - var value_backup = value; - var I_backup = I; - - // check we have exactly two arguments - var args = value_backup[I_backup].getArguments(); - if (args.length != 2) { - console.error( - "INVALID DECLARATION: grid-template-rows/columns: " + - value_backup.toCSSString() + - " (invalid number of arguments to the minmax function)" - ); - buggy = true; - return; - } - - // here's the first one: - value = args[0].filter(function(t) { - return !(t instanceof cssSyntax.WhitespaceToken); - }); - I = 0; - var data = parseTrackBreadthToken.call(this); - currentTrackBreadth.minType = data.type; - currentTrackBreadth.minValue = data.value; - - // here's the second one: - value = args[1].filter(function(t) { - return !(t instanceof cssSyntax.WhitespaceToken); - }); - I = 0; - var data = parseTrackBreadthToken.call(this); - currentTrackBreadth.maxType = data.type; - currentTrackBreadth.maxValue = data.value; - - // restore context - value = value_backup; - I = I_backup + 1; - } else { - // we need to parse only one value - var data = parseTrackBreadthToken.call(this); - currentTrackBreadth.minType = currentTrackBreadth.maxType = data.type; - currentTrackBreadth.minValue = currentTrackBreadth.maxValue = data.value; - } - - return { result: currentTrackBreadth, I: I }; - }, - - parseAutoRowsBreadth: function(cssText) { - // TODO: check that no tokens are left when the parsing is done (+columns) - - // parse value into tokens: - var unfiltred_value = cssSyntax.parseCSSValue(cssText); - var value = unfiltred_value.filter(function(o) { - return !(o instanceof cssSyntax.WhitespaceToken); - }); - value.toCSSString = function() { - return unfiltred_value.toCSSString(); - }; - - // parse tokens into data: - var data = this.parseTrackBreadth(value, 0); - if (data.result) { - this.defaultYSize = data.result; - } else { - throw "TODO: better error message"; - } - return; - }, - - parseAutoColumnsBreadth: function(cssText) { - // parse value into tokens: - var unfiltred_value = cssSyntax.parseCSSValue(cssText); - var value = unfiltred_value.filter(function(o) { - return !(o instanceof cssSyntax.WhitespaceToken); - }); - value.toCSSString = function() { - return unfiltred_value.toCSSString(); - }; - - // parse tokens into data: - var data = this.parseTrackBreadth(value, 0); - if (data.result) { - this.defaultXSize = data.result; - } else { - throw "TODO: better error message"; - } - return; - }, - - parseGridTemplate: function(cssText) { - // TODO: I used some lazy heuristics here - var buggy = false; - - // step 1: columns are defined before the slash, if any - var cssText = cssText.replace(/\/\*(.*?)\*\//g, ""); - var cssTextSections = cssText.split("/"); - if (cssTextSections.length == 2) { - if (this.parseColumnsTemplate(cssTextSections[0])) { - return (buggy = true); - } - cssText = cssTextSections[1]; - } - - // check that the syntax makes sense - else if (cssTextSections.length >= 3) { - return (buggy = true); - } - - // check if we can find any string - if (/"|'/.test(cssText)) { - // extract strings from the value - var strings = []; - cssText = cssText.replace(/\s*("(?:.*?)"|'(?:.*?)')\s*([-_a-zA-Z0-9]*)\s*/g, function(data, str, size) { - strings.push(str); - return " " + (size || "auto") + " "; - }); - - // remove duplicate line name blocks - cssText = cssText.replace(/\)\s*\(/g, " "); - - // parse rows now - if (this.parseRowsTemplate(cssText)) { - return (buggy = true); - } - - // parse areas now - if (this.parseAreasTemplate(strings.join(" "))) { - return (buggy = true); - } - } else { - // parse rows now - if (this.parseRowsTemplate(cssText)) { - return (buggy = true); - } - } - - return buggy; - }, - - parseAreasTemplate: function(cssText) { - // parse value into tokens: - var unfiltred_value = cssSyntax.parseCSSValue(cssText); - var value = unfiltred_value.filter(function(o) { - return !(o instanceof cssSyntax.WhitespaceToken); - }); - value.toCSSString = function() { - return unfiltred_value.toCSSString(); - }; - - // parse tokens into data: - var I = 0; - var buggy = false; - var regexp = /^([-_a-zA-Z0-9]+|[.]+)\s*/; - var grid = [], - areas = Object.create(null); - while (value[I]) { - var str = "" + value[I++].value; - - var columns = []; - while (str !== "") { - // extract next token - var data = regexp.exec(str); - if (!data || data.length != 2) { - return (buggy = true); - } - str = str.substr(data[0].length); - var cell = data[1]; - - // update cell max pos (ignore empty cells) - if (cell != "." && cell[0] != ".") { - if (!areas[cell]) { - areas[cell] = { - xStart: columns.length, - xEnd: columns.length + 1, - yStart: I - 1, - yEnd: I - }; - } - if (areas[cell].xStart > columns.length) { - return (buggy = true); - } - if (areas[cell].yStart > I - 1) { - return (buggy = true); - } - areas[cell].xEnd = Math.max(areas[cell].xEnd, columns.length + 1); - areas[cell].yEnd = Math.max(areas[cell].yEnd, I); - } - // add the cell to this row - columns.push(data[1]); - } - - grid.push(columns); - } - - // validate areas - for (var a in areas) { - var area = areas[a]; - for (var y = area.yStart; y < area.yEnd; y++) { - for (var x = area.xStart; x < area.xEnd; x++) { - if (grid[y][x] != a) { - return (buggy = true); - } - } - } - } - - // add autogenerated line names - for (var a in areas) { - var area = areas[a]; - - // make sure we have enough y lines for the areas to fit: - while (this.specifiedYLines.length <= area.yEnd) { - this.specifiedYLines.push([]); - this.specifiedYSizes.push(this.defaultYSize); - } - - // add the y line name - this.specifiedYLines[area.yStart].push(a + "-start"); - this.specifiedYLines[area.yEnd].push(a + "-end"); - - // make sure we have enough x lines for the areas to fit: - while (this.specifiedXLines.length <= area.xEnd) { - this.specifiedXLines.push([]); - this.specifiedXSizes.push(this.defaultXSize); - } - - // add the x line name - this.specifiedXLines[area.xStart].push(a + "-start"); - this.specifiedXLines[area.xEnd].push(a + "-end"); - } - }, - - parseTrackDefinitions: function(lineNames, trackBreadths, cssText) { - // replace the repeat() function by its full representation - cssText = cssText - .replace(/\[/g, "(") - .replace(/\]/g, ")") - .replace(/repeat\(\s*([0-9]+)\s*\,((?:\([^()]*\)|[^()])+)\)/gi, function(s, n, v) { - var result = " "; - for (var i = parseInt(n); i--; ) { - result += v + " "; - } - return result; - }); - ("TODO: improve the repeat support"); - - // merge duplicate name-definitions - cssText = cssText.replace(/\)\s*\(/g, " "); - ("TODO: improve the duplicate name-definitions support"); - - // parse value into tokens: - var unfiltred_value = cssSyntax.parseCSSValue(cssText); - var value = unfiltred_value.filter(function(o) { - return !(o instanceof cssSyntax.WhitespaceToken); - }); - value.toCSSString = function() { - return unfiltred_value.toCSSString(); - }; - - // parse tokens into data: - var I = 0; - var buggy = false; - - var parseLineNames = function() { - var currentLineNames = []; // array of string - - if (value[I] instanceof cssSyntax.SimpleBlock && value[I].name == "(") { - var tokens = value[I].value; - for (var J = tokens.length; J--; ) { - if (tokens[J] instanceof cssSyntax.IdentifierToken) { - currentLineNames.push(tokens[J].value); - } else if (tokens[J] instanceof cssSyntax.WhitespaceToken) { - // ignore - } else { - // unrecognized token, so the declaration is invalid: - console.error( - "INVALID DECLARATION: grid-template-rows/columns: " + value.toCSSString() + " (unrecognized line name)" - ); - buggy = true; - return; - } - } - - I++; - } - - lineNames.push(currentLineNames); - currentLineNames = []; - }; - - var parseTrackBreadth = function() { - var data = this.parseTrackBreadth(value, I); - trackBreadths.push(data.result); - I = data.I; - }; - - parseLineNames(); - while (value[I]) { - parseTrackBreadth.call(this); - if (buggy) { - break; - } - parseLineNames(); - if (buggy) { - break; - } - } - }, - - parseColumnsTemplate: function(cssText) { - return this.parseTrackDefinitions(this.specifiedXLines, this.specifiedXSizes, cssText); - }, - - parseRowsTemplate: function(cssText) { - return this.parseTrackDefinitions(this.specifiedYLines, this.specifiedYSizes, cssText); - }, - - parseTracksTemplate: function(columnsTemplate, rowsTemplate, areasTemplate) { - if (rowsTemplate) this.parseRowsTemplate(rowsTemplate); - if (columnsTemplate) this.parseColumnsTemplate(columnsTemplate); - if (areasTemplate) this.parseAreasTemplate(areasTemplate); - }, - - parseGridRowGap: function(cssText) { - this.rowGap = cssUnits.convertToPixels(cssText, this.element, { isHeightRelated: true }); - }, - - parseGridColumnGap: function(cssText) { - this.colGap = cssUnits.convertToPixels(cssText, this.element, { isWidthRelated: true }); - }, - - parseGridGap: function(cssText) { - var values = cssText.trim().split(/\s+/); - this.parseGridRowGap(values[0]); - this.parseGridColumnGap(values[1] || cssText); - }, - - buildExplicitMatrix: function() { - // reset - this.resetLinesToSpecified(); - this.rcMatrix = []; - - // simple autogrow - if (this.growY) { - this.ensureRows(this.ySizes.length); - this.ensureColumns(this.xSizes.length); - } else { - this.ensureColumns(this.xSizes.length); - this.ensureRows(this.ySizes.length); - } - }, - - buildImplicitMatrix: function() { - /* see http://dev.w3.org/csswg/css-grid/#auto-placement-algo */ - - // start by building the explicit matrix - this.buildExplicitMatrix(); - - // [1] position non-auto items - this.positionNonAutoItems(); - - // [2] position auto-in-column-only items - this.positionAutoInColumnOnlyItems(); - - // [3] make room for implicit tracks - this.autoGrow(); - }, - - ensureRows: function(yEnd) { - if (this.growY) { - // add rows as necessary - while (this.ySizes.length < yEnd) { - this.ySizes.push(this.defaultYSize); - } - while (this.rcMatrix.length < yEnd) { - this.rcMatrix.push([]); - } - } else { - // add rows as necessary - while (this.ySizes.length < yEnd) { - this.ySizes.push(this.defaultYSize); - } - - // walk through columns - for (var x = this.rcMatrix.length; x--; ) { - // add rows as necessary - if (this.rcMatrix[x].length < yEnd) { - this.rcMatrix[x].length = yEnd; - } - } - } - }, - - ensureColumns: function(xEnd) { - if (this.growY) { - // add columns as necessary - while (this.xSizes.length < xEnd) { - this.xSizes.push(this.defaultXSize); - } - - // walk through rows - for (var y = this.rcMatrix.length; y--; ) { - // add columns as necessary - if (this.rcMatrix[y].length < xEnd) { - this.rcMatrix[y].length = xEnd; - } - } - } else { - // add columns as necessary - while (this.xSizes.length < xEnd) { - this.xSizes.push(this.defaultXSize); - } - while (this.rcMatrix.length < xEnd) { - this.rcMatrix.push([]); - } - } - }, - - markAsOccupied: function(item) { - var xStart = item.xStart; - var yStart = item.yStart; - var xEnd = item.xEnd; - var yEnd = item.yEnd; - - // let's check the rcMatrix mode we're in: - if (this.growY) { - // add rows as necessary - this.ensureRows(yEnd); - - // walk through rows - for (var y = yStart; y < yEnd; y++) { - // add columns as necessary - if (this.rcMatrix[y].length < xEnd - 1) { - this.rcMatrix[y].length = xEnd - 1; - } - - // walk through columns - for (var x = xStart; x < xEnd; x++) { - // the cell is occupied - this.rcMatrix[y][x] = item; - } - } - } else { - // add columns as necessary - this.ensureColumns(xEnd); - - // walk through rows - for (var x = xStart; x < xEnd; x++) { - // add rows as necessary - if (this.rcMatrix[x].length < yEnd - 1) { - this.rcMatrix[x].length = yEnd - 1; - } - - // walk through rows - for (var y = yStart; y < yEnd; y++) { - // the cell is occupied - this.rcMatrix[x][y] = item; - } - } - } - }, - - positionNonAutoItems: function() { - for (var i = 0, l = this.items.length; i < l; i++) { - var item = this.items[i]; - - // if the element has a specific column associated to it - if (item.specifiedXStart.type == LOCATE_LINE) { - // if the element has a specified row associated to it - if (item.specifiedYStart.type == LOCATE_LINE) { - // find the start position (x axis) - var xStart = this.findXStart(item); - - // find the start position (y axis) - var yStart = this.findYStart(item); - - // find the end position (x axis) - var xEnd = this.findXEnd(item); - - // find the end position (y axis) - var yEnd = this.findYEnd(item); - - // we're done! this is so cool dude! - item.xStart = xStart; - item.yStart = yStart; - item.xEnd = xEnd; - item.yEnd = yEnd; - - // we should fill the explicit matrix now! - this.markAsOccupied(item); - } - } - } - }, - - positionAutoInColumnOnlyItems: function() { - if (this.growY) { - for (var i = 0, l = this.items.length; i < l; i++) { - var item = this.items[i]; - - // if the element has a specified row associated to it, but is not positioned yet - if (item.specifiedYStart.type == LOCATE_LINE && item.yStart == -1) { - // find the start position (y axis) - var yStart = this.findYStart(item); - - // find the end position (y axis) - var yEnd = this.findYEnd(item); - - // assumption: X is either AUTO + SPAN or AUTO + AUTO - var spanX = 1; - if (item.specifiedXEnd.type == LOCATE_SPAN) { - if (item.specifiedXEnd.name === undefined) { - // The span is defined as this value - spanX = item.specifiedXEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanX = 1; - console.error("[CSS-GRID] UNSUPPORTED: grid-row/column: auto / span [0-9]+ [A-Z]+"); - } - } - - // add rows as necessary - this.ensureRows(yEnd); - - // walk through columns to find a suitable position - IncrementalColumnAttempts: for (var sx = 0; ; sx++) { - for (var x = sx + spanX - 1; x >= sx; x--) { - for (var y = yStart; y < yEnd; y++) { - // if the cell is occupied - if (this.rcMatrix[y][x]) { - continue IncrementalColumnAttempts; - } - } - } - - break; - } - - var xStart = sx; - var xEnd = sx + spanX; - - // we're done! this is so cool dude! - item.xStart = xStart; - item.yStart = yStart; - item.xEnd = xEnd; - item.yEnd = yEnd; - - // we should fill the explicit matrix now! - this.markAsOccupied(item); - } - } - } else { - for (var i = 0, l = this.items.length; i < l; i++) { - var item = this.items[i]; - - // if the element has a specified column associated to it, but is not positioned yet - if (item.specifiedXStart.type == LOCATE_LINE && item.xStart == -1) { - // find the start position (x axis) - var xStart = this.findXStart(item); - - // find the end position (x axis) - var xEnd = this.findXEnd(item); - - // assumption: Y is either AUTO + SPAN or AUTO + AUTO - var spanY = 1; - if (item.specifiedYEnd.type == LOCATE_SPAN) { - if (item.specifiedYEnd.name === undefined) { - // The span is defined as this value - spanY = item.specifiedYEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanY = 1; - } - } - - // add rows as necessary - this.ensureColumns(xEnd); - - // walk through columns to find a suitable position - IncrementalRowAttempts: for (var sy = 0; ; sy++) { - for (var y = sy + spanY - 1; y >= sy; y--) { - for (var x = xStart; x < xEnd; x++) { - // if the cell is occupied - if (this.rcMatrix[x][y]) { - continue IncrementalRowAttempts; - } - } - } - - break; - } - - var yStart = sy; - var yEnd = sy + spanY; - - // we're done! this is so cool dude! - item.xStart = xStart; - item.yStart = yStart; - item.xEnd = xEnd; - item.yEnd = yEnd; - - // we should fill the explicit matrix now! - this.markAsOccupied(item); - } - } - } - }, - - autoGrow: function() { - // helpers - var growX = function(index) { - while (index >= this.xLines.length) { - this.xLines.push(["*"]); - this.xSizes.push(this.defaultXSize); - } - }; - - var growY = function(index) { - while (index >= this.yLines.length) { - this.yLines.push(["*"]); - this.ySizes.push(this.defaultYSize); - } - }; - - // reset the lines to the specified ones if necessary - this.resetLinesToSpecified(); // TODO: why? - - // ensure there's at least one cell - growX.call(this, 1); - growY.call(this, 1); - - // check if an item is explicitly positioned outside the explicit grid, and expand it if needed - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - - // CONSIDER: items already positioned - if (item.xEnd > 0) { - growX.call(this, item.xEnd); - } - if (item.yEnd > 0) { - growY.call(this, item.yEnd); - } - if (item.xEnd > 0 && item.yEnd > 0) { - continue; - } - - // CONSIDER: elements with a known location - - // (x axis): - if (item.specifiedXEnd.type == LOCATE_LINE || item.specifiedXStart.type == LOCATE_LINE) { - var xStart = this.findXStart(item); - var xEnd = this.findXEnd(item); - growX.call(this, xEnd); - } - - // (y axis): - if (item.specifiedYEnd.type == LOCATE_LINE || item.specifiedYStart.type == LOCATE_LINE) { - var yStart = this.findYStart(item); - var yEnd = this.findYEnd(item); - if (yEnd <= yStart) { - yEnd = yStart + 1; - } - growY.call(this, yEnd); - } - - // CONSIDER: known spans - // // NOTE: I don't support "grid-row/column-start: span X"; - if (item.specifiedXEnd.type == LOCATE_SPAN && item.specifiedXEnd.name === undefined) { - growX.call(this, item.specifiedXEnd.index); - } - if (item.specifiedYEnd.type == LOCATE_SPAN && item.specifiedYEnd.name === undefined) { - growY.call(this, item.specifiedYEnd.index); - } - } - - // grow the grid matrix: - if (this.growY) { - while (this.ySizes.length > this.rcMatrix.length) { - this.rcMatrix.push([]); - } - for (var r = this.rcMatrix.length; r--; ) { - this.rcMatrix[r].length = this.xSizes.length; - } - } else { - while (this.xSizes.length > this.rcMatrix.length) { - this.rcMatrix.push([]); - } - for (var r = this.rcMatrix.length; r--; ) { - this.rcMatrix[r].length = this.ySizes.length; - } - } - }, - - scheduleRelayout: function() { - var This = this; - if (!This.isLayoutScheduled) { - This.isLayoutScheduled = true; - requestAnimationFrame(function() { - try { - var savedScrolls = getScrollStates(); - This.revokePolyfilledStyle(); - This.updateFromElement(); - This.performLayout(); - This.generatePolyfilledStyle(); - savedScrolls.forEach(function(d) { - d.element.scrollTop = d.top; - d.element.scrollLeft = d.left; - }); - } finally { - This.isLayoutScheduled = false; - } - }); - } - - //----------------------------------------------------------- - function getScrollStates() { - var states = []; - var element = This.element; - while ((element = element.parentNode)) { - if ("scrollTop" in element) { - states.push({ element: element, left: element.scrollLeft, top: element.scrollTop }); - } - } - return states; - } - }, - - performLayout: function() { - // process non-automatic items - this.buildImplicitMatrix(); - - // position the remaining grid items. - var cursor = { x: 0, y: 0 }; - - if (this.growY) { - //For each grid item that hasn’t been positioned by the previous steps, in order-modified document order: - for (var i = 0; i < this.items.length; i++) { - var item = this.items[i]; - if (item.xEnd != -1 && item.yEnd != -1) { - continue; - } - - // reset the cursor if the algorithm is set to 'dense' - if (this.growDense) { - cursor = { x: 0, y: 0 }; - } - - //If the item has a definite column position: - if (item.specifiedXStart.type == LOCATE_LINE) { - // 1. Set the column position of the cursor to be equal to the inline-start index of the grid item. - var xStart = this.findXStart(item); - if (cursor.x > xStart) { - cursor.y++; - } - cursor.x = xStart; - var xEnd = this.findXEnd(item); - if (xStart >= xEnd) { - xEnd = xStart + 1; - } - item.xStart = xStart; - item.xEnd = xEnd; - - // assumption: Y is either AUTO + SPAN or AUTO + AUTO - var spanY = 1; - if (item.specifiedYEnd.type == LOCATE_SPAN) { - if (item.specifiedYEnd.name === undefined) { - // The span is defined as this value - spanY = item.specifiedYEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanY = 1; - } - } - - // 2. Increment the auto-placement cursor’s row position until a value is found where the grid item does not overlap any occupied grid cells (creating new rows in the implicit grid as necessary). - IncrementalRowAttempts: while (true) { - // make room for the currently attempted position - this.ensureRows(cursor.y + spanY); - - // check the non-overlap condition - for (var y = cursor.y + spanY - 1; y >= cursor.y; y--) { - for (var x = xStart; x < xEnd; x++) { - // if the cell is occupied - if (this.rcMatrix[y][x]) { - // move to the next row - cursor.y = y + 1; - continue IncrementalRowAttempts; - } - } - } - - break; - } - - // settle the position - item.xStart = xStart; - item.xEnd = xEnd; - item.yStart = cursor.y; - item.yEnd = cursor.y + spanY; - - this.markAsOccupied(item); - } else { - // If the item has an automatic grid position in both axes: - - // assumption: X is either AUTO + SPAN or AUTO + AUTO - var spanX = 1; - if (item.specifiedXEnd.type == LOCATE_SPAN) { - if (item.specifiedXEnd.name === undefined) { - // The span is defined as this value - spanX = item.specifiedXEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanX = 1; - console.error("[CSS-GRID] UNSUPPORTED: grid-row/column: auto / span [0-9]+ [A-Z]+"); - } - } - - // assumption: Y is either AUTO + SPAN or AUTO + AUTO - var spanY = 1; - if (item.specifiedYEnd.type == LOCATE_SPAN) { - if (item.specifiedYEnd.name === undefined) { - // The span is defined as this value - spanY = item.specifiedYEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanY = 1; - } - } - - // Increment the auto-placement cursor’s row/column position (creating new rows in the implicit grid as necessary) - var nextStep = function() { - cursor.x++; - if (cursor.x + spanX > this.rcMatrix[0].length) { - cursor.y++; - this.ensureRows(cursor.y + spanY); - cursor.x = 0; - } - return true; - }; - - // 1. Increment the column position of the auto-placement cursor until this item’s grid area does not overlap any occupied grid cells - IncrementalYXPositionAttempts: while (true) { - // make room for the currently attempted position - this.ensureRows(cursor.y + spanY); - - // check the non-overlap condition - for (var y = cursor.y + spanY - 1; y >= cursor.y; y--) { - for (var x = cursor.x + spanX - 1; x >= cursor.x; x--) { - // if the cell is occupied - if (this.rcMatrix[y][x]) { - // move to the next row/column - nextStep.call(this); - continue IncrementalYXPositionAttempts; - } - } - } - - break; - } - - // settle the position - item.xStart = cursor.x; - item.xEnd = cursor.x + spanX; - item.yStart = cursor.y; - item.yEnd = cursor.y + spanY; - - this.markAsOccupied(item); - } - } - } else { - //For each grid item that hasn’t been positioned by the previous steps, in order-modified document order: - for (var i = 0; i < this.items.length; i++) { - var item = this.items[i]; - if (item.xEnd != -1 && item.yEnd != -1) { - continue; - } - - // reset the cursor if the algorithm is set to 'dense' - if (this.growDense) { - cursor = { x: 0, y: 0 }; - } - - //If the item has a definite row position: - if (item.specifiedYStart.type == LOCATE_LINE) { - // 1. Set the column position of the cursor to be equal to the inline-start index of the grid item. - var yStart = this.findYStart(item); - if (cursor.y > yStart) { - cursor.x++; - } - cursor.y = yStart; - var yEnd = this.findYEnd(item); - if (yStart >= yEnd) { - yEnd = yStart + 1; - } - item.yStart = yStart; - item.yEnd = yEnd; - - // assumption: X is either AUTO + SPAN or AUTO + AUTO - var spanX = 1; - if (item.specifiedXEnd.type == LOCATE_SPAN) { - if (item.specifiedXEnd.name === undefined) { - // The span is defined as this value - spanX = item.specifiedXEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanX = 1; - console.error("[CSS-GRID] UNSUPPORTED: grid-row/column: auto / span [0-9]+ [A-Z]+"); - } - } - - // 2. Increment the auto-placement cursor’s row position until a value is found where the grid item does not overlap any occupied grid cells (creating new rows in the implicit grid as necessary). - IncrementalColumnAttempts: while (true) { - // make room for the currently attempted position - this.ensureColumns(cursor.x + spanX); - - // check the non-overlap condition - for (var x = cursor.x + spanX - 1; x >= cursor.x; x--) { - for (var y = yStart; y < yEnd; y++) { - // if the cell is occupied - if (this.rcMatrix[x][y]) { - // move to the next row - cursor.x = x + 1; - continue IncrementalColumnAttempts; - } - } - } - - break; - } - - // settle the position - item.yStart = yStart; - item.yEnd = yEnd; - item.xStart = cursor.x; - item.yEnd = cursor.x + spanX; - - this.markAsOccupied(item); - } else { - // If the item has an automatic grid position in both axes: - - // assumption: Y is either AUTO + SPAN or AUTO + AUTO - var spanY = 1; - if (item.specifiedYEnd.type == LOCATE_SPAN) { - if (item.specifiedYEnd.name === undefined) { - // The span is defined as this value - spanY = item.specifiedYEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanY = 1; - } - } - - // assumption: X is either AUTO + SPAN or AUTO + AUTO - var spanX = 1; - if (item.specifiedXEnd.type == LOCATE_SPAN) { - if (item.specifiedXEnd.name === undefined) { - // The span is defined as this value - spanX = item.specifiedXEnd.index; - } else { - // If the grid item has an automatic position and a grid span for a named line in a given dimension, instead treat the grid span as one. - spanX = 1; - console.error("[CSS-GRID] UNSUPPORTED: grid-row/column: auto / span [0-9]+ [A-Z]+"); - } - } - - // Increment the auto-placement cursor’s row/column position (creating new rows in the implicit grid as necessary) - var nextStep = function() { - cursor.y++; - if (cursor.y + spanY > this.rcMatrix[0].length) { - cursor.x++; - this.ensureRows(cursor.x + spanX); - cursor.y = 0; - } - return true; - }; - - // 1. Increment the column position of the auto-placement cursor until this item’s grid area does not overlap any occupied grid cells - IncrementalXYPositionAttempts: while (true) { - // make room for the currently attempted position - this.ensureColumns(cursor.x + spanX); - - // check the non-overlap condition - for (var x = cursor.x + spanX - 1; x >= cursor.x; x--) { - for (var y = cursor.y + spanY - 1; y >= cursor.y; y--) { - // if the cell is occupied - if (this.rcMatrix[x][y]) { - // move to the next row/column - nextStep.call(this); - continue IncrementalXYPositionAttempts; - } - } - } - - break; - } - - // settle the position - item.xStart = cursor.x; - item.xEnd = cursor.x + spanX; - item.yStart = cursor.y; - item.yEnd = cursor.y + spanY; - - this.markAsOccupied(item); - } - } - } - this.computeAbsoluteTrackBreadths(); - }, - - computeAbsoluteTrackBreadths: function() { - /////////////////////////////////////////////////////////// - // hide child elements, to get free width/height - /////////////////////////////////////////////////////////// - var runtimeStyle = createRuntimeStyle("no-children", this.element); - runtimeStyle.set(this.element, { - border: "none", - padding: "0px", - "min-height": "0px" - }); - for (var i = this.items.length; i--; ) { - runtimeStyle.set(this.items[i], { display: "none" }); - } - - /////////////////////////////////////////////////////////// - // hide child elements, to get free width/height - /////////////////////////////////////////////////////////// - var LIMIT_IS_INFINITE = 1; - var infinity = 9999999.0; - var rowCount = this.growY ? this.rcMatrix.length : this.rcMatrix[0].length; - var colCount = this.growY ? this.rcMatrix[0].length : this.rcMatrix.length; - var fullWidth = this.element.offsetWidth; - var fullHeight = this.element.offsetHeight; - var fullDistributableWidth = Math.max(0, fullWidth - Math.max(0, colCount - 1) * this.colGap); - var fullDistributableHeight = Math.max(0, fullHeight - Math.max(0, rowCount - 1) * this.rowGap); - - /////////////////////////////////////////////////////////// - // show child elements again - /////////////////////////////////////////////////////////// - runtimeStyle.revoke(); - - // - // 10.3 Initialize Track Sizes - // - var initializeFromConstraints = function(v) { - var base = 0, - limit = infinity; - switch (v.minType) { - // For fixed track sizes, resolve to an absolute length and use that size. - case TRACK_BREADTH_LENGTH: - base = v.minValue; - break; - case TRACK_BREADTH_PERCENTAGE: - base = (v.minValue * fullSize) / 100; - break; - } - - switch (v.maxType) { - // For fixed track sizes, resolve to an absolute length and use that size. - case TRACK_BREADTH_LENGTH: - limit = v.minValue; - break; - case TRACK_BREADTH_PERCENTAGE: - limit = (v.minValue * fullSize) / 100; - break; - - // For flexible track sizes, use the track’s initial base size as its initial growth limit. - case TRACK_BREADTH_FRACTION: - limit = base; - break; - - // For intrinsic track sizes, use an initial growth limit of infinity. - default: - limit = infinity; - break; - } - - return { - base: base, - limit: limit, - breadth: 0, - flags: (limit == infinity ? LIMIT_IS_INFINITE : 0) | 0 - }; - }; - - // - // Equal distribution algorithm - // - var distributeEquallyAmongTracks = function distributeEquallyAmongTracks( - xSizes, - kind, - tracks, - spaceToDistribute, - enforceLimit - ) { - // Distribute space to base sizes - var trackAmount = tracks.length; - var spacePerTrack = spaceToDistribute / trackAmount; - if (kind == "base") { - // if we enforce the limit, grow up to the most limitating track - if (enforceLimit) { - for (var t = tracks.length; t--; ) { - var cx = tracks[t].x; - - // find the lowest acceptable increase for all tracks - var newBase = xSizes[cx].base + spacePerTrack; - - // if limits are enfo - if (enforceLimit && xSizes[cx].flags & (LIMIT_IS_INFINITE == 0) && newBase > xSizes[cx].limit) { - spacePerTrack -= newBase - xSizes[cx].limit; - } - } - } - - for (var t = tracks.length; t--; ) { - var cx = tracks[t].x; - xSizes[cx].base += spacePerTrack; - } - } else if (kind == "limit") { - // Update the tracks' affected sizes by folding in the calculated increase so that the next round of space distribution will account for the increase. - for (var t = tracks.length; t--; ) { - var cx = tracks[t].x; - // If the growth limit is infinite... - if (xSizes[cx].flags & LIMIT_IS_INFINITE) { - // set it to the track’s base size plus the calculated increase - if (xSizes[cx].limit == infinity) { - xSizes[cx].limit = xSizes[cx].base + spacePerTrack; - } else { - xSizes[cx].limit += spacePerTrack; // TODO: THERE IS A BUG HERE ? - } - } else { - // otherwise just increase the limit - xSizes[cx].limit += spacePerTrack; - } - } - } - }; - - // - // 10.4 Resolve Content-Based Track Sizing Functions - // - var computeTrackBreadth = function(xSizes, specifiedSizes, getMinWidthOf, getMaxWidthOf, getXStartOf, getXEndOf) { - // For each track - var items_done = 0; // items already consumed for this algorithm - for (var x = specifiedSizes.length; x--; ) { - var dontCountMaxItems = false; - - // If the track has a ‘min-content’ min track sizing function - if (specifiedSizes[x].minType == TRACK_BREADTH_MIN_CONTENT || specifiedSizes[x].minType == TRACK_BREADTH_AUTO) { - // Consider the items in it with a span of 1: - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - if (item_xStart > x || item_xEnd <= x || item_xEnd - item_xStart != 1) continue; - - // Set its base size to the maximum of the items’ min-content contributions. - xSizes[x].base = Math.max(xSizes[x].base, getMinWidthOf(item)); - items_done++; - dontCountMaxItems = true; - } - } - - // If the track has a ‘max-content’ min track sizing function - else if (specifiedSizes[x].minType == TRACK_BREADTH_MAX_CONTENT) { - // Consider the items in it with a span of 1: - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - if (item_xStart > x || item_xEnd <= x || item_xEnd - item_xStart != 1) continue; - - // Set its base size to the maximum of the items’ max-content contributions. - xSizes[x].base = Math.max(xSizes[x].base, getMaxWidthOf(item)); - items_done++; - dontCountMaxItems = true; - } - } - - // If the track has a ‘min-content’ max track sizing function - if (specifiedSizes[x].maxType == TRACK_BREADTH_MIN_CONTENT) { - // Consider the items in it with a span of 1: - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - if (item_xStart > x || item_xEnd <= x || item_xEnd - item_xStart != 1) continue; - - // Set its growth limit to the maximum of the items’ min-content contributions. - if (xSizes[x].limit == infinity) { - xSizes[x].limit = getMinWidthOf(item); - } else { - xSizes[x].limit = Math.max(xSizes[x].limit, getMinWidthOf(item)); - } - - if (!dontCountMaxItems) { - items_done++; - } - } - } - - // If the track has a ‘max-content’ max track sizing function - else if ( - specifiedSizes[x].maxType == TRACK_BREADTH_MAX_CONTENT || - specifiedSizes[x].minType == TRACK_BREADTH_AUTO - ) { - // Consider the items in it with a span of 1: - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - if (item_xStart > x || item_xEnd <= x || item_xEnd - item_xStart != 1) continue; - - // Set its growth limit to the maximum of the items’ max-content contributions. - if (xSizes[x].limit == infinity) { - xSizes[x].limit = getMaxWidthOf(item); - } else { - xSizes[x].limit = Math.max(xSizes[x].limit, getMaxWidthOf(item)); - } - - if (!dontCountMaxItems) { - items_done++; - } - } - } - - // update infinity flag - if (xSizes[x].limit != infinity) { - xSizes[x].flags = xSizes[x].flags & ~LIMIT_IS_INFINITE; - } - } - - // Next, consider the items with a span of 2 that do not span a track with a flexible sizing function: - // Repeat incrementally for items with greater spans until all items have been considered. - for (var span = 2; items_done < this.items.length && span <= specifiedSizes.length; span++) { - ItemLoop: for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - if (item_xEnd - item_xStart != span) continue ItemLoop; - - // gather some pieces of data about the tracks - var full_base = 0; - var full_limit = 0; - for (var cx = item_xStart; cx < item_xEnd; cx++) { - // 1. we want to make sure none is flexible - if (specifiedSizes[cx].maxType == TRACK_BREADTH_FRACTION) continue ItemLoop; - - // 2. compute aggregated sizes - full_base += xSizes[cx].base; - full_limit += xSizes[cx].limit; - } - if (full_limit > infinity) full_limit = infinity; - - var distributeFreeSpace = function( - requiredSpace, - kind /*'base'|'limit'*/, - target /*'min-content'|'max-content'*/ - ) { - while (true) { - // compute the required extra space - var spaceToDistribute = requiredSpace; - for (var cx = item_xStart; cx < item_xEnd; cx++) { - spaceToDistribute -= xSizes[cx][kind]; - } - - // if no space to distribute, just lock auto columns: - if (spaceToDistribute <= 1 / 1024) { - //due to double precision, this may never reach perfect 0 - for (var cx = item_xStart; cx < item_xEnd; cx++) { - if (xSizes[cx].limit == infinity) { - xSizes[cx].limit = xSizes[cx].base; - } - } - return; - } - - // sort rows by growth limit - var rows_and_limits = []; - for (var cx = item_xStart; cx < item_xEnd; cx++) { - rows_and_limits.push({ - x: cx, - base: xSizes[cx].base, - limit: xSizes[cx].limit, - minIsMinContent: - specifiedSizes[cx].minType == TRACK_BREADTH_MIN_CONTENT || - specifiedSizes[cx].minType == TRACK_BREADTH_AUTO, - minIsMaxContent: specifiedSizes[cx].minType == TRACK_BREADTH_MAX_CONTENT, - maxIsMinContent: specifiedSizes[cx].maxType == TRACK_BREADTH_MIN_CONTENT, - maxIsMaxContent: - specifiedSizes[cx].maxType == TRACK_BREADTH_MAX_CONTENT || - specifiedSizes[cx].maxType == TRACK_BREADTH_AUTO - }); - } - rows_and_limits.sort(function(a, b) { - return a.limit - b.limit; - }); - - // remove non-affected tracks - rows_and_limits = rows_and_limits.filter(function(b) { - if (kind == "base") { - if (target == "min-content") { - return b.minIsMinContent || b.minIsMaxContent; - } else if (target == "max-content") { - return b.minIsMaxContent; - } - } else if (kind == "limit") { - if (target == "min-content") { - return b.maxIsMinContent || b.maxIsMaxContent; - } else if (target == "max-content") { - return b.maxIsMaxContent; - } - } - return false; - }); - - // check that there is at least one affected track - if (rows_and_limits.length == 0) { - return; - } - - // apply the algorithm - if (kind == "base") { - // Distribute space up to growth limits - var tracks = rows_and_limits.filter(function(b) { - return b.base < b.limit; - }, 0); - var trackAmount = tracks.length; - if (trackAmount > 0) { - distributeEquallyAmongTracks(xSizes, kind, tracks, spaceToDistribute, /*enforceLimit:*/ true); - } else { - // Distribute space beyond growth limits - // If space remains after all tracks are frozen, unfreeze and continue to distribute space to - - // - when handling ‘min-content’ base sizes: - if (target == "min-content") { - // any affected track that happens to also have an intrinsic max track sizing function; - var tracks = rows_and_limits.filter(function(b) { - return b.maxIsMinContent || b.maxIsMaxContent; - }, 0); - var trackAmount = tracks.length; - if (trackAmount >= 1) { - // (such tracks exist:) - distributeEquallyAmongTracks( - xSizes, - kind, - tracks, - spaceToDistribute, - /*enforceLimit:*/ false - ); - } else { - // if there are no such tracks, then all affected tracks. - distributeEquallyAmongTracks( - xSizes, - kind, - rows_and_limits, - spaceToDistribute, - /*enforceLimit:*/ false - ); - } - } - - // - when handling ‘max-content’ base sizes: - else if (target == "max-content") { - // any affected track that happens to also have a ‘max-content’ max track sizing function; - var tracks = rows_and_limits.filter(function(b) { - return b.maxIsMaxContent; - }, 0); - var trackAmount = tracks.length; - if (trackAmount >= 1) { - // (such tracks exist:) - distributeEquallyAmongTracks( - xSizes, - kind, - tracks, - spaceToDistribute, - /*enforceLimit:*/ false - ); - } else { - // if there are no such tracks, then all affected tracks. - distributeEquallyAmongTracks( - xSizes, - kind, - rows_and_limits, - spaceToDistribute, - /*enforceLimit:*/ false - ); - } - } - } - } else if (kind == "limit") { - // distribute among all tracks - distributeEquallyAmongTracks(xSizes, kind, rows_and_limits, spaceToDistribute); - } - } - }; - - var updateInfiniteLimitFlag = function() { - for (var x = xSizes.length; x--; ) { - if (xSizes[x].limit != infinity) { - xSizes[x].flags = xSizes[x].flags & ~LIMIT_IS_INFINITE; - } - } - }; - - // - // 1. For intrinsic minimums: First increase the base size of tracks with a min track sizing function of ‘min-content’ or ‘max-content’ by distributing extra space as needed to account for these items' min-content contributions. - // - distributeFreeSpace(getMinWidthOf(item), "base", "min-content"); - updateInfiniteLimitFlag(); - - // - // 2. For max-content minimums: Next continue to increase the base size of tracks with a min track sizing function of ‘max-content’ by distributing extra space as needed to account for these items' max-content contributions. - // - distributeFreeSpace(getMaxWidthOf(item), "base", "max-content"); - updateInfiniteLimitFlag(); - - // - // 3. For intrinsic maximums: Third increase the growth limit of tracks with a max track sizing function of ‘min-content’ or ‘max-content’ by distributing extra space as needed to account for these items' min-content contributions. - // Mark any tracks whose growth limit changed from infinite to finite in this step as infinitely growable for the next step. - // (aka do not update infinity flag) - // - distributeFreeSpace(getMinWidthOf(item), "limit", "min-content"); - - // - // 4. For max-content maximums: Lastly continue to increase the growth limit of tracks with a max track sizing function of ‘max-content’ by distributing extra space as needed to account for these items' max-content contributions. - // - distributeFreeSpace(getMaxWidthOf(item), "limit", "max-content"); - updateInfiniteLimitFlag(); - - items_done++; - } - } - }; - - var computeTrackBreadthIncrease = function( - xSizes, - specifiedSizes, - fullSize, - fullDistributableSize, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ) { - // sort rows by growth limit - var rows_and_limits = xSizes.map(function(item, cx) { - return { - x: cx, - base: xSizes[cx].base, - limit: xSizes[cx].limit, - minIsMinContent: - specifiedSizes[cx].minType == TRACK_BREADTH_MIN_CONTENT || specifiedSizes[cx].minType == TRACK_BREADTH_AUTO, - minIsMaxContent: specifiedSizes[cx].minType == TRACK_BREADTH_MAX_CONTENT, - maxIsMinContent: specifiedSizes[cx].maxType == TRACK_BREADTH_MIN_CONTENT, - maxIsMaxContent: - specifiedSizes[cx].maxType == TRACK_BREADTH_MAX_CONTENT || specifiedSizes[cx].maxType == TRACK_BREADTH_AUTO - }; - }); - rows_and_limits.sort(function(a, b) { - return a.limit - b.limit; - }); - - while (true) { - // compute size to distribute - var spaceToDistribute = fullDistributableSize; - for (var cx = xSizes.length; cx--; ) { - spaceToDistribute -= xSizes[cx].base; - } - - // check that there is some space to distribute - if (spaceToDistribute <= 1 / 1024) { - return; - } // NOTE: the space may never become 0 due to a rounding issue - - // Distribute space up to growth limits - var tracks = (rows_and_limits = rows_and_limits.filter(function(b) { - return (b.minIsMinContent || b.minIsMaxContent) && b.base < b.limit; - }, 0)); - var trackAmount = tracks.length; - if (trackAmount <= 0) { - return; - } - distributeEquallyAmongTracks(xSizes, "base", tracks, spaceToDistribute, /*enforceLimit:*/ true); - } - }; - - var computeFlexibleTrackBreadth = function( - xSizes, - specifiedSizes, - fullSize, - fullDistributableSize, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ) { - // If the free space is an indefinite length: - if (fullSize == 0) { - //The used flex fraction is the maximum of: - var currentFraction = 0; - - // • Each flexible track’s base size divided by its flex factor. - ("TODO: I believe this is completely useless, but CSSWG will not change it."); - - // • The result of finding the size of an fr for each grid item that crosses a flexible track, using all the grid tracks that the item crosses and a space to fill of the item’s max-content contribution. - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var item_xStart = getXStartOf(item); - var item_xEnd = getXEndOf(item); - - // gather some pieces of data about the tracks - var spaceToDistribute = getMaxWidthOf(item); - var flexFactorSum = 0; - for (var cx = item_xStart; cx < item_xEnd; cx++) { - if (specifiedSizes[cx].maxType == TRACK_BREADTH_FRACTION) { - // compute how much flexible tracks are required - flexFactorSum += specifiedSizes[cx].maxValue; - } else { - // deduce non-flexible tracks from the space to distribute - spaceToDistribute -= xSizes[cx].base; - } - } - - // compute the minimum flex fraction for this item - if (spaceToDistribute > 0 && flexFactorSum > 0) { - currentFraction = Math.max(currentFraction, spaceToDistribute / flexFactorSum); - } - } - - // for each flexible track - for (var x = xSizes.length; x--; ) { - if (specifiedSizes[x].maxType == TRACK_BREADTH_FRACTION) { - // Compute the product of the hypothetical flex fraction and the track’s flex factor - var trackSize = currentFraction * specifiedSizes[x].maxValue; - - // If that size is less than the track’s base size: - if (xSizes[x].base < trackSize) { - // set its base size to that product. - xSizes[x].breadth = trackSize; - } else { - xSizes[x].breadth = xSizes[x].base; - } - } else { - xSizes[x].breadth = xSizes[x].base; - } - } - } else { - // compute the leftover space - var spaceToDistribute = fullDistributableSize; - var tracks = []; - var fractionSum = 0; - for (var x = xSizes.length; x--; ) { - if (specifiedSizes[x].maxType == TRACK_BREADTH_FRACTION) { - tracks.push(x); - fractionSum += specifiedSizes[x].maxValue; - } else { - spaceToDistribute -= xSizes[x].breadth = xSizes[x].base; - } - } - - // while there are flexible tracks to size - while (tracks.length > 0) { - // Let the hypothetical flex fraction be the leftover space divided by the sum of the flex factors of the flexible tracks. - var currentFraction = spaceToDistribute / fractionSum; - var restart = false; - - // for each flexible track - for (var i = tracks.length; i--; ) { - var x = tracks[i]; - - // Compute the product of the hypothetical flex fraction and the track’s flex factor - var trackSize = currentFraction * specifiedSizes[x].maxValue; - - // If that size is less than the track’s base size: - if (xSizes[x].base < trackSize) { - // set its base size to that product. - xSizes[x].breadth = trackSize; - } else { - // mark as non-flexible - xSizes[x].breadth = xSizes[x].base; - - // remove from computation - fractionSum -= specifiedSizes[x].maxValue; - tracks.splice(i, 1); - - // restart - restart = true; - } - } - - if (!restart) { - tracks.length = 0; - } - } - } - }; - - var computeFinalTrackBreadth = function( - xSizes, - this_xSizes, - fullWidth, - fullDistributableWidth, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ) { - // compute base and limit - computeTrackBreadth.call(this, xSizes, this_xSizes, getMinWidthOf, getMaxWidthOf, getXStartOf, getXEndOf); - - // ResolveContentBasedTrackSizingFunctions (step 4) - for (var x = this_xSizes.length; x--; ) { - if (xSizes[x].limit == infinity) { - xSizes[x].limit = xSizes[x].base; - } - } - - // grow tracks up to their max - computeTrackBreadthIncrease.call( - this, - xSizes, - this_xSizes, - fullWidth, - fullDistributableWidth, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ); - - // handle flexible things - computeFlexibleTrackBreadth.call( - this, - xSizes, - this_xSizes, - fullWidth, - fullDistributableWidth, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ); - }; - - /////////////////////////////////////////////////////////// - // compute breadth of columns - /////////////////////////////////////////////////////////// - var mode = "x"; - var fullSize = fullWidth; - var fullDistributableSize = fullDistributableWidth; - var xSizes = this.xSizes.map(initializeFromConstraints); - var colGap = this.colGap; - - var getMinWidthOf = function(item) { - return item.minWidth + item.hMargins - Math.max(0, item.xEnd - item.xStart - 1) * colGap; - }; - var getMaxWidthOf = function(item) { - return item.maxWidth + item.hMargins - Math.max(0, item.xEnd - item.xStart - 1) * colGap; - }; - var getXStartOf = function(item) { - return item.xStart; - }; - var getXEndOf = function(item) { - return item.xEnd; - }; - - // compute base and limit - computeFinalTrackBreadth.call( - this, - xSizes, - this.xSizes, - fullWidth, - fullDistributableWidth, - getMinWidthOf, - getMaxWidthOf, - getXStartOf, - getXEndOf - ); - - /////////////////////////////////////////////////////////// - // position each element absolutely, and set width to compute height - /////////////////////////////////////////////////////////// - var usedStyle = usedStyleOf(this.element); - var runtimeStyle = createRuntimeStyle("temp-position", this.element); - - if (usedStyle.getPropertyValue("position") == "static") { - runtimeStyle.set(this.element, { position: "relative" }); - } - - this.items.forEach(function(item) { - // firstly, compute the total breadth of the spanned tracks - var totalBreadth = 0; - for (var cx = item.xStart; cx < item.xEnd; cx++) { - totalBreadth += xSizes[cx].breadth; - } - - // secondly, adapt to the alignment properties - ("TODO: alignment"); - - // finally, set the style - runtimeStyle.set(item.element, { - position: "absolute", - width: "" + totalBreadth + "px", - "box-sizing": "border-box" - }); - }); - - /////////////////////////////////////////////////////////// - // compute breadth of rows - /////////////////////////////////////////////////////////// - var mode = "y"; - var fullSize = fullHeight; - var fullDistributableSize = fullDistributableHeight; - var ySizes = this.ySizes.map(initializeFromConstraints); - var rowGap = this.rowGap; - - var getMinHeightOf = function(item) { - return item.element.offsetHeight + item.vMargins - Math.max(0, item.yEnd - item.yStart - 1) * rowGap; - }; - var getMaxHeightOf = function(item) { - return item.element.offsetHeight + item.vMargins - Math.max(0, item.yEnd - item.yStart - 1) * rowGap; - }; - var getYStartOf = function(item) { - return item.yStart; - }; - var getYEndOf = function(item) { - return item.yEnd; - }; - - computeFinalTrackBreadth.call( - this, - ySizes, - this.ySizes, - fullHeight, - fullDistributableHeight, - getMinHeightOf, - getMaxHeightOf, - getYStartOf, - getYEndOf - ); - - /////////////////////////////////////////////////////////// - // release the override style of elements - /////////////////////////////////////////////////////////// - runtimeStyle.revoke(); - - /////////////////////////////////////////////////////////// - // save the results - //// - this.finalXSizes = xSizes; - this.finalYSizes = ySizes; - - /////////////////////////////////////////////////////////// - // log the results - /////////////////////////////////////////////////////////// - /*console.log({ - x: xSizes, - xBreadths: xSizes.map(function(e) { return e.breadth; }), - y: ySizes, - yBreadths: ySizes.map(function(e) { return e.breadth; }), - });*/ - }, - - generateMSGridStyle: function() { - this.element.style.setProperty("display", "-ms-grid"); - this.element.style.setProperty("-ms-grid-rows", this.ySizes.join(" ")); - this.element.style.setProperty("-ms-grid-columns", this.xSizes.join(" ")); - - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - - item.element.style.setProperty("-ms-grid-row", item.yStart + 1); - item.element.style.setProperty("-ms-grid-column", item.xStart + 1); - item.element.style.setProperty("-ms-grid-row-span", item.yEnd - item.yStart); - item.element.style.setProperty("-ms-grid-column-span", item.xEnd - item.xStart); - } - }, - - generatePolyfilledStyle: function() { - var usedStyle = usedStyleOf(this.element); - var runtimeStyle = createRuntimeStyle("css-grid", this.element); - - var xSizes = this.finalXSizes; - var ySizes = this.finalYSizes; - - var grid_width = 0; - for (var x = 0; x < xSizes.length; x++) { - grid_width += xSizes[x].breadth; - } - grid_width += this.colGap * (xSizes.length - 1); - - var grid_height = 0; - for (var y = 0; y < ySizes.length; y++) { - grid_height += ySizes[y].breadth; - } - grid_height += this.rowGap * (ySizes.length - 1); - - var runtimeStyleData = {}; - if (["block", "inline-block"].indexOf(usedStyle.getPropertyValue("display")) == -1) { - runtimeStyleData["display"] = "block"; - } - if (usedStyle.getPropertyValue("position") == "static") { - runtimeStyleData["position"] = "relative"; - } - - runtimeStyle.set(this.element, runtimeStyleData); - - // set the position and sizing of each elements - var width = grid_width; - var height = grid_height; - var items_widths = []; - var items_heights = []; - items_widths.length = items_heights.length = this.items.length; - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - - var left = this.hlPadding; - for (var x = 0; x < item.xStart; x++) { - left += xSizes[x].breadth; - } - left += this.colGap * item.xStart; - - var width = 0; - for (var x = item.xStart; x < item.xEnd; x++) { - width += xSizes[x].breadth; - } - width += Math.max(0, item.xEnd - item.xStart - 1) * this.colGap; - - var top = this.vtPadding; - for (var y = 0; y < item.yStart; y++) { - top += ySizes[y].breadth; - } - top += this.rowGap * item.yStart; - - var height = 0; - for (var y = item.yStart; y < item.yEnd; y++) { - height += ySizes[y].breadth; - } - height += Math.max(0, item.yEnd - item.yStart - 1) * this.rowGap; - - runtimeStyle.set(item.element, { - position: "absolute", - "box-sizing": "border-box", - top: "" + top + "px", - left: "" + left + "px" - }); - - items_widths[i] = width - item.hMargins; - items_heights[i] = height - item.vMargins; - } - - var isReplaced = /^(SVG|MATH|IMG|VIDEO|PICTURE|OBJECT|EMBED|IFRAME)$/i; - - // if horizontal stretch - if (true) { - // TODO: horizontal stretch - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var width = items_widths[i]; - if (item.minWidth <= width || isReplaced.test(item.element.tagName)) { - // TODO: fix that... (should only do it for auto elements with stretch enabled) - runtimeStyle.set(item.element, { width: width + "px" }); - } - } - } - - // if vertical stretch - if (true) { - // TODO: vertical stretch - for (var i = this.items.length; i--; ) { - var item = this.items[i]; - var height = items_heights[i]; - if (item.element.offsetHeight <= height || isReplaced.test(item.element.tagName)) { - runtimeStyle.set(item.element, { height: height + "px" }); - } - } - } - - // make sure the final size is right: - var runtimeStyleData = {}; - //if(["absolute","fixed"].indexOf(usedStyle.getPropertyValue("position")) >= 0) { runtimeStyleData["width"] = grid_width+'px'; } - if (["auto", "0px"].indexOf(usedStyle.getPropertyValue("width")) >= 0) { - runtimeStyleData["width"] = grid_width + "px"; - } - if (["auto", "0px"].indexOf(usedStyle.getPropertyValue("height")) >= 0) { - runtimeStyleData["height"] = grid_height + "px"; - } - runtimeStyle.set(this.element, runtimeStyleData); - }, - - revokePolyfilledStyle: function() { - createRuntimeStyle("css-grid", this.element).revoke(); - }, - - findXStart: function(item) { - ////////////////////////////////////////////////////////////////////////////// - // TODO: this doesn't reflect the spec after the changes made at my request // - ////////////////////////////////////////////////////////////////////////////// - - var xStart = -1; - if (item.specifiedXStart.type !== LOCATE_LINE) return 0; - - if (item.specifiedXStart.name) { - // - // ? - // - - if (item.specifiedXStart.index === undefined) { - // First attempts to match the grid area’s edge to a named grid area - xStart = this.findXLine(item.specifiedXStart.name + "-start", 0, 0, /*dontFallback*/ true); - } - if (xStart == -1) { - // Otherwise, contributes the first named line with the specified name to the grid item’s placement. - xStart = this.findXLine(item.specifiedXStart.name, 0, (item.specifiedXStart.index || 1) - 1); - } - } else { - // - // - // - xStart = (item.specifiedXStart.index || 1) - 1; - } - - // correct impossible values - if (xStart < 0) { - xStart = 0; - } - - // return the final result - return (item.xStart = xStart); - }, - - findYStart: function(item) { - var yStart = -1; - if (item.specifiedYStart.type !== LOCATE_LINE) return 0; - - if (item.specifiedYStart.name) { - // - // ? - // - - if (item.specifiedYStart.index === undefined) { - // First attempts to match the grid area’s edge to a named grid area - yStart = this.findYLine(item.specifiedYStart.name + "-start", 0, 0, /*dontFallback*/ true); - } - if (yStart == -1) { - // Otherwise, contributes the first named line with the specified name to the grid item’s placement. - yStart = this.findYLine(item.specifiedYStart.name, 0, (item.specifiedYStart.index || 1) - 1); - } - } else { - // - // - // - yStart = (item.specifiedYStart.index || 1) - 1; - } - - // correct impossible values - if (yStart < 0) { - yStart = 0; - } - - // return the final result - return (item.yStart = yStart); - }, - - findXEnd: function(item) { - var xEnd = -1; - var xStart = item.xStart; - switch (item.specifiedXEnd.type) { - case LOCATE_LINE: - if (item.specifiedXEnd.name) { - if (item.specifiedXEnd.index === undefined) { - // First attempts to match the grid area’s edge to a named grid area - xEnd = this.findXLine(item.specifiedXEnd.name + "-end", 0, 0, /*dontFallback*/ true); - } - if (xEnd == -1) { - // Otherwise, contributes the first named line with the specified name to the grid item’s placement. - xEnd = this.findXLine(item.specifiedXEnd.name, 0, (item.specifiedXEnd.index || 1) - 1); - } - } else { - xEnd = (item.specifiedXEnd.index || 1) - 1; - } - break; - - case LOCATE_SPAN: - if (item.specifiedXEnd.name) { - // Set the corresponding edge N lines apart from its opposite edge. - xEnd = this.findXLine(item.specifiedXEnd.name, xStart + 1, (item.specifiedXEnd.index || 1) - 1); - } else { - // Set the corresponding edge N lines apart from its opposite edge. - xEnd = xStart + (item.specifiedXEnd.index | 0 || 1); - } - break; - - case LOCATE_AUTO: - // I don't support subgrids, so this is always true: - xEnd = xStart + 1; - break; - } - - if (xEnd <= xStart) { - xEnd = xStart + 1; - } - return (item.xEnd = xEnd); - }, - - findYEnd: function(item) { - var yEnd = -1; - var yStart = item.yStart; - switch (item.specifiedYEnd.type) { - case LOCATE_LINE: - if (item.specifiedYEnd.name) { - // - // ? - // - if (item.specifiedYEnd.index === undefined) { - // First attempts to match the grid area’s edge to a named grid area - yEnd = this.findYLine(item.specifiedYEnd.name + "-end", 0, 0, /*dontFallback*/ true); - } - if (yEnd == -1) { - // Otherwise, contributes the first named line with the specified name to the grid item’s placement. - yEnd = this.findYLine(item.specifiedYEnd.name, 0, (item.specifiedYEnd.index || 1) - 1); - } - } else { - // - // - // - yEnd = (item.specifiedYEnd.index || 1) - 1; - } - break; - - case LOCATE_SPAN: - if (item.specifiedYEnd.name) { - // Set the corresponding edge N lines apart from its opposite edge. - yEnd = this.findYLine(item.specifiedYEnd.name, yStart + 1, (item.specifiedYEnd.index || 1) - 1); - - // TODO: I'm having the wrong behavior here, I sent a mail to csswg to get the spec changed - // "The spec is more what you'd call 'guidelines' than actual rules" - if (yEnd == -1) { - yEnd = 0; - } - } else { - // Set the corresponding edge N lines apart from its opposite edge. - yEnd = yStart + (item.specifiedYEnd.index | 0 || 1); - } - break; - - case LOCATE_AUTO: - // I don't support subgrids, so this is always true: - yEnd = yStart + 1; - break; - } - - // correct impossible end values - if (yEnd <= yStart) { - yEnd = yStart + 1; - } - - // return the final result - return (item.yEnd = yEnd); - }, - - findXLine: function(name, startIndex, skipCount, dontFallback) { - startIndex = startIndex | 0; - skipCount = skipCount | 0; - - // special case for cases where the name isn't provided - if (!name) { - if (startIndex + skipCount < this.xLines.length) { - return startIndex + skipCount; - } else { - return this.xLines.length; - } - } - - // find the 1+skipCount'th line to match the right name - var last = -1; - for (var i = startIndex; i < this.xLines.length; i++) { - if (this.xLines[i].indexOf(name) >= 0 || (!dontFallback && this.xLines[i].indexOf("*") >= 0)) { - if (skipCount > 0) { - last = i; - skipCount--; - } else { - return i; - } - } - } - - // if we still have lines to find, we know that lines of the implicit grid match all names - if (!dontFallback) { - console.warn("[CSS-GRID] Missing " + (skipCount + 1) + ' lines named "' + name + '" after line ' + startIndex + "."); - last = this.xLines.length + skipCount + 1; - this.ensureRows(last); - } - return last; - }, - - findYLine: function(name, startIndex, skipCount, dontFallback) { - startIndex = startIndex | 0; - skipCount = skipCount | 0; - - // special case for cases where the name isn't provided - if (!name) { - if (startIndex + skipCount < this.yLines.length) { - return startIndex + skipCount; - } else { - return this.yLines.length; - } - } - - // find the 1+skipCount'th line to match the right name - var last = -1; - for (var i = startIndex; i < this.yLines.length; i++) { - if (this.yLines[i].indexOf(name) >= 0 || (!dontFallback && this.yLines[i].indexOf("*") >= 0)) { - if (skipCount > 0) { - last = i; - skipCount--; - } else { - return i; - } - } - } - - // if we still have lines to find, we know that lines of the implicit grid match all names - if (!dontFallback) { - console.warn("[CSS-GRID] Missing " + (skipCount + 1) + ' lines named "' + name + '" after line ' + startIndex + "."); - last = this.yLines.length + skipCount + 1; - this.ensureColumns(last); - } - return last; - } - }; - - var cssGrid = { - LOCATE_LINE: LOCATE_LINE, - LOCATE_SPAN: LOCATE_SPAN, - LOCATE_AREA: LOCATE_AREA, - LOCATE_AUTO: LOCATE_AUTO, - - ALIGN_START: ALIGN_START, - ALIGN_CENTER: ALIGN_CENTER, - ALIGN_END: ALIGN_END, - ALIGN_FIT: ALIGN_FIT, - - TRACK_BREADTH_AUTO: TRACK_BREADTH_AUTO, - TRACK_BREADTH_LENGTH: TRACK_BREADTH_LENGTH, - TRACK_BREADTH_FRACTION: TRACK_BREADTH_FRACTION, - TRACK_BREADTH_PERCENTAGE: TRACK_BREADTH_PERCENTAGE, - TRACK_BREADTH_MIN_CONTENT: TRACK_BREADTH_MIN_CONTENT, - TRACK_BREADTH_MAX_CONTENT: TRACK_BREADTH_MAX_CONTENT, - - GridLayout: GridLayout, - GridItem: GridItem, - GridItemPosition: GridItemPosition, - GridTrackBreadth: GridTrackBreadth - }; - return cssGrid; - })(window, document); - - require.define("src/css-grid/lib/grid-layout.js"); - - //////////////////////////////////////// - - // TODO: document the "no_auto_css_grid" flag? - // TOOD: document the "no_ms_grid_implementation" flag? - - !(function(window, document) { - "use strict"; - - if ("gridRow" in document.body.style) { - console.warn("Polyfill skipped"); - return; - } - - require("src/core/polyfill-dom-console.js"); - var cssCascade = require("src/core/css-cascade.js"); - var cssGrid = require("src/css-grid/lib/grid-layout.js"); - - var enabled = false; - var enablePolyfill = function() { - if (enabled) { - return; - } else { - enabled = true; - } - - // - // [0] define css properties - // those properties can now be set using Element.myStyle.xyz if they weren't already - // - - var gridProperties = [ - "grid", - "grid-template", - "grid-template-rows", - "grid-template-columns", - "grid-template-areas", - "grid-areas", - "grid-auto-flow", - "grid-row-gap", - "grid-column-gap", - "grid-gap" - ]; - var gridItemProperties = [ - "grid-area", - "grid-row", - "grid-column", - "grid-row-start", - "grid-row-end", - "grid-column-start", - "grid-column-end", - "order" - ]; - for (var i = gridProperties.length; i--; ) { - cssCascade.polyfillStyleInterface(gridProperties[i]); - } - for (var i = gridItemProperties.length; i--; ) { - cssCascade.polyfillStyleInterface(gridItemProperties[i]); - } - - // - // [1] when any update happens: - // construct new content and region flow pairs - // restart the region layout algorithm for the modified pairs - // - - cssCascade.startMonitoringProperties(gridProperties, { - onupdate: function onupdate(element, rule) { - // log some message in the console for debug - cssConsole.dir({ - message: "onupdate", - element: element, - selector: rule.selector.toCSSString(), - rule: rule - }); - - // check if the element already has a grid or grid-item layout - if (element.gridLayout) { - // the layout must be recomputed - element.gridLayout.scheduleRelayout(); - } else { - // setup a new grid model, and schedule a relayout - element.gridLayout = new cssGrid.GridLayout(element); - element.gridLayout.scheduleRelayout(); - - // TODO: watch DOM for updates in the element? - if ("MutationObserver" in window) { - // non-attribute-related changes - void (function() { - var observer = new MutationObserver(function(e) { - element.gridLayout.scheduleRelayout(); - return; - //debugger; console.log(e); - }); - var target = document.documentElement; - var config = { - subtree: true, - attributes: false, - childList: true, - characterData: true - }; - observer.observe(target, config); - })(); - // attribute-related changes - void (function() { - var observer = new MutationObserver(function(e) { - element.gridLayout.scheduleRelayout(); - return; - //debugger; console.log(e); - //for(var i = e.length; i--;) { - // var attr = e[i].attributeName; - // if(attr=='class' || attr=='style') { - // element.gridLayout.scheduleRelayout(); return; - // } - //} - }); - var target = element; - var config = { - subtree: true, - attributes: true, - attributeFilter: ["class", "style", "width", "height", "src"], - childList: false, - characterData: false - }; - })(); - } else if ("MutationEvent" in window) { - element.addEventListener( - "DOMSubtreeModified", - function() { - if (!element.gridLayout.isLayoutScheduled) { - element.gridLayout.scheduleRelayout(); - } - }, - true - ); - } - // TODO: watch resize events for relayout? - var lastWidth = element.offsetWidth; - var lastHeight = element.offsetHeight; - var updateOnResize = function() { - if (!element.gridLayout) { - return; - } - if (lastWidth != element.offsetWidth || lastHeight != element.offsetHeight) { - // update last known size - lastWidth = element.offsetWidth; - lastHeight = element.offsetHeight; - // relayout (and prevent double-dispatch) - element.gridLayout.scheduleRelayout(); - } - requestAnimationFrame(updateOnResize); - }; - requestAnimationFrame(updateOnResize); - // TODO: watch the load event for relayout? - window.addEventListener("load", function() { - element.gridLayout && element.gridLayout.scheduleRelayout(); - }); - var images = element.querySelectorAll("img"); - for (var i = images.length; i--; ) { - images[i].addEventListener("load", function() { - element.gridLayout && element.gridLayout.scheduleRelayout(); - }); - } - } - } - }); - - cssCascade.startMonitoringProperties(gridItemProperties, { - onupdate: function onupdate(element, rule) { - // log some message in the console for debug - cssConsole.dir({ - message: "onupdate", - element: element, - selector: rule.selector.toCSSString(), - rule: rule - }); - - // check if the element already has a grid or grid-item layout - if (element.parentGridLayout) { - // the parent layout must be recomputed - element.parentGridLayout.scheduleRelayout(); - } - } - }); - }; - - // expose the enabler - cssGrid.enablePolyfill = enablePolyfill; - - // enable the polyfill automatically - try { - if (!("no_auto_css_grid" in window)) { - enablePolyfill(); - } - } catch (ex) { - setImmediate(function() { - throw ex; - }); - } - - // return the module - return cssGrid; - })(window, document); - require.define("src/css-grid/polyfill.js"); - - //////////////////////////////////////// - - //require('core:dom-matchMedia-polyfill'); - //require('core:dom-classList-polyfill'); - require("src/css-grid/polyfill.js"); - require.define("src/requirements.js"); - - window.cssPolyfills = { require: require }; -})(); -//# sourceMappingURL=css-polyfills.js.map diff --git a/package.json b/package.json index ce70be5..b01513d 100644 --- a/package.json +++ b/package.json @@ -85,14 +85,17 @@ "scripts": { "build": "ng build && cd dist && npm pack ./ --silent", "clean": "npx rimraf ./dist ./reports", - "clean:all": "npm run clean && npm run clean:demo", - "clean:demo": "cd demo-app && npm run clean && cd ..", + "clean:all": "npm run clean && npm run clean:demo:ng-previous && npm run clean:demo:ng-latest", + "clean:demo:ng-previous": "cd demo-app/ng7 && npm run clean && cd ..", + "clean:demo:ng-latest": "cd demo-app/ng8 && npm run clean && cd ..", "clean:modules": "npx rimraf ./node_modules package-lock.json", - "clean:modules:all": "npm run clean:modules && npm run clean:modules:demo", - "clean:modules:demo": "cd demo-app && npm run clean:modules && cd ..", + "clean:modules:all": "npm run clean:modules && npm run clean:modules:demo:ng-previous && npm run clean:modules:demo:ng-latest", + "clean:modules:demo:ng-previous": "cd demo-app/ng7 && npm run clean:modules && cd ..", + "clean:modules:demo:ng-latest": "cd demo-app/ng8 && npm run clean:modules && cd ..", "clean:slate": "npm run clean:all && npm run clean:modules:all && npm run install:all", "commit": "./node_modules/.bin/git-cz", - "demo": "cd demo-app && npm start && cd ..", + "demo:ng-previous": "cd demo-app/ng7 && npm start && cd ..", + "demo:ng-latest": "cd demo-app/ng8 && npm start && cd ..", "docs": "npm run docs:clean && npm run docs:generate", "docs:clean": "npx rimraf reports/api-docs", "docs:coverage": "npm run docs:generate -- --coverageTest 85 --coverageTestThresholdFail true", @@ -101,13 +104,17 @@ "docs:publish": "bash ./gh-deploy.sh --trace", "generate:changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 0", "generate:changelog-recent": "conventional-changelog -p angular | tail -n +3", - "install:all": "npm install && npm run build && npm run install:demo", - "install:demo": "cd demo-app && npm install && cd ..", - "install:ci:demo": "npm run build && cd demo-app && npm ci && cd ..", - "install:travis:demo": "npm run build && npm run install:demo", + "install:all": "npm install && npm run build && npm run install:demo:ng-previous && npm run install:demo:ng-latest", + "install:demo:ng-previous": "cd demo-app/ng7 && npm install && cd ..", + "install:demo:ng-latest": "cd demo-app/ng8 && npm install && cd ..", + "install:ci:demo:ng-previous": "npm run build && cd demo-app/ng7 && npm ci && cd ..", + "install:ci:demo:ng-latest": "npm run build && cd demo-app/ng8 && npm ci && cd ..", + "install:travis:demo:ng-previous": "npm run build && npm run install:demo:ng-previous", + "install:travis:demo:ng-latest": "npm run build && npm run install:demo:ng-latest", "lint": "npm run lint-ts && npm run lint-css", - "lint:all": "npm run lint && npm run lint:demo", - "lint:demo": "cd demo-app && npm run lint && cd ..", + "lint:all": "npm run lint && npm run lint:demo:ng-previous && npm run lint:demo:ng-latest", + "lint:demo:ng-previous": "cd demo-app/ng7 && npm run lint && cd ..", + "lint:demo:ng-latest": "cd demo-app/ng8 && npm run lint && cd ..", "lint-ts": "tslint --config ./tslint.json --project ./tsconfig.lib.json --format codeFrame", "lint-css": "stylelint \"./src/**/*.?(pc|sc|c|sa)ss\" --formatter \"string\" --allow-empty-input", "ng": "ng", @@ -118,16 +125,19 @@ "release:publish": "bash ./release-publish.sh --trace", "stylelint-check": "stylelint-config-prettier-check", "test": "karma start", - "test:all": "npm run test && npm run test:demo", - "test:demo": "cd demo-app && npm run test", + "test:all": "npm run test && npm run test:demo:ng-previous && npm run test:demo:ng-latest", + "test:demo:ng-previous": "cd demo-app/ng7 && npm run test", + "test:demo:ng-latest": "cd demo-app/ng8 && npm run test", "test:ci": "karma start karma.conf.ci.js", - "test:ci:all": "npm run test:ci && npm run test:ci:demo", - "test:ci:demo": "cd demo-app && npm run test:ci && cd ../..", + "test:ci:all": "npm run test:ci && npm run test:ci:demo:ng-previous && npm run test:ci:demo:ng-latest", + "test:ci:demo:ng-previous": "cd demo-app/ng7 && npm run test:ci && cd ../..", + "test:ci:demo:ng-latest": "cd demo-app/ng8 && npm run test:ci && cd ../..", "test:ci:coveralls": "cat ./reports/coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", "tsc": "tsc", "tslint": "tslint", "tslint-check": "tslint-config-prettier-check ./tslint.json", - "update:demo": "npm run clean:demo && npx rimraf ./node_modules/@nationalbankbelgium && npm run install:demo" + "update:demo:ng-previous": "npm run clean:demo:ng-previous && npx rimraf ./node_modules/@nationalbankbelgium && npm run install:demo:ng-previous", + "update:demo:ng-latest": "npm run clean:demo:ng-latest && npx rimraf ./node_modules/@nationalbankbelgium && npm run install:demo:ng-latest" }, "husky": { "hooks": { diff --git a/release-publish.sh b/release-publish.sh index 48fb5b6..73b4106 100644 --- a/release-publish.sh +++ b/release-publish.sh @@ -18,7 +18,7 @@ DRY_RUN=false PACKAGE=ngx-form-errors EXPECTED_REPO_SLUG="NationalBankBelgium/ngx-form-errors" -EXPECTED_NODE_VERSION="8" +EXPECTED_NODE_VERSION="10" #---------------------------------------------- # Uncomment block below to test locally @@ -29,7 +29,7 @@ EXPECTED_NODE_VERSION="8" #NPM_TOKEN="dummy" #TRAVIS=true #TRAVIS_REPO_SLUG="NationalBankBelgium/ngx-form-errors" -#TRAVIS_NODE_VERSION="8" +#TRAVIS_NODE_VERSION="10" #TRAVIS_PULL_REQUEST=false # For normal builds: From 48606e0e17673c2ecf0bcc78b47bf007d3e09084 Mon Sep 17 00:00:00 2001 From: Christopher Cortes Date: Fri, 22 Nov 2019 11:41:05 +0100 Subject: [PATCH 3/3] fix(demo): enable 'disableHostCheck' option in 'ng serve' command to prevent 'Invalid Host/Origin header' error in IE Workaround mentioned in https://github.com/webpack/webpack-dev-server/issues/1604#issuecomment-453137871 --- demo-app/ng7/package.json | 2 +- demo-app/ng8/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo-app/ng7/package.json b/demo-app/ng7/package.json index e1c9929..8239387 100644 --- a/demo-app/ng7/package.json +++ b/demo-app/ng7/package.json @@ -5,7 +5,7 @@ "clean": "npx rimraf ./dist ./reports", "clean:modules": "npx rimraf ./node_modules package-lock.json", "ng": "ng", - "start": "ng serve", + "start": "ng serve --disableHostCheck=true", "build": "ng build", "test": "ng test", "test:ci": "ng test --watch=false --browsers=ChromeHeadless", diff --git a/demo-app/ng8/package.json b/demo-app/ng8/package.json index 42e7287..31dc4e1 100644 --- a/demo-app/ng8/package.json +++ b/demo-app/ng8/package.json @@ -5,7 +5,7 @@ "clean": "npx rimraf ./dist ./reports", "clean:modules": "npx rimraf ./node_modules package-lock.json", "ng": "ng", - "start": "ng serve", + "start": "ng serve --disableHostCheck=true", "build": "ng build", "test": "ng test", "test:ci": "ng test --watch=false --browsers=ChromeHeadless",