diff --git a/.eslintignore b/.eslintignore index bfd41c0f..8fb96fe5 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,3 +3,5 @@ generators/**/templates node_modules travis docs +# samples are linted with there respective eslint files +test/samples diff --git a/README.md b/README.md index b2a0b57e..53814cfa 100644 --- a/README.md +++ b/README.md @@ -93,15 +93,12 @@ jhipster -d --blueprint primeng-blueprint To make it it easy to keep up with the latest jhipster version, we have a branch jhipster-upstream with the original content of the original jhipster generator. On each upgrade we edit the needed file and merge back into master (or feature branch). -To use the blueprint: `jhipster --blueprint primeng import-jdl jhipster.jh --force` - -Sometimes, it looks like the blueprint is not detected, this causes by some dependencies not getting correctly installed, to fix that: -``` -cd node_modules/generator-jhipster/ -npm install -``` -This usually happens with using npm link, npm install doesn't install dependencies of dependencies +once changes are made, `npm run test` one the project insures that application generated matches the one in the sample project 'test/samples/...' +This creates a new project under /tmp/primeng-blueprint-test we use it to run our tests: +- `npm run test` for angular unit tests (running tests on the sample filder doesn't lint well du to eslint picking up the parent project config I suppose) +- `npm run e2e` for e2e tests using an already server https://github.com/yelhouti/generator-jhipster-composite-key-server (this project supports composites keys and has the same entities...) (do nor forget to change the generated protractor.conf to use localhost:9000 instead of 8080) +Using the samples project makes this code very well suites for test driven development. # License diff --git a/generators/client/index.js b/generators/client/index.js index 4eeddfcc..7f118108 100644 --- a/generators/client/index.js +++ b/generators/client/index.js @@ -1,4 +1,5 @@ /* eslint-disable consistent-return */ +const chalk = require('chalk'); const ClientGenerator = require('generator-jhipster/generators/client'); const writeAngularFiles = require('./templates/files-angular').writeFiles; diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/index.ts.ejs b/generators/client/templates/angular/.eslintignore.ejs similarity index 73% rename from generators/entity-client/templates/angular/src/main/webapp/app/entities/index.ts.ejs rename to generators/client/templates/angular/.eslintignore.ejs index 0b9937e2..aca33462 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/index.ts.ejs +++ b/generators/client/templates/angular/.eslintignore.ejs @@ -16,8 +16,12 @@ See the License for the specific language governing permissions and limitations under the License. -%> -export * from './<%= entityFileName %>.service'; -export * from './<%= entityFileName %>-update.component'; -export * from './<%= entityFileName %>-detail.component'; -export * from './<%= entityFileName %>.component'; -export * from './<%= entityFileName %>.route'; +node_modules/ +src/main/docker/ +src/test/javascript/protractor.conf.js +src/test/javascript/jest.conf.js +webpack/ +target/ +build/ +node/ +postcss.config.js diff --git a/generators/client/templates/angular/.eslintrc.json.ejs b/generators/client/templates/angular/.eslintrc.json.ejs new file mode 100644 index 00000000..5c0d74a2 --- /dev/null +++ b/generators/client/templates/angular/.eslintrc.json.ejs @@ -0,0 +1,42 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> +{ + "plugins": ["@typescript-eslint/tslint"], + "extends": ["jhipster"], + "parserOptions": { + "project": "./tsconfig.json" + }, + "rules": { + "@typescript-eslint/tslint/config": [ + "error", + { + "lintFile": "./tslint.json" + } + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "vars": "all", + "args": "after-used", + "ignoreRestSiblings": false + } + ], + "@typescript-eslint/no-non-null-assertion": "off" + } +} diff --git a/generators/client/templates/angular/.huskyrc.ejs b/generators/client/templates/angular/.huskyrc.ejs index 9e18d876..b97e200c 100644 --- a/generators/client/templates/angular/.huskyrc.ejs +++ b/generators/client/templates/angular/.huskyrc.ejs @@ -1,3 +1,21 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> { "hooks": { "pre-commit": "lint-staged" diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/index.ts.ejs b/generators/client/templates/angular/.lintstagedrc.js.ejs similarity index 60% rename from generators/client/templates/angular/src/main/webapp/app/layouts/index.ts.ejs rename to generators/client/templates/angular/.lintstagedrc.js.ejs index 9907950d..f459ec0b 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/index.ts.ejs +++ b/generators/client/templates/angular/.lintstagedrc.js.ejs @@ -16,15 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. -%> -export * from './error/error.component'; -export * from './error/error.route'; -export * from './main/main.component'; -export * from './footer/footer.component'; -export * from './navbar/navbar.component'; -export * from './navbar/navbar.route'; -<%_ if (enableTranslation) { _%> -export * from './navbar/active-menu.directive'; -<%_ } _%> -export * from './profiles/page-ribbon.component'; -export * from './profiles/profile.service'; -export * from './profiles/profile-info.model'; \ No newline at end of file +module.exports = { + '{,src/**/}*.{md,json,ts,css,scss,yml}': ['prettier --write', 'git add'] +}; diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs index d380d5be..c23140e8 100644 --- a/generators/client/templates/angular/package.json.ejs +++ b/generators/client/templates/angular/package.json.ejs @@ -19,7 +19,7 @@ <%_ var optionsForwarder = clientPackageManager == 'yarn' ? '' : '-- ' _%> { "name": "<%= dasherizedBaseName %>", - "version": "0.0.0", + "version": "0.0.1-SNAPSHOT", "description": "Description for <%= baseName %>", "private": true, "license": "UNLICENSED", @@ -27,155 +27,154 @@ "node_modules" ], "dependencies": { - "@angular/animations": "8.0.0", - "@angular/cdk": "8.0.0", - "@angular/common": "8.0.0", - "@angular/compiler": "8.0.0", - "@angular/core": "8.0.0", - "@angular/forms": "8.0.0", - "@angular/platform-browser": "8.0.0", - "@angular/platform-browser-dynamic": "8.0.0", - "@angular/router": "8.0.0", - "@fortawesome/angular-fontawesome": "0.4.0", - "@fortawesome/fontawesome-svg-core": "1.2.19", - "@fortawesome/free-solid-svg-icons": "5.9.0", - "@ng-bootstrap/ng-bootstrap": "4.2.1", + "@angular/animations": "8.2.14", + "@angular/cdk": "8.2.3", + "@angular/common": "8.2.14", + "@angular/compiler": "8.2.14", + "@angular/core": "8.2.14", + "@angular/forms": "8.2.14", + "@angular/platform-browser": "8.2.14", + "@angular/platform-browser-dynamic": "8.2.14", + "@angular/router": "8.2.14", + "@fortawesome/angular-fontawesome": "0.5.0", + "@fortawesome/fontawesome-svg-core": "1.2.26", + "@fortawesome/free-solid-svg-icons": "5.12.0", + "@ng-bootstrap/ng-bootstrap": "5.1.4", "@ngx-translate/core": "11.0.1", "@ngx-translate/http-loader": "4.0.0", - "bootstrap": "4.3.1", + "bootstrap": "4.4.1", <%_ if (clientTheme !== 'none') { _%> - "bootswatch": "4.3.1", + "bootswatch": "4.4.1", <%_ } _%> - "core-js": "3.1.3", + "core-js": "3.5.0", "flat": "^4.1.0", "moment": "2.24.0", - "ng-jhipster": "0.10.1", + "ng-jhipster": "0.11.5", "ngx-cookie": "4.0.2", - "ngx-infinite-scroll": "7.2.0", + "ngx-infinite-scroll": "8.0.1", "ngx-webstorage": "4.0.1", "primeflex": "^1.0.0-rc.1", "primeicons": "^1.0.0", "primeng": "https://github.com/yelhouti/primeng/releases/download/8.0.0-rc2/primeng-8.0.0-rc.2-SNAPSHOT.tgz", - "rxjs": "6.5.2", - "swagger-ui": "2.2.10", + "rxjs": "6.5.3", + "swagger-ui-dist": "3.24.3", <%_ if (websocket === 'spring-websocket') { _%> - "sockjs-client": "1.3.0", + "sockjs-client": "1.4.0", "webstomp-client": "1.2.6", <%_ } _%> "tslib": "1.10.0", - "zone.js": "0.9.1" + "zone.js": "0.10.2" }, "devDependencies": { - "@angular/cli": "8.0.2", - "@angular/compiler-cli": "8.0.0", - "@ngtools/webpack": "8.0.2", + "@angular/cli": "8.3.20", + "@angular/compiler-cli": "8.2.14", + "@ngtools/webpack": "8.3.20", <%_ if (protractorTests) { _%> - "@types/chai": "4.1.7", - "@types/chai-string": "1.4.1", + "@types/chai": "4.2.7", + "@types/chai-string": "1.4.2", <%_ } _%> "@types/flat": "0.0.28", - "@types/jest": "24.0.14", + "@types/jest": "24.0.23", <%_ if (protractorTests) { _%> "@types/mocha": "5.2.7", <%_ } _%> - "@types/node": "10.12.27", + "@types/node": "12.12.17", + <%_ if (websocket === 'spring-websocket') { _%> + "@types/sockjs-client": "1.1.1", + <%_ } _%> + "@typescript-eslint/eslint-plugin": "2.11.0", + "@typescript-eslint/eslint-plugin-tslint": "2.11.0", + "@typescript-eslint/parser": "2.11.0", <%_ if (protractorTests) { _%> - "@types/selenium-webdriver": "4.0.0", + "@types/selenium-webdriver": "4.0.5", <%_ } _%> - "angular-router-loader": "0.8.5", "angular2-template-loader": "0.6.2", - "autoprefixer": "9.6.0", + "autoprefixer": "9.7.3", "base-href-webpack-plugin": "2.0.0", "browser-sync": "2.26.7", "browser-sync-webpack-plugin": "2.2.2", - "cache-loader": "4.0.0", + "cache-loader": "4.1.0", <%_ if (protractorTests) { _%> "chai": "4.2.0", "chai-as-promised": "7.1.1", "chai-string": "1.5.0", <%_ } _%> - "codelyzer": "5.1.0", - "copy-webpack-plugin": "5.0.3", - "css-loader": "3.0.0", - "file-loader": "4.0.0", - "fork-ts-checker-webpack-plugin": "1.3.6", + "codelyzer": "5.2.0", + "copy-webpack-plugin": "5.1.1", + "css-loader": "3.3.2", + "eslint": "6.7.2", + "eslint-config-jhipster": "0.0.1", + "eslint-config-prettier": "6.7.0", + "eslint-loader": "3.0.3", + "file-loader": "5.0.2", + "fork-ts-checker-webpack-plugin": "3.1.1", "friendly-errors-webpack-plugin": "1.7.0", "generator-jhipster": "<%= packagejs.version %>", "html-loader": "0.5.5", "html-webpack-plugin": "3.2.0", <%_ if (!skipCommitHook) { _%> - "husky": "2.4.1", + "husky": "3.1.0", <%_ } _%> - "jest": "24.8.0", - "jest-junit": "6.4.0", - "jest-preset-angular": "7.1.1", + "jest": "24.9.0", + "jest-date-mock": "1.0.7", + "jest-junit": "10.0.0", + "jest-preset-angular": "8.0.0", "jest-sonar-reporter": "2.0.0", <%_ if (!skipCommitHook) { _%> - "lint-staged": "8.2.0", + "lint-staged": "8.2.1", <%_ } _%> <%_ if (enableTranslation) { _%> - "merge-jsons-webpack-plugin": "1.0.19", + "merge-jsons-webpack-plugin": "1.0.20", <%_ } _%> - "mini-css-extract-plugin": "0.7.0", + "mini-css-extract-plugin": "0.8.0", <%_ if (protractorTests) { _%> - "mocha": "6.1.4", + "mocha": "6.2.2", <%_ } _%> - "moment-locales-webpack-plugin": "1.0.7", - "optimize-css-assets-webpack-plugin": "5.0.1", + "moment-locales-webpack-plugin": "1.1.2", + "optimize-css-assets-webpack-plugin": "5.0.3", "postcss-loader": "3.0.0", - "prettier": "1.18.2", + "prettier": "1.19.1", <%_ if (protractorTests) { _%> "protractor": "5.4.2", <%_ } _%> "reflect-metadata": "0.1.13", - "rimraf": "2.6.3", - "sass": "1.21.0", - "sass-loader": "7.1.0", + "rimraf": "3.0.0", + "sass": "1.23.7", + "sass-loader": "8.0.0", "simple-progress-webpack-plugin": "1.1.2", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.3.0", - "thread-loader": "2.1.2", - "to-string-loader": "1.1.5", - "ts-loader": "6.0.2", + "style-loader": "1.0.1", + "terser-webpack-plugin": "2.3.0", + "thread-loader": "2.1.3", + "to-string-loader": "1.1.6", + "ts-loader": "6.2.1", <%_ if (protractorTests) { _%> - "ts-node": "8.2.0", + "ts-node": "8.5.4", <%_ } _%> - "tslint": "5.17.0", - "tslint-config-prettier": "1.18.0", - "tslint-loader": "3.5.4", + "tslint": "5.20.1", "typescript": "3.4.5", <%_ otherModules.forEach(module => { _%> "<%= module.name %>": "<%= module.version %>", <%_ }); _%> <%_ if (protractorTests) { _%> - "webdriver-manager": "12.1.5", + "webdriver-manager": "12.1.7", <%_ } _%> - "webpack": "4.34.0", - "webpack-cli": "3.3.4", - "webpack-dev-server": "3.7.1", - "webpack-merge": "4.2.1", - "webpack-notifier": "1.7.0", + "@openapitools/openapi-generator-cli": "0.0.14-4.0.2", + "webpack": "4.41.2", + "webpack-cli": "3.3.10", + "webpack-dev-server": "3.9.0", + "webpack-merge": "4.2.2", + "webpack-notifier": "1.8.0", "webpack-visualizer-plugin": "0.1.11", "workbox-webpack-plugin": "4.3.1", - "write-file-webpack-plugin": "4.5.0"<% if (buildTool === 'maven') { %>, - "xml2js": "0.4.19" - <%_ } _%> + "write-file-webpack-plugin": "4.5.1" }, "engines": { "node": ">=8.9.0"<% if (clientPackageManager === 'yarn') { %>, - "yarn": ">=1.16.0"<% } %> - }, - <%_ if (!skipCommitHook) { _%> - "lint-staged": { - "{,src/**/}*.{md,json,ts,css,scss,yml}": [ - "prettier --write", - "git add" - ] + "yarn": ">=1.19.0"<% } %> }, - <%_ } _%> "scripts": { "prettier:format": "prettier --write \"{,src/**/}*.{md,json,ts,css,scss,yml}\"", - "lint": "tslint --project tsconfig.json -e 'node_modules/**'", + "lint": "eslint . --ext .js,.ts", "lint:fix": "<%= clientPackageManager %> run lint <%= optionsForwarder %>--fix", "ngc": "ngc -p tsconfig-aot.json", "cleanup": "rimraf <%= DIST_DIR %> <%= AOT_DIR %>", diff --git a/generators/client/templates/angular/src/main/webapp/app/account/account.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/account.module.ts.ejs index 2d1955b4..676249ad 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/account.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/account.module.ts.ejs @@ -16,24 +16,22 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { <%=angularXAppName%>SharedModule } from 'app/shared'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; -import { - <%_ if (authenticationType === 'session') { _%> - SessionsComponent, - <%_ } _%> - PasswordStrengthBarComponent, - RegisterComponent, - ActivateComponent, - PasswordComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent, - accountState -} from './'; +<%_ if (authenticationType === 'session') { _%> +import { SessionsComponent } from './sessions/sessions.component'; +<%_ } _%> +import { PasswordStrengthBarComponent } from './password/password-strength-bar.component'; +import { RegisterComponent } from './register/register.component'; +import { ActivateComponent } from './activate/activate.component'; +import { PasswordComponent } from './password/password.component'; +import { PasswordResetInitComponent } from './password-reset/init/password-reset-init.component'; +import { PasswordResetFinishComponent } from './password-reset/finish/password-reset-finish.component'; +import { SettingsComponent } from './settings/settings.component'; +import { accountState } from './account.route'; @NgModule({ imports: [ @@ -51,7 +49,6 @@ import { SessionsComponent, <%_ } _%> SettingsComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + ] }) -export class <%=angularXAppName%>AccountModule {} +export class AccountModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/account/account.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/account.route.ts.ejs index 9f469198..bd45acfb 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/account.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/account.route.ts.ejs @@ -18,17 +18,15 @@ -%> import { Routes } from '@angular/router'; -import { - activateRoute, - passwordRoute, - passwordResetFinishRoute, - passwordResetInitRoute, - registerRoute, - <%_ if (authenticationType === 'session') { _%> - sessionsRoute, - <%_ } _%> - settingsRoute -} from './'; +import { activateRoute } from './activate/activate.route'; +import { passwordRoute } from './password/password.route'; +import { passwordResetFinishRoute } from './password-reset/finish/password-reset-finish.route'; +import { passwordResetInitRoute } from './password-reset/init/password-reset-init.route'; +import { registerRoute } from './register/register.route'; +<%_ if (authenticationType === 'session') { _%> +import { sessionsRoute } from './sessions/sessions.route'; +<%_ } _%> +import { settingsRoute } from './settings/settings.route'; const ACCOUNT_ROUTES = [ activateRoute, diff --git a/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs index a21de5d6..1f9ea2be 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.component.ts.ejs @@ -17,10 +17,10 @@ limitations under the License. -%> import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { ActivatedRoute } from '@angular/router'; +import { flatMap } from 'rxjs/operators'; -import { LoginModalService } from 'app/core'; +import { LoginModalService } from 'app/core/login/login-modal.service'; import { ActivateService } from './activate.service'; @Component({ @@ -28,9 +28,8 @@ import { ActivateService } from './activate.service'; templateUrl: './activate.component.html' }) export class ActivateComponent implements OnInit { - error: string; - success: string; - modalRef: NgbModalRef; + error = false; + success = false; constructor( private activateService: ActivateService, @@ -39,19 +38,14 @@ export class ActivateComponent implements OnInit { ) { } - ngOnInit() { - this.route.queryParams.subscribe((params) => { - this.activateService.get(params['key']).subscribe(() => { - this.error = null; - this.success = 'OK'; - }, () => { - this.success = null; - this.error = 'ERROR'; - }); - }); + ngOnInit(): void { + this.route.queryParams.pipe(flatMap(params => this.activateService.get(params.key))).subscribe( + () => this.success = true, + () => this.error = true + ); } - login() { - this.modalRef = this.loginModalService.open(); + login(): void { + this.loginModalService.open(); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.ts.ejs index f1acff83..2d3071fb 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/activate/activate.service.ts.ejs @@ -27,7 +27,7 @@ export class ActivateService { constructor(private http: HttpClient) {} - get(key: string): Observable { + get(key: string): Observable<{}> { return this.http.get(SERVER_API_URL + '<%- apiUaaPath %>api/activate', { params: new HttpParams().set('key', key) }); diff --git a/generators/client/templates/angular/src/main/webapp/app/account/index.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/index.ts.ejs deleted file mode 100644 index 228aa9b7..00000000 --- a/generators/client/templates/angular/src/main/webapp/app/account/index.ts.ejs +++ /dev/null @@ -1,43 +0,0 @@ -<%# - Copyright 2013-2019 the original author or authors from the JHipster project. - - This file is part of the JHipster project, see https://www.jhipster.tech/ - for more information. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> -export * from './activate/activate.component'; -export * from './activate/activate.service'; -export * from './activate/activate.route'; -export * from './password/password.component'; -export * from './password/password-strength-bar.component'; -export * from './password/password.service'; -export * from './password/password.route'; -export * from './password-reset/finish/password-reset-finish.component'; -export * from './password-reset/finish/password-reset-finish.service'; -export * from './password-reset/finish/password-reset-finish.route'; -export * from './password-reset/init/password-reset-init.component'; -export * from './password-reset/init/password-reset-init.service'; -export * from './password-reset/init/password-reset-init.route'; -export * from './register/register.component'; -export * from './register/register.service'; -export * from './register/register.route'; -<%_ if (authenticationType === 'session') { _%> -export * from './sessions/sessions.component'; -export * from './sessions/sessions.service'; -export * from './sessions/sessions.route'; -export * from './sessions/session.model'; -<%_ } _%> -export * from './settings/settings.component'; -export * from './settings/settings.route'; -export * from './account.route'; diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs index 2e6c3fab..f2ce9610 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html.ejs @@ -21,11 +21,11 @@

Reset password

-
+
The password reset key is missing.
-
+

Choose a new password

@@ -42,28 +42,28 @@ The password and its confirmation do not match!
-
-
+
+
- - New password + -
+ formControlName="newPassword" #newPassword> +
+ *ngIf="passwordForm.get('newPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required. + *ngIf="passwordForm.get('newPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.newpassword.minlength"> Your password is required to be at least 4 characters. + *ngIf="passwordForm.get('newPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.newpassword.maxlength"> Your password cannot be longer than 50 characters.
- <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="passwordForm.get('newPassword').value">-password-strength-bar> + <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="passwordForm.get('newPassword')!.value">-password-strength-bar>
@@ -71,17 +71,17 @@ -
+
+ *ngIf="passwordForm.get('confirmPassword')?.errors?.required" jhiTranslate="global.messages.validate.confirmpassword.required"> Your password confirmation is required. + *ngIf="passwordForm.get('confirmPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.confirmpassword.minlength"> Your password confirmation is required to be at least 4 characters. + *ngIf="passwordForm.get('confirmPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.confirmpassword.maxlength"> Your password confirmation cannot be longer than 50 characters.
diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs index 74ba990a..36e425fd 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts.ejs @@ -16,13 +16,11 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Component, OnInit, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; +import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { LoginModalService } from 'app/core'; +import { LoginModalService } from 'app/core/login/login-modal.service'; import { PasswordResetFinishService } from './password-reset-finish.service'; @Component({ @@ -30,12 +28,14 @@ import { PasswordResetFinishService } from './password-reset-finish.service'; templateUrl: './password-reset-finish.component.html' }) export class PasswordResetFinishComponent implements OnInit, AfterViewInit { - doNotMatch: string; - error: string; - keyMissing: boolean; - success: string; - modalRef: NgbModalRef; - key: string; + @ViewChild('newPassword', { static: false }) + newPassword?: ElementRef; + + initialized = false; + doNotMatch = false; + error = false; + success = false; + key = ''; passwordForm = this.fb.group({ newPassword: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(50)]], @@ -46,43 +46,44 @@ export class PasswordResetFinishComponent implements OnInit, AfterViewInit { private passwordResetFinishService: PasswordResetFinishService, private loginModalService: LoginModalService, private route: ActivatedRoute, - private elementRef: ElementRef, private renderer: Renderer, private fb: FormBuilder ) { } - ngOnInit() { + ngOnInit(): void { this.route.queryParams.subscribe((params) => { - this.key = params['key']; + if (params['key']) { + this.key = params['key']; + } + this.initialized = true; }); - this.keyMissing = !this.key; } - ngAfterViewInit() { - if (this.elementRef.nativeElement.querySelector('#password') != null) { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#password'), 'focus', []); + ngAfterViewInit(): void { + if (this.newPassword) { + this.renderer.invokeElementMethod(this.newPassword.nativeElement, 'focus', []); } } - finishReset() { - this.doNotMatch = null; - this.error = null; - const password = this.passwordForm.get(['newPassword']).value - const confirmPassword = this.passwordForm.get(['confirmPassword']).value - if (password !== confirmPassword) { - this.doNotMatch = 'ERROR'; + finishReset(): void { + this.doNotMatch = false; + this.error = false; + + const newPassword = this.passwordForm.get(['newPassword'])!.value + const confirmPassword = this.passwordForm.get(['confirmPassword'])!.value + + if (newPassword !== confirmPassword) { + this.doNotMatch = true; } else { - this.passwordResetFinishService.save({key: this.key, newPassword: password}).subscribe(() => { - this.success = 'OK'; - }, () => { - this.success = null; - this.error = 'ERROR'; - }); + this.passwordResetFinishService.save(this.key, newPassword).subscribe( + () => this.success = true, + () => this.error = true + ); } } - login() { - this.modalRef = this.loginModalService.open(); + login(): void { + this.loginModalService.open(); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts.ejs index ca8e5dd7..4a31e0b4 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts.ejs @@ -27,7 +27,7 @@ export class PasswordResetFinishService { constructor(private http: HttpClient) {} - save(keyAndPassword: any): Observable { - return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account/reset-password/finish', keyAndPassword); + save(key: string, newPassword: string): Observable<{}> { + return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account/reset-password/finish', { key, newPassword }); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs index 3b506b75..63e9c3d9 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html.ejs @@ -29,7 +29,7 @@

Enter the email address you used to register.

-
+

Check your emails for details on how to reset your password.

@@ -37,22 +37,22 @@
-
+ formControlName="email" #email> +
+ *ngIf="resetRequestForm.get('email')?.errors?.required" jhiTranslate="global.messages.validate.email.required"> Your email is required. + *ngIf="resetRequestForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid. + *ngIf="resetRequestForm.get('email')?.errors?.minlength" jhiTranslate="global.messages.validate.email.minlength"> Your email is required to be at least 5 characters. + *ngIf="resetRequestForm.get('email')?.errors?.maxlength" jhiTranslate="global.messages.validate.email.maxlength"> Your email cannot be longer than 100 characters.
diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs index 3b0cdac3..739ae11c 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts.ejs @@ -16,50 +16,54 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Component, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; +import { HttpErrorResponse } from '@angular/common/http'; +import { FormBuilder, Validators } from '@angular/forms'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; +import { EMAIL_NOT_FOUND_TYPE } from 'app/shared/constants/error.constants'; import { PasswordResetInitService } from './password-reset-init.service'; - @Component({ selector: '<%= jhiPrefixDashed %>-password-reset-init', templateUrl: './password-reset-init.component.html' }) export class PasswordResetInitComponent implements AfterViewInit { - error: string; - errorEmailNotExists: string; - success: string; + @ViewChild('email', { static: false }) + email?: ElementRef; + + error = false; + errorEmailNotExists = false; + success = false; resetRequestForm = this.fb.group({ email: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]] }); constructor( private passwordResetInitService: PasswordResetInitService, - private elementRef: ElementRef, private renderer: Renderer, private fb: FormBuilder ) { } - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#email'), 'focus', []); + ngAfterViewInit(): void { + if (this.email) { + this.renderer.invokeElementMethod(this.email.nativeElement, 'focus', []); + } } - requestReset() { - this.error = null; - this.errorEmailNotExists = null; + requestReset(): void { + this.error = false; + this.errorEmailNotExists = false; - this.passwordResetInitService.save(this.resetRequestForm.get(['email']).value).subscribe(() => { - this.success = 'OK'; - }, (response) => { - this.success = null; - if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { - this.errorEmailNotExists = 'ERROR'; - } else { - this.error = 'ERROR'; + this.passwordResetInitService.save(this.resetRequestForm.get(['email'])!.value).subscribe( + () => this.success = true, + (response: HttpErrorResponse) => { + if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { + this.errorEmailNotExists = true; + } else { + this.error = true; + } } - }); + ); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts.ejs index 7f52fef8..6f070e84 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts.ejs @@ -27,7 +27,7 @@ export class PasswordResetInitService { constructor(private http: HttpClient) {} - save(mail: string): Observable { + save(mail: string): Observable<{}> { return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account/reset-password/init', mail); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar.component.ts.ejs index b28f413a..c4b1039a 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password/password-strength-bar.component.ts.ejs @@ -44,7 +44,7 @@ export class PasswordStrengthBarComponent { measureStrength(p: string): number { let force = 0; - const regex = /[$-/:-?{-~!"^_`\[\]]/g; // " + const regex = /[$-/:-?{-~!"^_`[\]]/g; // " const lowerLetters = /[a-z]+/.test(p); const upperLetters = /[A-Z]+/.test(p); const numbers = /[0-9]+/.test(p); @@ -69,7 +69,7 @@ export class PasswordStrengthBarComponent { return force; } - getColor(s: number): any { + getColor(s: number): { idx: number; color: string } { let idx = 0; if (s <= 10) { idx = 0; @@ -82,7 +82,7 @@ export class PasswordStrengthBarComponent { } else { idx = 4; } - return {idx: idx + 1, col: this.colors[idx]}; + return {idx: idx + 1, color: this.colors[idx]}; } @Input() @@ -96,7 +96,7 @@ export class PasswordStrengthBarComponent { const lis = element.getElementsByTagName('li'); for (let i = 0; i < lis.length; i++) { if (i < c.idx) { - this.renderer.setElementStyle(lis[i], 'backgroundColor', c.col); + this.renderer.setElementStyle(lis[i], 'backgroundColor', c.color); } else { this.renderer.setElementStyle(lis[i], 'backgroundColor', '#DDD'); } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs index 2218bab7..d60cee8b 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.html.ejs @@ -18,8 +18,8 @@ -%>
-
-

Password for [{{account.login}}]

+
+

Password for [{{account.login}}]

Password changed! @@ -39,9 +39,9 @@ -
+
+ *ngIf="passwordForm.get('currentPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required.
@@ -51,38 +51,38 @@ -
+
+ *ngIf="passwordForm.get('newPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required. + *ngIf="passwordForm.get('newPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.newpassword.minlength"> Your password is required to be at least 4 characters. + *ngIf="passwordForm.get('newPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.newpassword.maxlength"> Your password cannot be longer than 50 characters.
- <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="passwordForm.get('newPassword').value">-password-strength-bar> + <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="passwordForm.get('newPassword')!.value">-password-strength-bar>
-
+
+ *ngIf="passwordForm.get('confirmPassword')?.errors?.required" jhiTranslate="global.messages.validate.confirmpassword.required"> Your confirmation password is required. + *ngIf="passwordForm.get('confirmPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.confirmpassword.minlength"> Your confirmation password is required to be at least 4 characters. + *ngIf="passwordForm.get('confirmPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.confirmpassword.maxlength"> Your confirmation password cannot be longer than 50 characters.
diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs index aaf39d86..d44651fe 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password/password.component.ts.ejs @@ -17,9 +17,11 @@ limitations under the License. -%> import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, Validators } from '@angular/forms'; +import { Observable } from 'rxjs'; -import { AccountService } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; import { PasswordService } from './password.service'; @Component({ @@ -27,10 +29,10 @@ import { PasswordService } from './password.service'; templateUrl: './password.component.html' }) export class PasswordComponent implements OnInit { - doNotMatch: string; - error: string; - success: string; - account: any; + doNotMatch = false; + error = false; + success = false; + account$?: Observable; passwordForm = this.fb.group({ currentPassword: ['', [Validators.required]], newPassword: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(50)]], @@ -44,27 +46,23 @@ export class PasswordComponent implements OnInit { ) { } - ngOnInit() { - this.accountService.identity().then((account) => { - this.account = account; - }); + ngOnInit(): void { + this.account$ = this.accountService.identity(); } - changePassword() { - const newPassword = this.passwordForm.get(['newPassword']).value - if (newPassword !== this.passwordForm.get(['confirmPassword']).value) { - this.error = null; - this.success = null; - this.doNotMatch = 'ERROR'; + changePassword(): void { + this.error = false; + this.success = false; + this.doNotMatch = false; + + const newPassword = this.passwordForm.get(['newPassword'])!.value + if (newPassword !== this.passwordForm.get(['confirmPassword'])!.value) { + this.doNotMatch = true; } else { - this.doNotMatch = null; - this.passwordService.save(newPassword, this.passwordForm.get(['currentPassword']).value).subscribe(() => { - this.error = null; - this.success = 'OK'; - }, () => { - this.success = null; - this.error = 'ERROR'; - }); + this.passwordService.save(newPassword, this.passwordForm.get(['currentPassword'])!.value).subscribe( + () => this.success = true, + () => this.error = true + ); } } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password/password.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password/password.route.ts.ejs index ef2375d3..efea25a6 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password/password.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password/password.route.ts.ejs @@ -18,7 +18,7 @@ -%> import { Route } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; import { PasswordComponent } from './password.component'; export const passwordRoute: Route = { diff --git a/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.ts.ejs index 331e74a3..ec51880f 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/password/password.service.ts.ejs @@ -27,7 +27,7 @@ export class PasswordService { constructor(private http: HttpClient) {} - save(newPassword: string, currentPassword: string): Observable { + save(newPassword: string, currentPassword: string): Observable<{}> { return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account/change-password', {currentPassword, newPassword}); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs index 68ea30b0..dbccfc91 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.html.ejs @@ -49,20 +49,20 @@ -
- + formControlName="login" #login> +
+ Your username is required. - Your username is required to be at least 1 character. - Your username cannot be longer than 50 characters. - Your username can only contain letters and digits. @@ -72,20 +72,20 @@ -
- + Your email is required. - Your email is invalid. - Your email is required to be at least 5 characters. - Your email cannot be longer than 100 characters. @@ -95,36 +95,36 @@ -
- + Your password is required. - Your password is required to be at least 4 characters. - Your password cannot be longer than 50 characters.
- <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="registerForm.get('password').value">-password-strength-bar> + <<%= jhiPrefixDashed %>-password-strength-bar [passwordToCheck]="registerForm.get('password')!.value">-password-strength-bar>
-
- + Your confirmation password is required. - Your confirmation password is required to be at least 4 characters. - Your confirmation password cannot be longer than 50 characters. diff --git a/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs index 96b65484..3ab6ef6a 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/register/register.component.ts.ejs @@ -16,28 +16,30 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { Component, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; import { HttpErrorResponse } from '@angular/common/http'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { FormBuilder, Validators } from '@angular/forms'; +<%_ if (enableTranslation) { _%> import { JhiLanguageService } from 'ng-jhipster'; +<%_ } _%> -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { LoginModalService } from 'app/core'; -import { Register } from './register.service'; +import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared/constants/error.constants'; +import { LoginModalService } from 'app/core/login/login-modal.service'; +import { RegisterService } from './register.service'; @Component({ selector: '<%= jhiPrefixDashed %>-register', templateUrl: './register.component.html' }) -export class RegisterComponent implements OnInit, AfterViewInit { - - doNotMatch: string; - error: string; - errorEmailExists: string; - errorUserExists: string; - success: boolean; - modalRef: NgbModalRef; +export class RegisterComponent implements AfterViewInit { + @ViewChild('login', { static: false }) + login?: ElementRef; + + doNotMatch = false; + error = false; + errorEmailExists = false; + errorUserExists = false; + success = false; registerForm = this.fb.group({ login: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(50), Validators.pattern('^[_.@A-Za-z0-9-]*$')]], @@ -47,73 +49,51 @@ export class RegisterComponent implements OnInit, AfterViewInit { }); constructor( +<%_ if (enableTranslation) { _%> private languageService: JhiLanguageService, +<%_ } _%> private loginModalService: LoginModalService, - private registerService: Register, - private elementRef: ElementRef, + private registerService: RegisterService, private renderer: Renderer, private fb: FormBuilder ) { } - ngOnInit() { - this.success = false; + ngAfterViewInit(): void { + if (this.login) { + this.renderer.invokeElementMethod(this.login.nativeElement, 'focus', []); + } } - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#login'), 'focus', []); - } + register(): void { + this.doNotMatch = false; + this.error = false; + this.errorEmailExists = false; + this.errorUserExists = false; - register() { - let registerAccount = {}; - const login = this.registerForm.get(['login']).value; - const email = this.registerForm.get(['email']).value; - const password = this.registerForm.get(['password']).value; - if (password !== this.registerForm.get(['confirmPassword']).value) { - this.doNotMatch = 'ERROR'; + const password = this.registerForm.get(['password'])!.value; + if (password !== this.registerForm.get(['confirmPassword'])!.value) { + this.doNotMatch = true; } else { - registerAccount = {...registerAccount, - login, - email, - password - }; - this.doNotMatch = null; - this.error = null; - this.errorUserExists = null; - this.errorEmailExists = null; -<%_ if (enableTranslation) { _%> - this.languageService.getCurrent().then((langKey) => { - registerAccount = {...registerAccount, - langKey - }; - this.registerService.save(registerAccount).subscribe(() => { - this.success = true; - }, (response) => this.processError(response)); - }); -<%_ } else { _%> - registerAccount = {...registerAccount, - langKey: 'en' - }; - - this.registerService.save(registerAccount).subscribe(() => { - this.success = true; - }, (response) => this.processError(response)); -<%_ } _%> + const login = this.registerForm.get(['login'])!.value; + const email = this.registerForm.get(['email'])!.value; + this.registerService + .save({ login, email, password, langKey: <% if (enableTranslation) { %>this.languageService.getCurrentLanguage()<% } else { %>'en'<% } %> }) + .subscribe(() => (this.success = true), response => this.processError(response)); } } - openLogin() { - this.modalRef = this.loginModalService.open(); + openLogin(): void { + this.loginModalService.open(); } - private processError(response: HttpErrorResponse) { - this.success = null; + private processError(response: HttpErrorResponse): void { if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { - this.errorUserExists = 'ERROR'; + this.errorUserExists = true; } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { - this.errorEmailExists = 'ERROR'; + this.errorEmailExists = true; } else { - this.error = 'ERROR'; + this.error = true; } } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.ts.ejs index b7d723f4..cb48b3ef 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/register/register.service.ts.ejs @@ -21,13 +21,14 @@ import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +import { IUser } from 'app/core/user/user.model'; @Injectable({providedIn: 'root'}) -export class Register { +export class RegisterService { constructor(private http: HttpClient) {} - save(account: any): Observable { + save(account: IUser): Observable<{}> { return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/register', account); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.html.ejs index eb3987b4..91508463 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.html.ejs @@ -17,7 +17,7 @@ limitations under the License. -%>
-

Active sessions for [{{account.login}}]

+

Active sessions for [{{account.login}}]

Session invalidated! @@ -27,13 +27,13 @@
- +
- - - - + + + + diff --git a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.ts.ejs index 85f512f6..3be1aaa3 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.component.ts.ejs @@ -18,20 +18,20 @@ -%> import { Component, OnInit } from '@angular/core'; -import { AccountService } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; import { Session } from './session.model'; import { SessionsService } from './sessions.service'; +import { Account } from 'app/core/user/account.model'; @Component({ selector: '<%= jhiPrefixDashed %>-sessions', templateUrl: './sessions.component.html' }) export class SessionsComponent implements OnInit { - - account: any; - error: string; - success: string; - sessions: Session[]; + account: Account | null = null; + error = false; + success = false; + sessions: Session[] = []; constructor( private sessionsService: SessionsService, @@ -39,25 +39,22 @@ export class SessionsComponent implements OnInit { ) { } - ngOnInit() { + ngOnInit(): void { this.sessionsService.findAll().subscribe((sessions) => this.sessions = sessions); - this.accountService.identity().then((account) => { - this.account = account; - }); + this.accountService.identity().subscribe((account) => this.account = account); } - invalidate(series) { + invalidate(series: string): void { + this.error = false; + this.success = false; + this.sessionsService.delete(encodeURIComponent(series)).subscribe( - (response) => { - if (response.status === 200) { - this.error = null; - this.success = 'OK'; - this.sessionsService.findAll().subscribe((sessions) => this.sessions = sessions); - } else { - this.success = null; - this.error = 'ERROR'; - } - }); + () => { + this.success = true; + this.sessionsService.findAll().subscribe(sessions => this.sessions = sessions); + }, + () => this.error = true + ); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.route.ts.ejs index a6e4d875..83a2ec35 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.route.ts.ejs @@ -18,7 +18,7 @@ -%> import { Route } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; import { SessionsComponent } from './sessions.component'; export const sessionsRoute: Route = { diff --git a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.service.ts.ejs index 62b798b3..2fd45db9 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/sessions/sessions.service.ts.ejs @@ -17,7 +17,7 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; @@ -33,7 +33,7 @@ export class SessionsService { return this.http.get(this.resourceUrl); } - delete(series: string): Observable> { - return this.http.delete(`${this.resourceUrl}${series}`, { observe: 'response' }); + delete(series: string): Observable<{}> { + return this.http.delete(`${this.resourceUrl}${series}`); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs index 94e3e64a..84fb21e9 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.html.ejs @@ -19,29 +19,29 @@
-

[translateValues]="{username: settingsForm.get('login').value}"<% } %> *ngIf="settingsForm.get('login').value">User settings for [{{settingsForm.get('login').value}}]

+

[translateValues]="{username: account.login}"<% } %> *ngIf="account">User settings for [{{ account.login }}]

Settings saved!
- +
-
+
+ *ngIf="settingsForm.get('firstName')?.errors?.required" jhiTranslate="settings.messages.validate.firstname.required"> Your first name is required. + *ngIf="settingsForm.get('firstName')?.errors?.minlength" jhiTranslate="settings.messages.validate.firstname.minlength"> Your first name is required to be at least 1 character. + *ngIf="settingsForm.get('firstName')?.errors?.maxlength" jhiTranslate="settings.messages.validate.firstname.maxlength"> Your first name cannot be longer than 50 characters.
@@ -50,17 +50,17 @@ -
+
+ *ngIf="settingsForm.get('lastName')?.errors?.required" jhiTranslate="settings.messages.validate.lastname.required"> Your last name is required. + *ngIf="settingsForm.get('lastName')?.errors?.minlength" jhiTranslate="settings.messages.validate.lastname.minlength"> Your last name is required to be at least 1 character. + *ngIf="settingsForm.get('lastName')?.errors?.maxlength" jhiTranslate="settings.messages.validate.lastname.maxlength"> Your last name cannot be longer than 50 characters.
@@ -69,21 +69,21 @@ -
+
+ *ngIf="settingsForm.get('email')?.errors?.required" jhiTranslate="global.messages.validate.email.required"> Your email is required. + *ngIf="settingsForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid. + *ngIf="settingsForm.get('email')?.errors?.minlength" jhiTranslate="global.messages.validate.email.minlength"> Your email is required to be at least 5 characters. + *ngIf="settingsForm.get('email')?.errors?.maxlength" jhiTranslate="global.messages.validate.email.maxlength"> Your email cannot be longer than 100 characters.
diff --git a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.ts.ejs index b9af85ff..320b1fe9 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.component.ts.ejs @@ -17,97 +17,75 @@ limitations under the License. -%> import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, Validators } from '@angular/forms'; +<%_ if (enableTranslation) { _%> import { JhiLanguageService } from 'ng-jhipster'; +<%_ } _%> -import { AccountService<% if (enableTranslation) { %>, JhiLanguageHelper<% } %> } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/user/account.model'; +<%_ if (enableTranslation) { _%> +import { LANGUAGES } from 'app/core/language/language.constants'; +<%_ } _%> @Component({ selector: '<%= jhiPrefixDashed %>-settings', templateUrl: './settings.component.html' }) export class SettingsComponent implements OnInit { - error: string; - success: string; - languages: any[]; + account!: Account; + success = false; + <%_ if (enableTranslation) { _%> + languages = LANGUAGES; + <%_ } _%> settingsForm = this.fb.group({ firstName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], lastName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], - email: [ undefined, [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]], - activated: [false], - authorities: [[]], - langKey: ['en'], - login: [], - imageUrl: [] + email: [ undefined, [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]]<% if (enableTranslation) { %>, + langKey: [ undefined ]<% } %> }); constructor( private accountService: AccountService, private fb: FormBuilder<% if (enableTranslation) { %>, - private languageService: JhiLanguageService, - private languageHelper: JhiLanguageHelper<% } %> - ) { - } + private languageService: JhiLanguageService<% } %> + ) {} - ngOnInit() { - this.accountService.identity().then((account) => { - this.updateForm(account); + ngOnInit(): void { + this.accountService.identity().subscribe((account) => { + if (account) { + this.settingsForm.patchValue({ + firstName: account.firstName, + lastName: account.lastName, + email: account.email<% if (enableTranslation) { %>, + langKey: account.langKey<% } %> + }); + + this.account = account; + } }); + } + + save(): void { + this.success = false; + + this.account.firstName = this.settingsForm.get('firstName')!.value; + this.account.lastName = this.settingsForm.get('lastName')!.value; + this.account.email = this.settingsForm.get('email')!.value; <%_ if (enableTranslation) { _%> - this.languageHelper.getAll().then((languages) => { - this.languages = languages; - }); + this.account.langKey = this.settingsForm.get('langKey')!.value; <%_ } _%> - } + this.accountService.save(this.account).subscribe(() => { + this.success = true; - save() { - const settingsAccount = this.accountFromForm(); - this.accountService.save(settingsAccount).subscribe(() => { - this.error = null; - this.success = 'OK'; - this.accountService.identity(true).then((account) => { - this.updateForm(account); - }); + this.accountService.authenticate(this.account); <%_ if (enableTranslation) { _%> - this.languageService.getCurrent().then((current) => { - if (settingsAccount.langKey !== current) { - this.languageService.changeLanguage(settingsAccount.langKey); - } - }); - <%_ } _%> - }, () => { - this.success = null; - this.error = 'ERROR'; - }); - } - - private accountFromForm(): any { - const account = {}; - return {...account, - firstName: this.settingsForm.get('firstName').value, - lastName: this.settingsForm.get('lastName').value, - email: this.settingsForm.get('email').value, - activated: this.settingsForm.get('activated').value, - authorities: this.settingsForm.get('authorities').value, - langKey: this.settingsForm.get('langKey').value, - login: this.settingsForm.get('login').value, - imageUrl: this.settingsForm.get('imageUrl').value - }; - } - updateForm(account: any): void { - this.settingsForm.patchValue({ - firstName: account.firstName, - lastName: account.lastName, - email: account.email, - activated: account.activated, - authorities: account.authorities, - langKey: account.langKey, - login: account.login, - imageUrl: account.imageUrl + if (this.account.langKey !== this.languageService.getCurrentLanguage()) { + this.languageService.changeLanguage(this.account.langKey); + } + <%_ } _%> }); } - } diff --git a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.route.ts.ejs index 1fa39091..33accedd 100644 --- a/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/account/settings/settings.route.ts.ejs @@ -18,7 +18,7 @@ -%> import { Route } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; import { SettingsComponent } from './settings.component'; export const settingsRoute: Route = { diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs new file mode 100644 index 00000000..c318910f --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/admin-routing.module.ts.ejs @@ -0,0 +1,80 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ + +@NgModule({ + imports: [ + /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ + RouterModule.forChild( + [ + <%_ if (!skipUserManagement) { _%> + { + path: 'user-management', + loadChildren: () => import('./user-management/user-management.module').then(m => m.UserManagementModule), + data: { + pageTitle: 'userManagement.home.title' + } + }, + <%_ } _%> + <%_ if ((databaseType !== 'no' || authenticationType === 'uaa') && databaseType !== 'cassandra') { _%> + { + path: 'audits', + loadChildren: () => import('./audits/audits.module').then(m => m.AuditsModule) + }, + <%_ } _%> + { + path: 'configuration', + loadChildren: () => import('./configuration/configuration.module').then(m => m.ConfigurationModule) + }, + { + path: 'docs', + loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule) + }, + <%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> + { + path: 'gateway', + loadChildren: () => import('./gateway/gateway.module').then(m => m.GatewayModule) + }, + <%_ } _%> + { + path: 'health', + loadChildren: () => import('./health/health.module').then(m => m.HealthModule) + }, + { + path: 'logs', + loadChildren: () => import('./logs/logs.module').then(m => m.LogsModule) + }, + <%_ if (websocket === 'spring-websocket') { _%> + { + path: 'tracker', + loadChildren: () => import('./tracker/tracker.module').then(m => m.TrackerModule) + }, + <%_ } _%> + { + path: 'metrics', + loadChildren: () => import('./metrics/metrics.module').then(m => m.MetricsModule) + } + /* jhipster-needle-add-admin-route - JHipster will add admin routes here */ + ] + ) + ] +}) +export class AdminRoutingModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/admin.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/admin.module.ts.ejs deleted file mode 100644 index 58ac8886..00000000 --- a/generators/client/templates/angular/src/main/webapp/app/admin/admin.module.ts.ejs +++ /dev/null @@ -1,102 +0,0 @@ -<%# - Copyright 2013-2019 the original author or authors from the JHipster project. - - This file is part of the JHipster project, see https://www.jhipster.tech/ - for more information. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; -<%_ if (enableTranslation) { _%> -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -<%_ } _%> -import { <%=angularXAppName%>SharedModule } from 'app/shared'; -/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ - -import { - adminState, - <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> - AuditsComponent, - <%_ } _%> - <%_ if (!skipUserManagement) { _%> - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - <%_ } _%> - LogsComponent, - <%=jhiPrefixCapitalized%>MetricsMonitoringComponent, - <%=jhiPrefixCapitalized%>HealthModalComponent, - <%=jhiPrefixCapitalized%>HealthCheckComponent, - <%=jhiPrefixCapitalized%>ConfigurationComponent, - <%=jhiPrefixCapitalized%>DocsComponent, - <%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> - <%=jhiPrefixCapitalized%>GatewayComponent, - <%_ } _%> - <%_ if (websocket === 'spring-websocket') { _%> - <%=jhiPrefixCapitalized%>TrackerComponent, - <%_ } _%> -} from './'; -import { ButtonModule } from 'primeng/button'; - -@NgModule({ - imports: [ - <%=angularXAppName%>SharedModule, - /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ - RouterModule.forChild(adminState), - ButtonModule - ], - declarations: [ - <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> - AuditsComponent, - <%_ } _%> - <%_ if (!skipUserManagement) { _%> - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - <%_ } _%> - LogsComponent, - <%=jhiPrefixCapitalized%>ConfigurationComponent, - <%=jhiPrefixCapitalized%>HealthCheckComponent, - <%=jhiPrefixCapitalized%>HealthModalComponent, - <%=jhiPrefixCapitalized%>DocsComponent, - <%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> - <%=jhiPrefixCapitalized%>GatewayComponent, - <%_ } _%> - <%_ if (websocket === 'spring-websocket') { _%> - <%=jhiPrefixCapitalized%>TrackerComponent, - <%_ } _%> - <%=jhiPrefixCapitalized%>MetricsMonitoringComponent - ], - <%_ if (enableTranslation) { _%> - providers: [ { provide: JhiLanguageService, useClass: JhiLanguageService } ], - <%_ } _%> - entryComponents: [ - <%_ if (!skipUserManagement) { _%> - <%_ } _%> - <%=jhiPrefixCapitalized%>HealthModalComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class <%=angularXAppName%>AdminModule { - <%_ if (enableTranslation) { _%> - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } - <%_ } _%> -} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/admin.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/admin.route.ts.ejs deleted file mode 100644 index b4f4b089..00000000 --- a/generators/client/templates/angular/src/main/webapp/app/admin/admin.route.ts.ejs +++ /dev/null @@ -1,70 +0,0 @@ -<%# - Copyright 2013-2019 the original author or authors from the JHipster project. - - This file is part of the JHipster project, see https://www.jhipster.tech/ - for more information. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> -import { Routes } from '@angular/router'; - -import { - <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> - auditsRoute, - <%_ } _%> - configurationRoute, - docsRoute, - healthRoute, - logsRoute, - metricsRoute, - <%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> - gatewayRoute, - <%_ } _%> - <%_ if (websocket === 'spring-websocket') { _%> - trackerRoute, - <%_ } _%> - <%_ if (!skipUserManagement) { _%> - userMgmtRoute - <%_ } _%> -} from './'; - -import { UserRouteAccessService } from 'app/core'; - -const ADMIN_ROUTES = [ - <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> - auditsRoute, - <%_ } _%> - configurationRoute, - docsRoute, - healthRoute, - logsRoute, - <%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> - gatewayRoute, - <%_ } _%> - <%_ if (websocket === 'spring-websocket') { _%> - trackerRoute, - <%_ } _%> - <%_ if (!skipUserManagement) { _%> - ...userMgmtRoute, - <%_ } _%> - metricsRoute -]; - -export const adminState: Routes = [{ - path: '', - data: { - authorities: ['ROLE_ADMIN'] - }, - canActivate: [UserRouteAccessService], - children: ADMIN_ROUTES -}]; diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.html.ejs index 902233e4..dbfcb95f 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.html.ejs @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. -%> -
+

Audits

@@ -39,14 +39,21 @@
No audit found
+
-
IP AddressUser agentDateIP AddressUser agentDate
- - - - - - +
DateUserStateExtra data
+ + + + + + + + + + + + @@ -62,12 +69,13 @@
Date User State Extra data
DateUserStateExtra data
-
+ +
- +
diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.ts.ejs index dc80df52..80f4adea 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.component.ts.ejs @@ -16,14 +16,12 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { HttpResponse, HttpHeaders } from '@angular/common/http'; import { DatePipe } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; -import { JhiParseLinks } from 'ng-jhipster'; -import { MessageService } from 'primeng/api'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { Audit } from './audit.model'; import { AuditsService } from './audits.service'; @@ -31,113 +29,104 @@ import { AuditsService } from './audits.service'; selector: '<%= jhiPrefixDashed %>-audit', templateUrl: './audits.component.html' }) -export class AuditsComponent implements OnInit, OnDestroy { - audits: Audit[]; - fromDate: string; - itemsPerPage: any; - links: any; - page: number; - routeData: any; - predicate: any; - previousPage: any; - reverse: boolean; - toDate: string; - totalItems: number; +export class AuditsComponent implements OnInit { + audits?: Audit[]; + fromDate = ''; + itemsPerPage = ITEMS_PER_PAGE; + page!: number; + predicate!: string; + previousPage!: number; + ascending!: boolean; + toDate = ''; + totalItems = 0; + + private dateFormat = 'yyyy-MM-dd'; constructor( private auditsService: AuditsService, - private messageService: MessageService, - private parseLinks: JhiParseLinks, private activatedRoute: ActivatedRoute, private datePipe: DatePipe, private router: Router - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe((data) => { + ) {} + + ngOnInit(): void { + this.toDate = this.today(); + this.fromDate = this.previousMonth(); + this.activatedRoute.data.subscribe(data => { this.page = data['pagingParams'].page; this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; + this.ascending = data['pagingParams'].ascending; this.predicate = data['pagingParams'].predicate; + this.loadData(); }); } - ngOnInit() { - this.today(); - this.previousMonth(); - this.loadAll(); + loadPage(page: number): void { + if (page !== this.previousPage) { + this.previousPage = page; + this.transition(); + } } - ngOnDestroy() { - this.routeData.unsubscribe(); + canLoad(): boolean { + return this.fromDate !== '' && this.toDate !== ''; } - previousMonth() { - const dateFormat = 'yyyy-MM-dd'; - let fromDate: Date = new Date(); + transition(): void { + if (this.canLoad()) { + this.router.navigate(['/admin/audits'], { + queryParams: { + page: this.page, + sort: this.predicate + ',' + (this.ascending ? 'asc' : 'desc') + } + }); + this.loadData(); + } + } - if (fromDate.getMonth() === 0) { - fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate()); + private previousMonth(): string { + let date = new Date(); + if (date.getMonth() === 0) { + date = new Date(date.getFullYear() - 1, 11, date.getDate()); } else { - fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate()); + date = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate()); } - - this.fromDate = this.datePipe.transform(fromDate, dateFormat); + return this.datePipe.transform(date, this.dateFormat)!; } - today() { - const dateFormat = 'yyyy-MM-dd'; + private today(): string { // Today + 1 day - needed if the current day must be included - const today: Date = new Date(); - today.setDate(today.getDate() + 1); - const date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - this.toDate = this.datePipe.transform(date, dateFormat); + const date = new Date(); + date.setDate(date.getDate() + 1); + return this.datePipe.transform(date, this.dateFormat)!; } - loadAll() { - this.auditsService.query({ - page: this.page - 1, - size: this.itemsPerPage, - sort: this.sort(), - fromDate: this.fromDate, - toDate: this.toDate}).subscribe( - (res: HttpResponse) => this.onSuccess(res.body, res.headers), - (res: HttpResponse) => this.onError(res.body) - ); + private loadData(): void { + this.auditsService + .query({ + page: this.page - 1, + size: this.itemsPerPage, + sort: this.sort(), + fromDate: this.fromDate, + toDate: this.toDate + }) + .subscribe((res: HttpResponse) => this.onSuccess(res.body, res.headers)); } - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + private sort(): string[] { + const result = [this.predicate + ',' + (this.ascending ? 'asc' : 'desc')]; if (this.predicate !== 'id') { result.push('id'); } return result; } - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); + private onSuccess(audits: Audit[] | null, headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); + if (audits === null) { + this.audits = []; + } else { + this.audits = audits; } } - - transition() { - this.router.navigate(['/admin/audits'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.audits = data; - } - - private onError(error) { - this.messageService.add({severity:'error', summary: error.error, detail: error.message}); - } - } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.module.ts.ejs new file mode 100644 index 00000000..0bb9a3a5 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { AuditsComponent } from './audits.component'; + +import { auditsRoute } from './audits.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([auditsRoute]) + ], + declarations: [AuditsComponent] +}) +export class AuditsModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.route.ts.ejs index aafcc7e0..890a37e7 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.route.ts.ejs @@ -16,14 +16,13 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Route } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; +import { Route } from '@angular/router'; +import { JhiResolvePagingParams } from 'ng-jhipster'; import { AuditsComponent } from './audits.component'; export const auditsRoute: Route = { - path: 'audits', + path: '', component: AuditsComponent, resolve: { 'pagingParams': JhiResolvePagingParams diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.service.ts.ejs index 0aada800..b0a2b782 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/audits/audits.service.ts.ejs @@ -20,18 +20,25 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { createRequestOption} from 'app/shared'; +import { createRequestOption } from 'app/shared/util/request-util'; import { SERVER_API_URL } from 'app/app.constants'; import { Audit } from './audit.model'; +// TODO switch to primeng and check what to do with extends Pagination removed +export interface AuditsQuery { + page: number; + size: number; + sort: string[]; + fromDate: string; + toDate: string; + } + @Injectable({providedIn: 'root'}) export class AuditsService { constructor(private http: HttpClient) { } - query(req: any): Observable> { + query(req: AuditsQuery): Observable> { const params: HttpParams = createRequestOption(req); - params.set('fromDate', req.fromDate); - params.set('toDate', req.toDate); const requestURL = SERVER_API_URL + '<%- apiUaaPath %>management/audits'; diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs index acc2628f..de42bf31 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.html.ejs @@ -16,46 +16,46 @@ See the License for the specific language governing permissions and limitations under the License. -%> -
+

Configuration

- Filter (by prefix) -

Spring configuration

- + Filter (by prefix) +

Spring configuration

+
- - - + + + - - + +
PrefixProperties
Prefix Properties
{{entry.prefix}}
{{ bean.prefix }} -
-
{{key}}
+
+
{{ property.key }}
- {{entry.properties[key] | json}} + {{ property.value | json }}
-
-

{{key}}

- +
+

{{ propertySource.name }}

+
- - + + - - + + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.ts.ejs index e5152839..a7cd30ce 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.component.ts.ejs @@ -18,46 +18,35 @@ -%> import { Component, OnInit } from '@angular/core'; -import { <%=jhiPrefixCapitalized%>ConfigurationService } from './configuration.service'; +import { ConfigurationService, Bean, PropertySource } from './configuration.service'; @Component({ selector: '<%= jhiPrefixDashed %>-configuration', templateUrl: './configuration.component.html' }) -export class <%=jhiPrefixCapitalized%>ConfigurationComponent implements OnInit { - allConfiguration: any = null; - configuration: any = null; - configKeys: any[]; - filter: string; - orderProp: string; - reverse: boolean; +export class ConfigurationComponent implements OnInit { + allBeans!: Bean[]; + beans: Bean[] = []; + beansFilter = ''; + beansAscending = true; + propertySources: PropertySource[] = []; constructor( - private configurationService: <%=jhiPrefixCapitalized%>ConfigurationService - ) { - this.configKeys = []; - this.filter = ''; - this.orderProp = 'prefix'; - this.reverse = false; - } - - keys(dict): Array { - return (dict === undefined) ? [] : Object.keys(dict); - } - - ngOnInit() { - this.configurationService.get().subscribe((configuration) => { - this.configuration = configuration; + private configurationService: ConfigurationService + ) {} - for (const config of configuration) { - if (config.properties !== undefined) { - this.configKeys.push(Object.keys(config.properties)); - } - } + ngOnInit(): void { + this.configurationService.getBeans().subscribe(beans => { + this.allBeans = beans; + this.filterAndSortBeans(); }); - this.configurationService.getEnv().subscribe((configuration) => { - this.allConfiguration = configuration; - }); + this.configurationService.getPropertySources().subscribe(propertySources => (this.propertySources = propertySources)); + } + + filterAndSortBeans(): void { + this.beans = this.allBeans + .filter(bean => !this.beansFilter || bean.prefix.toLowerCase().includes(this.beansFilter.toLowerCase())) + .sort((a, b) => (a.prefix < b.prefix ? (this.beansAscending ? -1 : 1) : this.beansAscending ? 1 : -1)); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.module.ts.ejs new file mode 100644 index 00000000..aa6b652d --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { ConfigurationComponent } from './configuration.component'; + +import { configurationRoute } from './configuration.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([configurationRoute]) + ], + declarations: [ConfigurationComponent] +}) +export class ConfigurationModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.route.ts.ejs index 9ea0492c..59eba2ce 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.route.ts.ejs @@ -18,11 +18,11 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>ConfigurationComponent } from './configuration.component'; +import { ConfigurationComponent } from './configuration.component'; export const configurationRoute: Route = { - path: '<%= jhiPrefixDashed %>-configuration', - component: <%=jhiPrefixCapitalized%>ConfigurationComponent, + path: '', + component: ConfigurationComponent, data: { pageTitle: 'configuration.title' } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs index c0797b51..123e53c8 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/configuration/configuration.service.ts.ejs @@ -17,71 +17,70 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { SERVER_API_URL } from 'app/app.constants'; -@Injectable({providedIn: 'root'}) -export class <%=jhiPrefixCapitalized%>ConfigurationService { +export interface ConfigProps { + contexts: Contexts; +} - constructor(private http: HttpClient) { - } +export interface Contexts { + [key: string]: Context; +} - get(): Observable { - return this.http.get(SERVER_API_URL + 'management/configprops', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any[] = []; - const propertiesObject = this.getConfigPropertiesObjects(res.body); - for (const key in propertiesObject) { - if (propertiesObject.hasOwnProperty(key)) { - properties.push(propertiesObject[key]); - } - } - - return properties.sort((propertyA, propertyB) => { - return (propertyA.prefix === propertyB.prefix) ? 0 : propertyA.prefix < propertyB.prefix ? -1 : 1; - }); - }) - ); - } +export interface Context { + beans: Beans; + parentId?: any; +} - getConfigPropertiesObjects(res: Object) { - // This code is for Spring Boot 2 - if (res['contexts'] !== undefined) { - for (const key in res['contexts']) { - // If the key is not bootstrap, it will be the ApplicationContext Id - // For default app, it is baseName - // For microservice, it is baseName-1 - if (!key.startsWith('bootstrap')) { - return res['contexts'][key]['beans']; - } - } - } - // by default, use the default ApplicationContext Id - return res['contexts']['<%= baseName %>']['beans']; - } +export interface Beans { + [key: string]: Bean; +} - getEnv(): Observable { - return this.http.get(SERVER_API_URL + 'management/env', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any = {}; - const propertySources = res.body['propertySources']; - - for (const propertyObject of propertySources) { - const name = propertyObject['name']; - const detailProperties = propertyObject['properties']; - const vals: any[] = []; - for (const keyDetail in detailProperties) { - if (detailProperties.hasOwnProperty(keyDetail)) { - vals.push({key: keyDetail, val: detailProperties[keyDetail]['value']}); - } - } - properties[name] = vals; - } - return properties; - }) +export interface Bean { + prefix: string; + properties: any; +} + +export interface Env { + activeProfiles?: string[]; + propertySources: PropertySource[]; +} + +export interface PropertySource { + name: string; + properties: Properties; +} + +export interface Properties { + [key: string]: Property; +} + +export interface Property { + value: string; + origin?: string; +} + +@Injectable({providedIn: 'root'}) +export class ConfigurationService { + constructor(private http: HttpClient) {} + + getBeans(): Observable { + return this.http.get(SERVER_API_URL + 'management/configprops').pipe( + map(configProps => + Object.values( + Object.values(configProps.contexts) + .map(context => context.beans) + .reduce((allBeans: Beans, contextBeans: Beans) => ({ ...allBeans, ...contextBeans })) + ) + ) ); } + + getPropertySources(): Observable { + return this.http.get(SERVER_API_URL + 'management/env').pipe(map(env => env.propertySources)); + } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.component.ts.ejs index 688b4092..f6568871 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.component.ts.ejs @@ -22,7 +22,7 @@ import { Component } from '@angular/core'; selector: '<%= jhiPrefixDashed %>-docs', templateUrl: './docs.component.html' }) -export class <%=jhiPrefixCapitalized%>DocsComponent { +export class DocsComponent { constructor( ) { } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.module.ts.ejs new file mode 100644 index 00000000..61702173 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { DocsComponent } from './docs.component'; + +import { docsRoute } from './docs.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([docsRoute]) + ], + declarations: [DocsComponent] +}) +export class DocsModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.route.ts.ejs index bbe7eb25..d288664a 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/docs/docs.route.ts.ejs @@ -18,12 +18,13 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>DocsComponent } from './docs.component'; +import { DocsComponent } from './docs.component'; export const docsRoute: Route = { - path: 'docs', - component: <%=jhiPrefixCapitalized%>DocsComponent, + path: '', + component: DocsComponent, data: { pageTitle: 'global.menu.admin.apidocs' } }; + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs index 51885eae..9878c7aa 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.html.ejs @@ -19,18 +19,18 @@

Gateway -

Current routes

-
PropertyValuePropertyValue
{{item.key}}
{{ property.key }} - {{item.val}} + {{ property.value.value }}
+
- - - + + + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.ts.ejs index b4992e16..55a5083d 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.component.ts.ejs @@ -26,21 +26,21 @@ import { GatewayRoute } from './gateway-route.model'; templateUrl: './gateway.component.html', providers: [ GatewayRoutesService ] }) -export class <%=jhiPrefixCapitalized%>GatewayComponent implements OnInit { +export class GatewayComponent implements OnInit { - gatewayRoutes: GatewayRoute[]; - updatingRoutes: boolean; + gatewayRoutes: GatewayRoute[] = []; + updatingRoutes = false; constructor( private gatewayRoutesService: GatewayRoutesService ) { } - ngOnInit() { + ngOnInit(): void { this.refresh(); } - refresh() { + refresh(): void { this.updatingRoutes = true; this.gatewayRoutesService.findAll().subscribe((gatewayRoutes) => { this.gatewayRoutes = gatewayRoutes; diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.module.ts.ejs new file mode 100644 index 00000000..9f48db15 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { GatewayComponent } from './gateway.component'; + +import { gatewayRoute } from './gateway.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([gatewayRoute]) + ], + declarations: [GatewayComponent] +}) +export class GatewayModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.route.ts.ejs index e0117f82..3c6247ad 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/gateway/gateway.route.ts.ejs @@ -18,11 +18,11 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>GatewayComponent } from './gateway.component'; +import { GatewayComponent } from './gateway.component'; export const gatewayRoute: Route = { - path: 'gateway', - component: <%=jhiPrefixCapitalized%>GatewayComponent, + path: '', + component: GatewayComponent, data: { pageTitle: 'gateway.title' } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.html.ejs index 32b01571..3d32358c 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.html.ejs @@ -17,38 +17,33 @@ limitations under the License. -%>
URLServiceAvailable serversURLServiceAvailable servers
+
- - + + - - - + + +
NameValueNameValue
{{entry.key}}{{readableValue(entry.value)}}
{{ healthDetail.key }}{{ readableValue(healthDetail.value) }}
-
-

Error

-
{{currentHealth.error}}
-
diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.ts.ejs index 8ba134f3..63b223df 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health-modal.component.ts.ejs @@ -19,28 +19,19 @@ import { Component } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { <%=jhiPrefixCapitalized%>HealthService } from './health.service'; +import { HealthKey, HealthDetails } from './health.service'; @Component({ selector: '<%= jhiPrefixDashed %>-health-modal', templateUrl: './health-modal.component.html' }) -export class <%=jhiPrefixCapitalized%>HealthModalComponent { +export class HealthModalComponent { + health?: { key: HealthKey; value: HealthDetails }; - currentHealth: any; + constructor(public activeModal: NgbActiveModal) {} - constructor(private healthService: <%=jhiPrefixCapitalized%>HealthService, public activeModal: NgbActiveModal) {} - - baseName(name) { - return this.healthService.getBaseName(name); - } - - subSystemName(name) { - return this.healthService.getSubSystemName(name); - } - - readableValue(value: number) { - if (this.currentHealth.name === 'diskSpace') { + readableValue(value: any): string { + if (this.health && this.health.key === 'diskSpace') { // Should display storage space in an human readable unit const val = value / 1073741824; if (val > 1) { // Value @@ -56,4 +47,8 @@ export class <%=jhiPrefixCapitalized%>HealthModalComponent { return value.toString(); } } + + dismiss(): void { + this.activeModal.dismiss(); + } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs index 1b7b53d2..4a5c25db 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.html.ejs @@ -24,24 +24,24 @@
- +
- - - + + + - - - + + + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs index db74ae34..4d4e60dd 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.component.ts.ejs @@ -17,35 +17,29 @@ limitations under the License. -%> import { Component, OnInit } from '@angular/core'; +import { HttpErrorResponse } from '@angular/common/http'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { <%=jhiPrefixCapitalized%>HealthService } from './health.service'; -import { <%=jhiPrefixCapitalized%>HealthModalComponent } from './health-modal.component'; +import { HealthService, HealthStatus, Health, HealthKey, HealthDetails } from './health.service'; +import { HealthModalComponent } from './health-modal.component'; @Component({ selector: '<%= jhiPrefixDashed %>-health', templateUrl: './health.component.html' }) -export class <%=jhiPrefixCapitalized%>HealthCheckComponent implements OnInit { - healthData: any; - updatingHealth: boolean; +export class HealthComponent implements OnInit { + health?: Health; constructor( private modalService: NgbModal, - private healthService: <%=jhiPrefixCapitalized%>HealthService - ) { + private healthService: HealthService + ) {} - } - - ngOnInit() { + ngOnInit(): void { this.refresh(); } - baseName(name: string) { - return this.healthService.getBaseName(name); - } - - getBadgeClass(statusState) { + getBadgeClass(statusState: HealthStatus): string { if (statusState === 'UP') { return 'badge-success'; } else { @@ -53,32 +47,19 @@ export class <%=jhiPrefixCapitalized%>HealthCheckComponent implements OnInit { } } - refresh() { - this.updatingHealth = true; - - this.healthService.checkHealth().subscribe((health) => { - this.healthData = this.healthService.transformHealthData(health); - this.updatingHealth = false; - }, (error) => { - if (error.status === 503) { - this.healthData = this.healthService.transformHealthData(error.error); - this.updatingHealth = false; + refresh(): void { + this.healthService.checkHealth().subscribe( + health => (this.health = health), + (error: HttpErrorResponse) => { + if (error.status === 503) { + this.health = error.error; + } } - }); - } - - showHealth(health: any) { - const modalRef = this.modalService.open(<%=jhiPrefixCapitalized%>HealthModalComponent); - modalRef.componentInstance.currentHealth = health; - modalRef.result.then((result) => { - // Left blank intentionally, nothing to do here - }, (reason) => { - // Left blank intentionally, nothing to do here - }); + ); } - subSystemName(name: string) { - return this.healthService.getSubSystemName(name); + showHealth(health: { key: HealthKey; value: HealthDetails }): void { + const modalRef = this.modalService.open(HealthModalComponent); + modalRef.componentInstance.health = health; } - } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.module.ts.ejs new file mode 100644 index 00000000..1ba6255f --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.module.ts.ejs @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { HealthComponent } from './health.component'; +import { HealthModalComponent } from './health-modal.component'; + +import { healthRoute } from './health.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([healthRoute]) + ], + declarations: [HealthComponent, HealthModalComponent], + entryComponents: [HealthModalComponent] +}) +export class HealthModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.route.ts.ejs index 52037e10..6090dd9e 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.route.ts.ejs @@ -18,11 +18,11 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>HealthCheckComponent } from './health.component'; +import { HealthComponent } from './health.component'; export const healthRoute: Route = { - path: '<%= jhiPrefixDashed %>-health', - component: <%=jhiPrefixCapitalized%>HealthCheckComponent, + path: '', + component: HealthComponent, data: { pageTitle: 'health.title' } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.ts.ejs index bb445f2e..66308ddc 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/health/health.service.ts.ejs @@ -22,131 +22,54 @@ import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; -@Injectable({providedIn: 'root'}) -export class <%=jhiPrefixCapitalized%>HealthService { - - separator: string; - - constructor(private http: HttpClient) { - this.separator = '.'; - } - - checkHealth(): Observable { - return this.http.get(SERVER_API_URL + 'management/health'); - } - - transformHealthData(data): any { - const response = []; - this.flattenHealthData(response, null, data.details); - return response; - } - - getBaseName(name): string { - if (name) { - const split = name.split('.'); - return split[0]; - } - } - - getSubSystemName(name): string { - if (name) { - const split = name.split('.'); - split.splice(0, 1); - const remainder = split.join('.'); - return remainder ? ' - ' + remainder : ''; - } - } - - /* private methods */ - private addHealthObject(result, isLeaf, healthObject, name): any { - const healthData: any = { - name - }; - - const details = {}; - let hasDetails = false; - - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (key === 'status' || key === 'error') { - healthData[key] = value; - } else { - if (!this.isHealthObject(value)) { - details[key] = value; - hasDetails = true; - } - } - } - } - - // Add the details - if (hasDetails) { - healthData.details = details; - } - - // Only add nodes if they provide additional information - if (isLeaf || hasDetails || healthData.error) { - result.push(healthData); - } - return healthData; - } - - private flattenHealthData(result, path, data): any { - for (const key in data) { - if (data.hasOwnProperty(key)) { - const value = data[key]; - if (this.isHealthObject(value)) { - if (this.hasSubSystem(value)) { - this.addHealthObject(result, false, value, this.getModuleName(path, key)); - this.flattenHealthData(result, this.getModuleName(path, key), value); - } else { - this.addHealthObject(result, true, value, this.getModuleName(path, key)); - } - } - } - } - return result; - } - - private getModuleName(path, name): string { - let result; - if (path && name) { - result = path + this.separator + name; - } else if (path) { - result = path; - } else if (name) { - result = name; - } else { - result = ''; - } - return result; - } - - private hasSubSystem(healthObject): boolean { - let result = false; +export type HealthStatus = 'UP' | 'DOWN' | 'UNKNOWN' | 'OUT_OF_SERVICE'; + +export type HealthKey = + <%_ if (messageBroker === 'kafka') { _%> + | 'binders' + <%_ } _%> + <%_ if (applicationType === 'gateway' || serviceDiscoveryType) { _%> + | 'discoveryComposite' + | 'refreshScope' + | 'clientConfigServer' + | 'hystrix' + <%_ } _%> + <%_ if (serviceDiscoveryType === 'consul') { _%> + | 'consul' + <%_ } _%> + | 'diskSpace' + | 'mail' + <%_ if (searchEngine === 'elasticsearch') { _%> + | 'elasticsearch' + <%_ } _%> + <%_ if (databaseType === 'sql') { _%> + | 'db' + <%_ } else if (databaseType === 'mongodb') { _%> + | 'mongo' + <%_ } else if (databaseType === 'cassandra') { _%> + | 'cassandra' + <%_ } else if (databaseType === 'couchbase') { _%> + | 'couchbase' + <%_ } _%> + ; + +export interface Health { + status: HealthStatus; + details: { + [key in HealthKey]?: HealthDetails; + }; +} - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (value && value.status) { - result = true; - } - } - } - return result; - } +export interface HealthDetails { + status: HealthStatus; + details: any; +} - private isHealthObject(healthObject): boolean { - let result = false; +@Injectable({providedIn: 'root'}) +export class HealthService { + constructor(private http: HttpClient) {} - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - if (key === 'status') { - result = true; - } - } - } - return result; + checkHealth(): Observable { + return this.http.get(SERVER_API_URL + 'management/health'); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/index.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/index.ts.ejs deleted file mode 100644 index 56323198..00000000 --- a/generators/client/templates/angular/src/main/webapp/app/admin/index.ts.ejs +++ /dev/null @@ -1,58 +0,0 @@ -<%# - Copyright 2013-2019 the original author or authors from the JHipster project. - - This file is part of the JHipster project, see https://www.jhipster.tech/ - for more information. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --%> -<%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> -export * from './audits/audits.component'; -export * from './audits/audits.service'; -export * from './audits/audits.route'; -export * from './audits/audit.model'; -export * from './audits/audit-data.model'; -<%_ } _%> -export * from './configuration/configuration.component'; -export * from './configuration/configuration.service'; -export * from './configuration/configuration.route'; -export * from './docs/docs.component'; -export * from './docs/docs.route'; -export * from './health/health.component'; -export * from './health/health-modal.component'; -export * from './health/health.service'; -export * from './health/health.route'; -export * from './logs/logs.component'; -export * from './logs/logs.service'; -export * from './logs/logs.route'; -export * from './logs/log.model'; -<%_ if (applicationType === 'gateway' && serviceDiscoveryType) { _%> -export * from './gateway/gateway.component'; -export * from './gateway/gateway-routes.service'; -export * from './gateway/gateway.route'; -export * from './gateway/gateway-route.model'; -<%_ } _%> -<%_ if (websocket === 'spring-websocket') { _%> -export * from './tracker/tracker.component'; -export * from './tracker/tracker.route'; -<%_ } _%> -export * from './metrics/metrics.component'; -export * from './metrics/metrics.service'; -export * from './metrics/metrics.route'; -<%_ if (!skipUserManagement) { _%> -export * from './user-management/user-management-update.component'; -export * from './user-management/user-management-detail.component'; -export * from './user-management/user-management.component'; -export * from './user-management/user-management.route'; -<%_ } _%> -export * from './admin.route'; diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/log.model.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/log.model.ts.ejs index 4a3a693f..5acbcda8 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/logs/log.model.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/log.model.ts.ejs @@ -16,9 +16,21 @@ See the License for the specific language governing permissions and limitations under the License. -%> +export type Level = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'OFF'; + +export interface Logger { + configuredLevel: Level | null; + effectiveLevel: Level; +} + +export interface LoggersResponse { + levels: Level[]; + loggers: { [key: string]: Logger }; +} + export class Log { constructor( public name: string, - public level: string + public level: Level ) { } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs index b45a81df..7a0d0657 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.html.ejs @@ -23,11 +23,11 @@ Filter -
Service NameStatusDetailsService NameStatusDetails
<% if (enableTranslation) { %>{{'health.indicator.' + baseName(health.name) | translate}}<% } else { %>{{ baseName(health.name) }}<% } %> {{subSystemName(health.name)}}
<% if (enableTranslation) { %>{{'health.indicator.' + componentHealth.key | translate}}<% } else { %>{{ componentHealth.key }}<% } %> - - {{health.status}} + + {{ componentHealth.value.status }} - +
+
- - + + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.ts.ejs index b7efada6..4d832b8d 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.component.ts.ejs @@ -18,7 +18,7 @@ -%> import { Component, OnInit } from '@angular/core'; -import { Log } from './log.model'; +import { Log, LoggersResponse, Logger, Level } from './log.model'; import { LogsService } from './logs.service'; @Component({ @@ -26,32 +26,27 @@ import { LogsService } from './logs.service'; templateUrl: './logs.component.html', }) export class LogsComponent implements OnInit { - - loggers: Log[]; - filter: string; - orderProp: string; - reverse: boolean; - - constructor( - private logsService: LogsService - ) { - this.filter = ''; - this.orderProp = 'name'; - this.reverse = false; - } - - ngOnInit() { - this.logsService.findAll().subscribe(response => this.extractLoggers(response)); + loggers?: Log[]; + filter = ''; + orderProp = 'name'; + reverse = false; + + constructor(private logsService: LogsService) {} + + ngOnInit(): void { + this.findAndExtractLoggers(); } - changeLevel(name: string, level: string) { - this.logsService.changeLevel(name, level).subscribe(() => { - this.logsService.findAll().subscribe(response => this.extractLoggers(response)); - }); + changeLevel(name: string, level: Level): void { + this.logsService.changeLevel(name, level).subscribe(() => this.findAndExtractLoggers()); } - - private extractLoggers(response) { - this.loggers = Object.entries(response.body.loggers) - .map(e => new Log(e[0], e[1]['effectiveLevel'])); + + private findAndExtractLoggers(): void { + this.logsService + .findAll() + .subscribe( + (response: LoggersResponse) => + (this.loggers = Object.entries(response.loggers).map((logger: [string, Logger]) => new Log(logger[0], logger[1].effectiveLevel))) + ); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.module.ts.ejs new file mode 100644 index 00000000..6396ca98 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { LogsComponent } from './logs.component'; + +import { logsRoute } from './logs.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([logsRoute]) + ], + declarations: [LogsComponent] +}) +export class LogsModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.route.ts.ejs index 8f1f2a1d..6f19dbba 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.route.ts.ejs @@ -21,7 +21,7 @@ import { Route } from '@angular/router'; import { LogsComponent } from './logs.component'; export const logsRoute: Route = { - path: 'logs', + path: '', component: LogsComponent, data: { pageTitle: 'logs.title' diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.service.ts.ejs index da624b8e..61a88c89 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/logs/logs.service.ts.ejs @@ -17,20 +17,21 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +import { LoggersResponse, Level } from './log.model'; @Injectable({providedIn: 'root'}) export class LogsService { constructor(private http: HttpClient) { } - changeLevel(name: string, configuredLevel: string): Observable> { - return this.http.post(SERVER_API_URL + 'management/loggers/' + name, {configuredLevel}, { observe: 'response' }); + changeLevel(name: string, configuredLevel: Level): Observable<{}> { + return this.http.post(SERVER_API_URL + 'management/loggers/' + name, {configuredLevel}); } - findAll(): Observable> { - return this.http.get(SERVER_API_URL + 'management/loggers', { observe: 'response' }); + findAll(): Observable { + return this.http.get(SERVER_API_URL + 'management/loggers'); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs index 8718f837..61ede6f4 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.html.ejs @@ -25,13 +25,13 @@

JVM Metrics

-
+
- +
-
+

Garbage collector statistics

@@ -47,28 +47,26 @@
Updating...
-
- - + + -
diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs index 1b2a16c8..8a8c7a0b 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.component.ts.ejs @@ -16,49 +16,50 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import {Component, OnInit} from '@angular/core'; -import {NgbModal} from '@ng-bootstrap/ng-bootstrap'; +import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; +import { flatMap } from 'rxjs/operators'; -import { <%=jhiPrefixCapitalized%>MetricsService } from './metrics.service'; +import { MetricsService, Metrics, MetricsKey, ThreadDump, Thread } from './metrics.service'; @Component({ selector: '<%= jhiPrefixDashed %>-metrics', - templateUrl: './metrics.component.html' + templateUrl: './metrics.component.html', + changeDetection: ChangeDetectionStrategy.OnPush }) -export class <%=jhiPrefixCapitalized%>MetricsMonitoringComponent implements OnInit { - metrics: any = {}; - threadData: any = {}; +export class MetricsComponent implements OnInit { + metrics?: Metrics; + threads?: Thread[]; updatingMetrics = true; - JCACHE_KEY: string; - constructor( - private modalService: NgbModal, - private metricsService: <%=jhiPrefixCapitalized%>MetricsService - ) { - this.JCACHE_KEY = 'jcache.statistics'; - } + constructor(private metricsService: MetricsService, private changeDetector: ChangeDetectorRef) {} - ngOnInit() { + ngOnInit(): void { this.refresh(); } - refresh() { + refresh(): void { this.updatingMetrics = true; - this.metricsService.getMetrics().subscribe(metrics => { - this.metrics = metrics; - this.metricsService.threadDump().subscribe(data => { - this.threadData = data.threads; - this.updatingMetrics = false; - }); - }); + this.metricsService + .getMetrics() + .pipe( + flatMap( + () => this.metricsService.threadDump(), + (metrics: Metrics, threadDump: ThreadDump) => { + this.metrics = metrics; + this.threads = threadDump.threads; + this.updatingMetrics = false; + this.changeDetector.detectChanges(); + } + ) + ) + .subscribe(); } - isObjectExisting(metrics: any, key: string) { - return metrics && metrics[key]; + metricsKeyExists(key: MetricsKey): boolean { + return this.metrics && this.metrics[key]; } - - isObjectExistingAndNotEmpty(metrics: any, key: string) { - return this.isObjectExisting(metrics, key) && JSON.stringify(metrics[key]) !== '{}'; + + metricsKeyExistsAndObjectNotEmpty(key: MetricsKey): boolean { + return this.metrics && this.metrics[key] && JSON.stringify(this.metrics[key]) !== '{}'; } - } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.module.ts.ejs new file mode 100644 index 00000000..79ad2289 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { MetricsComponent } from './metrics.component'; + +import { metricsRoute } from './metrics.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([metricsRoute]) + ], + declarations: [MetricsComponent] +}) +export class MetricsModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.route.ts.ejs index 2f52ac55..06e5bcb4 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.route.ts.ejs @@ -18,11 +18,11 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>MetricsMonitoringComponent } from './metrics.component'; +import { MetricsComponent } from './metrics.component'; export const metricsRoute: Route = { - path: '<%= jhiPrefixDashed %>-metrics', - component: <%=jhiPrefixCapitalized%>MetricsMonitoringComponent, + path: '', + component: MetricsComponent, data: { pageTitle: 'metrics.title' } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.service.ts.ejs index 8fc5f7ee..2e179963 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/metrics/metrics.service.ts.ejs @@ -22,16 +22,21 @@ import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +export type MetricsKey = 'jvm' | 'http.server.requests' | 'cache' | 'services' | 'databases' | 'garbageCollector' | 'processMetrics'; +export type Metrics = { [key in MetricsKey]: any }; +export type Thread = any; +export type ThreadDump = { threads: Thread[] }; + @Injectable({providedIn: 'root'}) -export class <%=jhiPrefixCapitalized%>MetricsService { +export class MetricsService { constructor(private http: HttpClient) {} - getMetrics(): Observable { - return this.http.get(SERVER_API_URL + 'management/jhimetrics'); + getMetrics(): Observable { + return this.http.get(SERVER_API_URL + 'management/jhimetrics'); } - threadDump(): Observable { - return this.http.get(SERVER_API_URL + 'management/threaddump'); + threadDump(): Observable { + return this.http.get(SERVER_API_URL + 'management/threaddump'); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.html.ejs index 8b0e1442..0fb47bba 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.html.ejs @@ -20,14 +20,14 @@

Real-time user activities

-
NameLevelNameLevel
+
- - - - - + + + + + diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs index b4d25783..5bc3e572 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.component.ts.ejs @@ -17,23 +17,25 @@ limitations under the License. -%> import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Subscription } from 'rxjs'; -import { <%=jhiPrefixCapitalized%>TrackerService } from 'app/core'; +import { TrackerService } from 'app/core/tracker/tracker.service'; +import { TrackerActivity } from 'app/core/tracker/tracker-activity.model'; @Component({ selector: '<%= jhiPrefixDashed %>-tracker', templateUrl: './tracker.component.html' }) -export class <%=jhiPrefixCapitalized%>TrackerComponent implements OnInit, OnDestroy { - - activities: any[] = []; +export class TrackerComponent implements OnInit, OnDestroy { + activities: TrackerActivity[] = []; + subscription?: Subscription; constructor( - private trackerService: <%=jhiPrefixCapitalized%>TrackerService + private trackerService: TrackerService ) { } - showActivity(activity: any) { + showActivity(activity: TrackerActivity): void { let existingActivity = false; for (let index = 0; index < this.activities.length; index++) { if (this.activities[index].sessionId === activity.sessionId) { @@ -50,14 +52,17 @@ export class <%=jhiPrefixCapitalized%>TrackerComponent implements OnInit, OnDest } } - ngOnInit() { + ngOnInit(): void { this.trackerService.subscribe(); - this.trackerService.receive().subscribe((activity) => { + this.subscription = this.trackerService.receive().subscribe((activity: TrackerActivity) => { this.showActivity(activity); }); } - ngOnDestroy() { + ngOnDestroy(): void { this.trackerService.unsubscribe(); + if (this.subscription) { + this.subscription.unsubscribe(); + } } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.module.ts.ejs new file mode 100644 index 00000000..4906e13d --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.module.ts.ejs @@ -0,0 +1,16 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; + +import { TrackerComponent } from './tracker.component'; + +import { trackerRoute } from './tracker.route'; + +@NgModule({ + imports: [ + <%=angularXAppName%>SharedModule, + RouterModule.forChild([trackerRoute]) + ], + declarations: [TrackerComponent] +}) +export class TrackerModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.route.ts.ejs index c01b7f53..9401a481 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/tracker/tracker.route.ts.ejs @@ -18,11 +18,11 @@ -%> import { Route } from '@angular/router'; -import { <%=jhiPrefixCapitalized%>TrackerComponent } from './tracker.component'; +import { TrackerComponent } from './tracker.component'; export const trackerRoute: Route = { - path: '<%= jhiPrefixDashed %>-tracker', - component: <%=jhiPrefixCapitalized%>TrackerComponent, + path: '', + component: TrackerComponent, data: { pageTitle: 'tracker.title' } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-detail.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-detail.component.ts.ejs index 080c8a88..2ab3d550 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-detail.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-detail.component.ts.ejs @@ -16,26 +16,25 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { User } from 'app/core'; +import { User } from 'app/core/user/user.model'; @Component({ selector: '<%= jhiPrefixDashed %>-user-mgmt-detail', templateUrl: './user-management-detail.component.html' }) -export class UserMgmtDetailComponent implements OnInit { - - user: User; +export class UserManagementDetailComponent implements OnInit { + user: User | null = null; constructor( private route: ActivatedRoute ) {} - ngOnInit() { + ngOnInit(): void { this.route.data.subscribe(({user}) => { - this.user = user.body ? user.body : user; + this.user = user; }); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.html.ejs index 464e45ed..aef2b41c 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.html.ejs @@ -22,7 +22,7 @@

Create or edit a User

-
+
@@ -33,20 +33,20 @@ -
+
+ *ngIf="editForm.get('login')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. This field cannot be longer than 50 characters. + *ngIf="editForm.get('login')?.errors?.pattern" jhiTranslate="entity.validation.patternLogin"> This field can only contain letters, digits and e-mail addresses.
@@ -56,9 +56,9 @@ -
+
This field cannot be longer than 50 characters. @@ -69,9 +69,9 @@ -
+
This field cannot be longer than 50 characters. @@ -81,33 +81,34 @@ -
+
+ *ngIf="editForm.get('email')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. This field cannot be longer than 100 characters. This field is required to be at least 5 characters. + *ngIf="editForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid.
@@ -127,7 +128,7 @@
-
+
diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.ts.ejs index a0a42648..174ee8fc 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management-update.component.ts.ejs @@ -17,58 +17,72 @@ limitations under the License. -%> import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; -import { <% if (enableTranslation) { %>JhiLanguageHelper,<% } %> User, UserService } from 'app/core'; +<%_ if (enableTranslation) { _%> +import { LANGUAGES } from 'app/core/language/language.constants'; +<%_ } _%> +import { User } from 'app/core/user/user.model'; +import { UserService } from 'app/core/user/user.service'; @Component({ selector: '<%= jhiPrefixDashed %>-user-mgmt-update', templateUrl: './user-management-update.component.html' }) -export class UserMgmtUpdateComponent implements OnInit { - - user: User; - languages: any[]; - authorities: any[]; - isSaving: boolean; +export class UserManagementUpdateComponent implements OnInit { + user!: User; + <%_ if (enableTranslation) { _%> + languages = LANGUAGES; + <%_ } _%> + authorities: string[] = []; + isSaving = false; editForm = this.fb.group({ - id: [null], + id: [], login: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(50), Validators.pattern('^[_.@A-Za-z0-9-]*')]], firstName: ['', [Validators.maxLength(50)]], lastName: ['', [Validators.maxLength(50)]], email: ['', [Validators.minLength(5), Validators.maxLength(254), Validators.email]], - activated: [true], + activated: [], langKey: [], authorities: [] }); constructor( - <%_ if (enableTranslation) { _%> - private languageHelper: JhiLanguageHelper, - <%_ } _%> private userService: UserService, private route: ActivatedRoute, - private router: Router, private fb: FormBuilder ) {} - ngOnInit() { - this.isSaving = false; + ngOnInit(): void { this.route.data.subscribe(({user}) => { - this.user = user.body ? user.body : user; - this.updateForm(this.user); + if (user) { + this.user = user; + if (this.user.id === undefined) { + this.user.activated = true; + } + this.updateForm(user); + } }); - this.authorities = []; this.userService.authorities().subscribe((authorities) => { this.authorities = authorities; }); - <%_ if (enableTranslation) { _%> - this.languageHelper.getAll().then((languages) => { - this.languages = languages; - }); - <%_ } _%> + } + + previousState(): void { + window.history.back(); + } + + save(): void { + this.isSaving = true; + this.updateUser(this.user); + if (this.user.id !== undefined) { + this.userService.update(this.user).subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + } else {<% if (!enableTranslation) { %> + this.user.langKey = 'en';<% } %> + this.userService.create(this.user).subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + } } private updateForm(user: User): void { @@ -84,37 +98,22 @@ export class UserMgmtUpdateComponent implements OnInit { }); } - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - this.updateUser(this.user); - if (this.user.id !== null) { - this.userService.update(this.user).subscribe((response) => this.onSaveSuccess(response), () => this.onSaveError()); - } else {<% if (!enableTranslation) { %> - this.user.langKey = 'en';<% } %> - this.userService.create(this.user).subscribe((response) => this.onSaveSuccess(response), () => this.onSaveError()); - } - } - private updateUser(user: User): void { - user.login = this.editForm.get(['login']).value; - user.firstName = this.editForm.get(['firstName']).value; - user.lastName = this.editForm.get(['lastName']).value; - user.email = this.editForm.get(['email']).value; - user.activated = this.editForm.get(['activated']).value; - user.langKey = this.editForm.get(['langKey']).value; - user.authorities = this.editForm.get(['authorities']).value; + user.login = this.editForm.get(['login'])!.value; + user.firstName = this.editForm.get(['firstName'])!.value; + user.lastName = this.editForm.get(['lastName'])!.value; + user.email = this.editForm.get(['email'])!.value; + user.activated = this.editForm.get(['activated'])!.value; + user.langKey = this.editForm.get(['langKey'])!.value; + user.authorities = this.editForm.get(['authorities'])!.value; } - private onSaveSuccess(result) { + private onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - private onSaveError() { + private onSaveError(): void { this.isSaving = false; } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.html.ejs index 76562056..49c68730 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.html.ejs @@ -30,15 +30,15 @@ pSortableColumn="email"<% } %>>Email<% if (databaseType !== 'cassandra') { %><% } %>
<%_ if (enableTranslation) { _%> - pSortableColumn="langKey"<% } %>> Lang Key<% if (databaseType !== 'cassandra') { %><% } %> + <%_ } _%> - + <%_ if (databaseType !== 'cassandra') { _%> <%_ } _%> - + @@ -50,7 +50,7 @@ + [disabled]="!currentAccount || currentAccount.login === user.login" [label]="'userManagement.activated' | translate"> <% if (enableTranslation) { %><% } %> <%_ } else { _%> <%_ if (dto === 'no') { _%> <%_ } else { _%> <%_ relationships[idx].pkData.forEach(pk => { _%> <%_ }) _%> @@ -215,12 +217,14 @@ + <%_ if (!readOnly) { _%> + <%_ } _%> diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs index 198785a1..a10bcfc8 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.component.ts.ejs @@ -27,22 +27,22 @@ import { Subscription } from 'rxjs'; import { filter<% if (pagination !== 'no') { %>, tap, switchMap<% } else { %>, map<% } %> } from 'rxjs/operators'; import { JhiEventManager<% if (fieldsContainBlob) { %>, JhiDataUtils<% } %> } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; +import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model'; <%_ -let enumOptions = ''; if ( jpaMetamodelFiltering) { - const enumsAlreadyDeclared = []; + const enumOptions = []; fields.forEach(field => { - if (field.fieldIsEnum && !enumsAlreadyDeclared.includes(field.fieldType)) { - enumsAlreadyDeclared.push(field.fieldType); - field.fieldTypeUnderscoreCapitalized = _.snakeCase(field.fieldType).toUpperCase(); - enumOptions = fields.filter(f => f.fieldIsEnum).map(f => f.fieldTypeUnderscoreCapitalized + '_ARRAY').join(', '); + if (field.fieldIsEnum && !enumOptions.includes(field.fieldType)) { + enumOptions.push(field.fieldType); } }); -} _%> -import { I<%= entityAngularName %><%= enumOptions ? ', ' + enumOptions : '' %> } from 'app/shared/model/<%= entityModelFileName %>.model'; + enumOptions.forEach(e => { _%> +import { <%= e %>, <%= _.snakeCase(e).toUpperCase() %>_ARRAY } from 'app/shared/model/enumerations/<%= _.kebabCase(e) %>.model'; + <%_ }); _%> +<%_ } _%> import { <%= entityAngularName %>Service } from './<%= entityFileName %>.service'; <%_ if (pagination !== 'no') { _%> -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; <%_ } _%> import { computeFilterMatchMode<% if (pagination !== 'no' || relationships.some(r => r.inList && r.pagination !== null)) { %>, lazyLoadEventToServerQueryParams<% } %><% if (pagination !== 'no') {%>, lazyLoadEventToRouterQueryParams, fillTableFromQueryParams<% } %> } from 'app/shared/util/request-util'; import { ConfirmationService<%_ if (pagination !== 'no' || relationships.some(r => r.inList && r.pagination !== null)) { _%>, LazyLoadEvent<% } %> } from 'primeng/api'; @@ -55,7 +55,7 @@ import { TranslateService } from '@ngx-translate/core'; <%_ if(!alreadyImported.has(pk.entity.name)) { _%> <%_ alreadyImported.add(pk.entity.name); _%> import { I<%= pk.entity.angularName %> } from 'app/shared/model/<%= pk.entity.modelName %>.model'; -import { <%= pk.entity.angularName%>Service } from 'app/entities/<%= pk.entity.path %>'; +import { <%= pk.entity.angularName%>Service } from 'app/entities/<%= pk.entity.path %>/<%= pk.entity.fileName %>.service'; <%_ } _%> <%_ }) _%> <%_ } _%> @@ -71,30 +71,30 @@ import { DatePipe } from '@angular/common'; templateUrl: './<%= entityFileName %>.component.html' }) export class <%= entityAngularName %>Component implements OnInit, OnDestroy { - <%= entityInstancePlural %>: I<%= entityAngularName %>[]; - eventSubscriber: Subscription; + <%= entityInstancePlural %>?: I<%= entityAngularName %>[]; + eventSubscriber?: Subscription; <%_ if (jpaMetamodelFiltering) { for (idx in fields) { if(['LocalDate', 'Instant', 'ZonedDateTime'].includes(fields[idx].fieldType)){ _%> <%_ if (pagination !== 'no') { _%> - <%= fields[idx].fieldName %>Range: Date[]; + <%= fields[idx].fieldName %>Range?: Date[]; <%_ } _%> <%_ } else if(fields[idx].fieldIsEnum) {_%> - <%= fields[idx].fieldName %>Options = <%= fields[idx].fieldTypeUnderscoreCapitalized %>_ARRAY.map(s => ({ label: s.toString(), value: s })); + <%= fields[idx].fieldName %>Options = <%= _.snakeCase(fields[idx].fieldType).toUpperCase() %>_ARRAY.map((s: <%=fields[idx].fieldType%>) => ({ label: s.toString(), value: s })); <%_ } _%> <%_ } _%> <%_ for (idx in relationships) { _%> <%_ if (relationships[idx].inList) { _%> <%_ relationships[idx].pkData.forEach(pk => { _%> - <%= pk.formName %>Options: I<%= pk.entityName %>[]; + <%= pk.formName %>Options: I<%= pk.entityName %>[] | null = null; <%_ }) _%> <%_ } _%> <%_ } %> <%_ } _%> <%_ if (pagination !== 'no') { _%> - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; <%_ } _%> private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { @@ -102,11 +102,11 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { if (fields[idx].fieldIsEnum) { _%> <%= fields[idx].fieldName %>: {matchMode: 'in'}, <%_ } else if (['LocalDate', 'Instant', 'ZonedDateTime'].includes(fields[idx].fieldType)) { _%> - <%= fields[idx].fieldName %>: {matchMode: 'between', flatten: a => a.filter(x => x).join(','), unflatten: a => a.split(',') }, + <%= fields[idx].fieldName %>: {matchMode: 'between', flatten: a => a.filter((x: string) => x).join(','), unflatten: (a: string) => a.split(',') }, <%_ } else if (fields[idx].fieldType === 'Boolean') { _%> - <%= fields[idx].fieldName %>: {matchMode: 'equals', unflatten: x => x === 'true'}, + <%= fields[idx].fieldName %>: {matchMode: 'equals', unflatten: (x: string) => x === 'true'}, <%_ } else if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal', 'Duration'].includes(fields[idx].fieldType)) { _%> - <%= fields[idx].fieldName %>: {matchMode: 'equals', unflatten: x => +x}, + <%= fields[idx].fieldName %>: {matchMode: 'equals', unflatten: (x: string) => +x}, <%_ } _%> <%_ } _%> <%_ for ( idx in relationships ) { _%> @@ -119,7 +119,7 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { }; @ViewChild('<%= entityInstance %>Table', { static: true }) - <%= entityInstance %>Table: Table; + <%= entityInstance %>Table!: Table; constructor( protected <%= entityInstance %>Service: <%= entityAngularName %>Service, @@ -145,7 +145,9 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { protected router: Router, <%_ } _%> protected eventManager: JhiEventManager, +<%_ if (!readOnly) { _%> protected confirmationService: ConfirmationService, +<%_ } _%> protected translateService: TranslateService, <%_ if(jpaMetamodelFiltering && fields.some(f => f.fieldType === 'LocalDate' )){ _%> protected datePipe: DatePipe, @@ -161,7 +163,7 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { <%_ } _%> } - ngOnInit() { + ngOnInit(): void { <%_ if (pagination === 'no') { %> this.loadAll(); <%_ } _%> @@ -181,7 +183,7 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { <%_ for ( idx in fields ) { if (['LocalDate', 'Instant', 'ZonedDateTime'].includes(fields[idx].fieldType)) { _%> tap(() => this.<%= fields[idx].fieldName %>Range = this.<%= entityInstance %>Table.filters.<%= fields[idx].fieldName %> && this.<%= entityInstance %>Table.filters.<%= fields[idx].fieldName %>.value && - this.<%= entityInstance %>Table.filters.<%= fields[idx].fieldName %>.value.map(x => new Date(x))), + this.<%= entityInstance %>Table.filters.<%= fields[idx].fieldName %>.value.map((x: string) => new Date(x))), <%_ } _%> <%_ } _%> tap(() => this.loading = true), @@ -199,7 +201,7 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { filter((res: HttpResponse[]>) => res.ok) ).subscribe( (res: HttpResponse[]>) => { - this.paginate<%= entityClassPlural %>(res.body, res.headers); + this.paginate<%= entityClassPlural %>(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -210,12 +212,14 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { <%_ } _%> } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } <%_ if (pagination === 'no') { _%> - loadAll() { + loadAll(): void { <%_ if (searchEngine === 'elasticsearch') { _%> if (this.currentSearch) { this.<%= entityInstance %>Service.search({ @@ -232,10 +236,10 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { <%_ } _%> this.<%= entityInstance %>Service.query().pipe( filter((res: HttpResponse[]>) => res.ok), - map((res: HttpResponse[]>) => res.body), + map((res: HttpResponse[]>) => res.body!), ).subscribe( - (res: I<%= entityAngularName %>[]) => { - this.<%= entityInstancePlural %> = res; + (<%= entityInstancePlural %>: I<%= entityAngularName %>[]) => { + this.<%= entityInstancePlural %> = <%= entityInstancePlural %>; <%_ if (searchEngine === 'elasticsearch') { _%> this.currentSearch = ''; <%_ } _%> @@ -244,17 +248,18 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { ); } <%_ } else { _%> - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/<%= entityUrl %>'], { queryParams }); } <%_ } _%> - filter(value, field) { + filter(value: any, field: string): void { this.<%= entityInstance %>Table.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } +<%_ if (!readOnly) { _%> - delete(<%= pkData.map(pk => `${pk.name}: ${pk.tsType}`).join(', ') %>) { + delete(<%= pkData.map(pk => `${pk.name}: ${pk.tsType}`).join(', ') %>): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.<%= entityInstance %>.delete.question', { id<%- isAutoIncrement ? '' : ': ' + pkData.map(pk => pk.name).join(" + ',' + ") %> }), @@ -268,20 +273,21 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { } }); } +<%_ } _%> <%_ if(jpaMetamodelFiltering){ _%> <%_ for (idx in relationships) { _%> <%_ if (relationships[idx].inList) { _%> <%_ relationships[idx].pkData.forEach(pk => { _%> <%_ if (relationships[idx].pagination == 'no') { _%> - loadAll<%= _.upperFirst(pluralize(pk.formName)) %>() { + loadAll<%= _.upperFirst(pluralize(pk.formName)) %>(): void { this.<%= _.lowerFirst(pk.entity.name) %>Service.query() .subscribe(res => this.<%= pk.formName %>Options = res.body); } <%_ } else {_%> - on<%= _.upperFirst(pk.formName) %>LazyLoadEvent(event: LazyLoadEvent) { - this.<%= _.lowerFirst(pk.entity.name) %>Service.query(lazyLoadEventToServerQueryParams(event || {}, '<%= pk.otherEntityField %>.contains')) + on<%= _.upperFirst(pk.formName) %>LazyLoadEvent(event: LazyLoadEvent): void { + this.<%= _.lowerFirst(pk.entity.name) %>Service.query(lazyLoadEventToServerQueryParams(event, '<%= pk.otherEntityField %>.contains')) .subscribe(res => this.<%= pk.formName %>Options = res.body); } <%_ } _%> @@ -290,17 +296,17 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { <%_ } _%> <%_ } _%> - trackId(index: number, item: I<%= entityAngularName %>) { - return <%- pkData.map(pk => `item.${pk.name}`).join(" + ',' + ") %>; + trackId(index: number, item: I<%= entityAngularName %>): string { + return <% if (pkType !== 'string') { %>'' + <% } %><%- pkData.map(pk => `item.${pk.name}`).join(" + ',' + ") %>; } <%_ if (fieldsContainBlob) { _%> - byteSize(field) { + byteSize(field: string): string { return this.dataUtils.byteSize(field); } - openFile(contentType, field) { - return this.dataUtils.openFile(contentType, field); + openFile(contentType: string, field: string): void { + this.dataUtils.openFile(contentType, field); } <%_ } _%> <%_ @@ -309,37 +315,37 @@ export class <%= entityAngularName %>Component implements OnInit, OnDestroy { eventCallBack = "this.router.navigate(['/" + entityUrl + "'], {queryParams: {r: Date.now()}})"; } _%> - registerChangeIn<%= entityClassPlural %>() { - this.eventSubscriber = this.eventManager.subscribe('<%= entityInstance %>ListModification', (response) => + registerChangeIn<%= entityClassPlural %>(): void { + this.eventSubscriber = this.eventManager.subscribe('<%= entityInstance %>ListModification', () => <%- eventCallBack %> ); } <%_ if (pagination !== 'no') { _%> <%_ if (pagination === 'pagination' || pagination === 'pager') { _%> - protected paginate<%= entityClassPlural %>(data: I<%= entityAngularName %>[], headers: HttpHeaders) { + protected paginate<%= entityClassPlural %>(data: I<%= entityAngularName %>[], headers: HttpHeaders): void { <%_ if (databaseType !== 'cassandra') { _%> - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + this.totalItems = Number(headers.get('X-Total-Count')); <%_ } _%> this.<%= entityInstancePlural %> = data; } <%_ } else if (pagination === 'infinite-scroll') { _%> - protected paginate<%= entityClassPlural %>(data: I<%= entityAngularName %>[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginate<%= entityClassPlural %>(data: I<%= entityAngularName %>[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); for (let i = 0; i < data.length; i++) { this.<%= entityInstancePlural %>.push(data[i]); } } <%_ }} _%> - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({severity:'error', summary: errorMessage}); } <%_ if(pagination !== 'no' && jpaMetamodelFiltering && fields.some(f => ['LocalDate', 'Instant', 'ZonedDateTime'].includes(f.fieldType) )){ _%> - onDateSelect(dateRange: Date[], column: string, time = false) { - const dateToString = time ? (x => x && x.toISOString()) : (x => x && this.datePipe.transform(x, 'yyyy-MM-dd')); + onDateSelect(dateRange: Date[], column: string, time = false): void { + const dateToString = time ? ((x: Date) => x && x.toISOString()) : ((x: Date) => x && this.datePipe.transform(x, 'yyyy-MM-dd')); if (dateRange) { this.filter(dateRange.map(dateToString), column); } else { diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs index 11130ef4..8f16a32d 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.module.ts.ejs @@ -16,52 +16,29 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -<%_ if (enableTranslation) { _%> -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -<%_ } _%> - -import { <%= angularXAppName %>SharedModule } from 'app/shared'; -import { - <%= entityAngularName %>Component, - <%= entityAngularName %>DetailComponent, - <%= entityAngularName %>UpdateComponent, - <%= entityInstance %>Route -} from './'; -const ENTITY_STATES = [ - ...<%= entityInstance %>Route, -]; +import { <%= angularXAppName %>SharedModule } from 'app/shared/shared.module'; +import { <%= entityAngularName %>Component } from './<%= entityFileName %>.component'; +import { <%= entityAngularName %>DetailComponent } from './<%= entityFileName %>-detail.component'; +<%_ if (!readOnly) { _%> +import { <%= entityAngularName %>UpdateComponent } from './<%= entityFileName %>-update.component'; +<%_ } _%> +import { <%= entityInstance %>Route } from './<%= entityFileName %>.route'; @NgModule({ imports: [ <%= angularXAppName %>SharedModule, - RouterModule.forChild(ENTITY_STATES) + RouterModule.forChild(<%= entityInstance %>Route) ], declarations: [ <%= entityAngularName %>Component, <%= entityAngularName %>DetailComponent, + <%_ if (!readOnly) { _%> <%= entityAngularName %>UpdateComponent, - ], - entryComponents: [ - <%= entityAngularName %>Component, - <%= entityAngularName %>UpdateComponent, - ], - <%_ if (enableTranslation) { _%> - providers: [ { provide: JhiLanguageService, useClass: JhiLanguageService } ], - <%_ } _%> - schemas: [CUSTOM_ELEMENTS_SCHEMA] + <%_ } %> + ] }) export class <%= locals.microserviceName ? upperFirstCamelCase(locals.microserviceName) : angularXAppName %><%= entityAngularName %>Module { - <%_ if (enableTranslation) { _%> - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } - <%_ } _%> } diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs index c601da59..c20174c6 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management.route.ts.ejs @@ -18,30 +18,36 @@ -%> import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model'; import { <%= entityAngularName %>Service } from './<%= entityFileName %>.service'; import { <%= entityAngularName %>Component } from './<%= entityFileName %>.component'; import { <%= entityAngularName %>DetailComponent } from './<%= entityFileName %>-detail.component'; +<%_ if (!readOnly) { _%> import { <%= entityAngularName %>UpdateComponent } from './<%= entityFileName %>-update.component'; -import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model'; +<%_ } _%> @Injectable({providedIn: 'root'}) -export class <%= entityAngularName %>Resolve implements Resolve> { - - constructor(private service: <%= entityAngularName %>Service) { - } +export class <%= entityAngularName %>Resolve implements Resolve | null> { + constructor(private service: <%= entityAngularName %>Service, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable> { + resolve(route: ActivatedRouteSnapshot): Observable | null> { <%_ pkData.forEach(pk => { _%> const <%= pk.name %> = route.params['<%= pk.name %>'] ? route.params['<%= pk.name %>'] : null; <%_ }) _%> if (<%- pkData.map(pk => pk.name).join(' && ') %>) { return this.service.find(<%- pkData.map(pk => pk.name).join(', ') %>).pipe( - filter((response: HttpResponse>) => response.ok), - map((<%= entityInstance %>: HttpResponse>) => <%= entityInstance %>.body) + flatMap((<%= entityInstance %>: HttpResponse>) => { + if (<%= entityInstance %>.body) { + return of(<%= entityInstance %>.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); @@ -70,6 +76,7 @@ export const <%= entityInstance %>Route: Routes = [ }, canActivate: [UserRouteAccessService] }, + <%_ if (!readOnly) { _%> { path: 'new', component: <%= entityAngularName %>UpdateComponent, @@ -94,4 +101,5 @@ export const <%= entityInstance %>Route: Routes = [ }, canActivate: [UserRouteAccessService] }, + <%_ } _%> ]; diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs index 441d34d8..9cffe7d0 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.model.ts.ejs @@ -20,31 +20,15 @@ const variablesWithTypes = tsVariables.map(v => `${v.name}?: ${v.type}`); const typeImports = generateEntityClientImports(relationships, dto); const defaultVariablesValues = generateEntityClientFieldDefaultValues(fields); +const enumImports = generateEntityClientEnumImports(fields); %> <%_ typeImports.forEach( (importedPath, importedType) => { _%> import { <%- importedType %> } from '<%- importedPath %>'; <%_ }); _%> +<%_ enumImports.forEach( (importedPath, importedType) => { _%> +import { <%- importedType %> } from '<%- importedPath %>'; +<%_ }); _%> -<%_ const enumsAlreadyDeclared = []; -fields.forEach(field => { - if (field.fieldIsEnum && !enumsAlreadyDeclared.includes(field.fieldType)) { - field.fieldTypeUnderscoreCapitalized = _.snakeCase(field.fieldType).toUpperCase(); - enumsAlreadyDeclared.push(field.fieldType); _%> -export const enum <%= field.fieldType %> {<% - const enums = field.fieldValues.split(','); - for (let i = 0; i < enums.length; i++) { %> - <%= enums[i] %> = '<%= enums[i] %>'<%if (i < enums.length - 1) { %>,<% } - } %> -} - -export const <%= field.fieldTypeUnderscoreCapitalized %>_ARRAY = [<% - for (let i = 0; i < enums.length; i++) { %> - <%= field.fieldType %>.<%= enums[i] %><%if (i < enums.length - 1) { %>,<% } - } %> -]; - -<%_ } -}); _%> export interface I<%= entityAngularName %> { <%_ variablesWithTypes.forEach(variablesWithType => { _%> <%- variablesWithType %>; diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs index 18d825bb..76d3ec9d 100644 --- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs @@ -16,18 +16,25 @@ See the License for the specific language governing permissions and limitations under the License. -%> +<%_ +const tsKeyType = getTypescriptKeyType(getPkTypeBasedOnDBAndAssociation(authenticationType, databaseType, relationships)); +let searchType = 'Search'; +if (pagination === 'pagination' || pagination === 'infinite-scroll') { + searchType = 'SearchWithPagination'; +} +_%> import { Injectable } from '@angular/core'; import { HttpClient, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; <%_ if (fieldsContainDate) { _%> +import { map } from 'rxjs/operators'; <%_ if (fieldsContainLocalDate) { _%> import { DatePipe } from '@angular/common'; import { DATE_FORMAT } from 'app/shared/constants/input.constants'; <%_ } _%> -import { map } from 'rxjs/operators'; <%_ } _%> import { SERVER_API_URL } from 'app/app.constants'; -import { createRequestOption } from 'app/shared/util/request-util'; +import { createRequestOption<% if (searchEngine === 'elasticsearch') { %>, <%= searchType %><% } %> } from 'app/shared/util/request-util'; import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model'; type EntityResponseType = HttpResponse>; @@ -43,6 +50,7 @@ export class <%= entityAngularName %>Service { constructor(protected http: HttpClient<% if (fieldsContainLocalDate) { %>, protected datePipe: DatePipe<% } %>) { } +<%_ if (!readOnly) { _%> create(<%= entityInstance %>: I<%= entityAngularName %>): Observable { <%_ if (fieldsContainDate) { _%> const copy = this.convertDateFromClient(<%= entityInstance %>); @@ -62,6 +70,7 @@ export class <%= entityAngularName %>Service { { observe: 'response' }) <% if (fieldsContainDate) { %>.pipe(map((res: EntityResponseType) => this.convertDateFromServer(res)))<% } %>; } +<%_ } _%> find(<%= pkData.map(pk => `${pk.name}: ${pk.tsType}`).join(', ') %>): Observable { return this.http.get>(`${this.resourceUrl}/<%-pkData.length === 1 ? '${'+pkData[0].name+'}' : pkData.map(pk => pk.name+'=${'+pk.name+'}').join(';')%>`, { observe: 'response'}) @@ -74,12 +83,14 @@ export class <%= entityAngularName %>Service { <% if (fieldsContainDate) { %>.pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res)))<% } %>; } +<%_ if (!readOnly) { _%> delete(<%= pkData.map(pk => `${pk.name}: ${pk.tsType}`).join(', ') %>): Observable> { return this.http.delete(`${this.resourceUrl}/<%-pkData.length === 1 ? '${'+pkData[0].name+'}' : pkData.map(pk => pk.name+'=${'+pk.name+'}').join(';')%>`, { observe: 'response'}); } +<%_ } _%> <%_ if (searchEngine === 'elasticsearch') { _%> - search(req?: any): Observable { + search(req: <%= searchType %>): Observable { const options = createRequestOption(req); return this.http.get[]>(this.resourceSearchUrl, { params: options, observe: 'response' }) <% if (fieldsContainDate) { %>.pipe(map((res: EntityArrayResponseType) => this.convertDateArrayFromServer(res)))<% } %>; @@ -91,10 +102,10 @@ export class <%= entityAngularName %>Service { const copy: I<%= entityAngularName %> = Object.assign({}, <%= entityInstance %>, { <%_ for (idx in fields) { _%> <%_ if ( ['Instant', 'ZonedDateTime'].includes(fields[idx].fieldType) ) { _%> - <%= fields[idx].fieldName %>: <%= entityInstance %>.<%= fields[idx].fieldName %> != null ? <%= entityInstance %>.<%= fields[idx].fieldName %>.toISOString() : null, + <%= fields[idx].fieldName %>: <%= entityInstance %>.<%= fields[idx].fieldName %> != null ? <%= entityInstance %>.<%= fields[idx].fieldName %>.toISOString() : undefined, <%_ } _%> <%_ if ( fields[idx].fieldType === 'LocalDate' ) { _%> - <%= fields[idx].fieldName %>: <%= entityInstance %>.<%= fields[idx].fieldName %> != null ? this.datePipe.transform(<%= entityInstance %>.<%= fields[idx].fieldName %>, DATE_FORMAT) : null, + <%= fields[idx].fieldName %>: <%= entityInstance %>.<%= fields[idx].fieldName %> != null ? this.datePipe.transform(<%= entityInstance %>.<%= fields[idx].fieldName %>, DATE_FORMAT) : undefined, <%_ } _%> <%_ } _%> }); @@ -105,7 +116,7 @@ export class <%= entityAngularName %>Service { if (res.body) { <%_ for (idx in fields) { _%> <%_ if ( ['Instant', 'ZonedDateTime', 'LocalDate'].includes(fields[idx].fieldType) ) { _%> - res.body.<%= fields[idx].fieldName %> = res.body.<%= fields[idx].fieldName %> != null ? new Date(res.body.<%= fields[idx].fieldName %>) : null; + res.body.<%= fields[idx].fieldName %> = res.body.<%= fields[idx].fieldName %> ? new Date(res.body.<%= fields[idx].fieldName %>) : undefined; <%_ } _%> <%_ } _%> } @@ -117,7 +128,7 @@ export class <%= entityAngularName %>Service { res.body.forEach ((<%= entityInstance %>: I<%= entityAngularName %>) => { <%_ for (idx in fields) { _%> <%_ if ( ['Instant', 'ZonedDateTime', 'LocalDate'].includes(fields[idx].fieldType) ) { _%> - <%= entityInstance %>.<%= fields[idx].fieldName %> = <%= entityInstance %>.<%= fields[idx].fieldName %> != null ? new Date(<%= entityInstance %>.<%= fields[idx].fieldName %>) : null; + <%= entityInstance %>.<%= fields[idx].fieldName %> = <%= entityInstance %>.<%= fields[idx].fieldName %> ? new Date(<%= entityInstance %>.<%= fields[idx].fieldName %>) : undefined; <%_ } _%> <%_ } _%> }); diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/enumerations/enum.model.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/enumerations/enum.model.ts.ejs new file mode 100644 index 00000000..db90b417 --- /dev/null +++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/enumerations/enum.model.ts.ejs @@ -0,0 +1,33 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> +export const enum <%= enumName %> { +<% enumsWithCustomValue.forEach((enumWithCustomValue, index) => { %> +<% if (!enumWithCustomValue.value) { %> + <%= enumWithCustomValue.name %> +<% } else {%> + <%= enumWithCustomValue.name %> = '<%= enumWithCustomValue.value %>' +<% } %><% if (index < enumsWithCustomValue.length - 1) { %>,<% } %> +<%}); %> +} + +export const <%= _.snakeCase(enumName).toUpperCase() %>_ARRAY = [ +<%_ enumsWithCustomValue.forEach((enumWithCustomValue, index) => { _%> + <%= enumName %>.<%= enumWithCustomValue.name %><% if (index < enumsWithCustomValue.length - 1) { %>,<% } %> +<%_ }); _%> +]; diff --git a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity-page-object.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity-page-object.ts.ejs index 59915411..7b09c14d 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity-page-object.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity-page-object.ts.ejs @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { browser, ExpectedConditions as ec, element, by, ElementFinder } from 'protractor'; +import { browser, ExpectedConditions as ec, element, by<% if (!readOnly) { %>, ElementFinder<% } %> } from 'protractor'; <%_ let elementGetter = `getText()`; @@ -33,27 +33,32 @@ for (let relationship of relationships) { } } _%> export class <%= entityClass %>ComponentsPage { + <%_ if (!readOnly) { _%> createButton = element(by.id('jh-create-entity')); deleteButtons = element.all(by.css('<%= jhiPrefixDashed %>-<%= entityFileName %> div table .ui-button-danger')); + <%_ } _%> title = element.all(by.css('<%= jhiPrefixDashed %>-<%= entityFileName %> div h2#page-heading span')).first(); - async clickOnCreateButton(timeout?: number) { +<%_ if (!readOnly) { _%> + async clickOnCreateButton(): Promise { await this.createButton.click(); } - async clickOnLastDeleteButton(timeout?: number) { + async clickOnLastDeleteButton(): Promise { await this.deleteButtons.last().click(); } - async countDeleteButtons() { + async countDeleteButtons(): Promise { return this.deleteButtons.count(); } +<%_ } _%> - async getTitle() { + async getTitle(): Promise { return this.title.<%- elementGetter %>; } } +<%_ if (!readOnly) { _%> export class <%= entityClass %>UpdatePage { pageTitle = element(by.id('<%= jhiPrefixDashed %>-<%= entityFileName %>-heading')); saveButton = element(by.id('save-entity')); @@ -88,7 +93,7 @@ export class <%= entityClass %>UpdatePage { <%_ } _%> <%_ }); _%> - async getPageTitle() { + async getPageTitle(): Promise { return this.pageTitle.<%- elementGetter %>; } @@ -103,12 +108,12 @@ export class <%= entityClass %>UpdatePage { let ngModelOption = ''; _%> <%_ if (fieldType === 'Boolean') { _%> - get<%= fieldNameCapitalized %>Input(timeout?: number) { + get<%= fieldNameCapitalized %>Input(): ElementFinder { return this.<%= fieldName %>Input; } <%_ } else if (fieldIsEnum) { _%> - async <%=fieldName %>SelectLastOption(timeout?: number) { + async <%=fieldName %>SelectLastOption(): Promise { await this.<%= fieldName %>Select.click(); await this.<%= fieldName %>Select .all(by.tagName('.ui-dropdown-item')) @@ -117,45 +122,45 @@ export class <%= entityClass %>UpdatePage { await browser.wait(ec.invisibilityOf(this.<%= fieldName %>Select.element(by.css('.ui-dropdown-panel'))), 5000); } - async get<%=fieldNameCapitalized %>Select() { + async get<%=fieldNameCapitalized %>Select(): Promise { return await this.<%= fieldName %>Select.element(by.css('.ui-dropdown-label')).getText(); } <%_ } else if (['LocalDate', 'Instant', 'ZonedDateTime'].includes(fieldType)) { _%> - async set<%= fieldNameCapitalized %>Input(<%= fieldName %>) { + async set<%= fieldNameCapitalized %>Input(<%= fieldName %>: string): Promise { await this.<%= fieldName %>Input.element(by.css('.ui-inputtext')).sendKeys(<%= fieldName %>); await this.<%= fieldName %>Input.element(by.tagName('.ui-calendar-button')).click(); await browser.wait(ec.invisibilityOf(this.<%= fieldName %>Input.element(by.css('.ui-datepicker'))), 5000); } - async get<%= fieldNameCapitalized %>Input() { + async get<%= fieldNameCapitalized %>Input(): Promise { return await this.<%= fieldName %>Input.element(by.css('.ui-inputtext')).getAttribute('value'); } <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType) && fieldTypeBlobContent === 'text') { _%> - async set<%= fieldNameCapitalized %>Input(<%= fieldName %>) { + async set<%= fieldNameCapitalized %>Input(<%= fieldName %>: string): Promise { await this.<%= fieldName %>Input.sendKeys(<%= fieldName %>); } - async get<%= fieldNameCapitalized %>Input() { + async get<%= fieldNameCapitalized %>Input(): Promise { return await this.<%= fieldName %>Input.getAttribute('value'); } <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { _%> - async set<%= fieldNameCapitalized %>Input(<%= fieldName %>) { + async set<%= fieldNameCapitalized %>Input(<%= fieldName %>: string): Promise { await this.<%= fieldName %>Input.element(by.css('input[type="file"]')).sendKeys(<%= fieldName %>); } - async get<%= fieldNameCapitalized %>Input() { + async get<%= fieldNameCapitalized %>Input(): Promise { return await this.<%= fieldName %>Input.all(by.css('.ui-fileupload-row > div')).get(1).getText(); } <%_ } else { _%> - async set<%= fieldNameCapitalized %>Input(<%= fieldName %>) { + async set<%= fieldNameCapitalized %>Input(<%= fieldName %>: string): Promise { await this.<%= fieldName %>Input.sendKeys(<%= fieldName %>); } - async get<%= fieldNameCapitalized %>Input() { + async get<%= fieldNameCapitalized %>Input(): Promise { return await this.<%= fieldName %>Input.getAttribute('value'); } @@ -169,7 +174,7 @@ export class <%= entityClass %>UpdatePage { const relationshipNameCapitalized = relationship.relationshipNameCapitalized; _%> <%_ if (((relationshipType === 'many-to-one') || (relationshipType === 'one-to-one' && ownerSide === true)) && dto === 'no') { _%> - async <%=relationshipName %>SelectLastOption(timeout?: number) { + async <%=relationshipName %>SelectLastOption(): Promise { await this.<%= relationshipName %>Select.click(); await this.<%= relationshipName %>Select .all(by.tagName('.ui-dropdown-item')) @@ -182,13 +187,13 @@ export class <%= entityClass %>UpdatePage { return this.<%=relationshipName %>Select; } - async get<%=relationshipNameCapitalized %>SelectedOption() { + async get<%=relationshipNameCapitalized %>SelectedOption(): Promise { return await this.<%= relationshipName %>Select.element(by.css('.ui-dropdown-label')).getText(); } <%_ } else if(((relationshipType === 'many-to-one') || (relationshipType === 'one-to-one' && ownerSide === true)) && dto !== 'no') { _%> <%_ relationship.pkData.forEach(pk => { _%> - async <%= pk.formName %>SelectLastOption(timeout?: number) { + async <%= pk.formName %>SelectLastOption(): Promise { await this.<%= pk.formName %>Select.click(); await this.<%= pk.formName %>Select .all(by.tagName('.ui-dropdown-item')) @@ -201,13 +206,13 @@ export class <%= entityClass %>UpdatePage { return this.<%= pk.formName %>Select; } - async get<%= _.upperFirst(pk.formName) %>SelectedOption() { + async get<%= _.upperFirst(pk.formName) %>SelectedOption(): Promise { return await this.<%= pk.formName %>Select.element(by.css('.ui-dropdown-label')).getText(); } <%_ }) _%> <%_ } else if (relationshipType === 'many-to-many' && ownerSide === true) {_%> - async <%=relationshipName %>SelectLastOption(timeout?: number) { + async <%=relationshipName %>SelectLastOption(): Promise { await this.<%= relationshipName %>Select.click(); await this.<%= relationshipName %>Select .all(by.tagName('.ui-multiselect-item')) @@ -221,16 +226,16 @@ export class <%= entityClass %>UpdatePage { return this.<%=relationshipName %>Select; } - async get<%=relationshipNameCapitalized %>SelectedOption() { + async get<%=relationshipNameCapitalized %>SelectedOption(): Promise { return await this.<%= relationshipName %>Select.element(by.css('.ui-multiselect-label')).getText(); } <%_ } _%> <%_ }); _%> - async save(timeout?: number) { + async save(): Promise { await this.saveButton.click(); } - async cancel(timeout?: number) { + async cancel(): Promise { await this.cancelButton.click(); } @@ -242,7 +247,8 @@ export class <%= entityClass %>UpdatePage { export class <%= entityClass %>DeleteDialog { private confirmButton = element(by.css('p-confirmdialog .ui-dialog-footer button:first-of-type')); - async clickOnConfirmButton(timeout?: number) { + async clickOnConfirmButton(): Promise { await this.confirmButton.click(); } } +<%_ } _%> diff --git a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs index 57293fc8..2561121e 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs @@ -16,14 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. -%> -/* tslint:disable no-unused-expression */ -import { browser, by, ExpectedConditions as ec<% if ( fieldsContainInstant || fieldsContainZonedDateTime ) { %>, protractor<% } %> } from 'protractor'; -import { NavBarPage, SignInPage } from '../../<%= entityParentPathAddition %>page-objects/jhi-page-objects'; - -import { <%= entityClass %>ComponentsPage, <%= entityClass %>DeleteDialog, <%= entityClass %>UpdatePage } from './<%= entityFileName %>.page-object'; -<%_ if (fieldsContainBlobOrImage) { _%> -import * as path from 'path'; -<%_ } _%> <%_ let elementGetter = `getText()`; let openBlockComment = ``; @@ -33,11 +25,23 @@ if (enableTranslation) { } for (let relationship of relationships) { if (relationship.relationshipRequired || relationship.useJPADerivedIdentifier) { - openBlockComment = `/*`; - closeBlockComment = `*/`; + openBlockComment = `/* `; + closeBlockComment = ` */`; break; } } _%> +import { browser, by, ExpectedConditions as ec <% if (!readOnly) { %><%= openBlockComment %><% if ( fieldsContainInstant || fieldsContainZonedDateTime ) { %>, protractor<% } %>, promise<%= closeBlockComment %><% } %> } from 'protractor'; +import { NavBarPage, SignInPage } from '../../<%= entityParentPathAddition %>page-objects/jhi-page-objects'; + +import { <%= entityClass %>ComponentsPage, + <%_ if (!readOnly) { _%> + <%= openBlockComment %><%= entityClass %>DeleteDialog, + <%= closeBlockComment %> <%= entityClass %>UpdatePage + <%_ } _%> +} from './<%= entityFileName %>.page-object'; +<%_ if (fieldsContainBlobOrImage) { _%> +import * as path from 'path'; +<%_ } _%> const expect = chai.expect; @@ -45,9 +49,11 @@ describe('<%= entityClass %> e2e test', () => { let navBarPage: NavBarPage; let signInPage: SignInPage; - let <%= entityInstance %>UpdatePage: <%= entityClass %>UpdatePage; let <%= entityInstance %>ComponentsPage: <%= entityClass %>ComponentsPage; + <%_ if (!readOnly) { _%> + let <%= entityInstance %>UpdatePage: <%= entityClass %>UpdatePage; <%= openBlockComment %>let <%= entityInstance %>DeleteDialog: <%= entityClass %>DeleteDialog;<%= closeBlockComment %> + <%_ } _%> <%_ if (fieldsContainBlobOrImage) { _%> const fileNameToUpload = 'logo-jhipster.png'; const fileToUpload = '../../../../../../<%= entityParentPathAddition %><%= CLIENT_MAIN_SRC_DIR %>content/images/' + fileNameToUpload; @@ -79,6 +85,7 @@ describe('<%= entityClass %> e2e test', () => { <%_ } _%> }); +<%_ if (!readOnly) { _%> it('should load create <%= entityClass %> page', async () => { await <%= entityInstance %>ComponentsPage.clickOnCreateButton(); <%= entityInstance %>UpdatePage = new <%= entityClass %>UpdatePage(); @@ -102,8 +109,9 @@ describe('<%= entityClass %> e2e test', () => { const fieldType = field.fieldType; const fieldTypeBlobContent = field.fieldTypeBlobContent; const fieldIsEnum = field.fieldIsEnum; - if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%> - await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('5'); + const fieldValidateSampleString = field.fieldValidateSampleString; + if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { // using 9999999 in case if id, to be added at the end, so delete test deletes this one_%> + await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('9999999'); <%_ } else if (fieldType === 'LocalDate') { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('12/31/2000'); <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%> @@ -117,7 +125,9 @@ describe('<%= entityClass %> e2e test', () => { <%_ } else if (fieldIsEnum) { _%> await <%= entityInstance %>UpdatePage.<%=fieldName %>SelectLastOption(); <%_ } else if (fieldType === 'UUID'){ _%> - await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('64c99148-3908-465d-8c4a-e510e3ade974'); + await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('64c99148-3908-465d-8c4a-e510e3ade974'), + <%_ } else if (fieldType === 'String' && fieldValidateSampleString) { _%> + await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldValidateSampleString %>'), <%_ } else if (fieldType !== 'Boolean') { _%> await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>'); <%_ } _%> @@ -145,14 +155,17 @@ describe('<%= entityClass %> e2e test', () => { const fieldType = field.fieldType; const fieldTypeBlobContent = field.fieldTypeBlobContent; const fieldIsEnum = field.fieldIsEnum; + const fieldValidateSampleString = field.fieldValidateSampleString; if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%> - expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('5', 'Expected <%=fieldName%> value to be equals to 5'); + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('9999999', 'Expected <%=fieldName%> value to be equals to 9999999'); <%_ } else if (fieldType === 'LocalDate') { _%> expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('12/31/2000', 'Expected <%=fieldName%> value to be equals to 12/31/2000'); <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%> expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('01/01/2001 02:30', 'Expected <%=fieldName%> value to be equals to 01/01/2001 02:30'); <%_ } else if (fieldType === 'Duration') { _%> expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('12', 'Expected <%=fieldName%> value to be equals to 12'); + <%_ } else if (fieldType === 'String' && fieldValidateSampleString) { _%> + expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('<%= fieldValidateSampleString %>', 'Expected <%=fieldNameCapitalized%> value to be equals to <%= fieldValidateSampleString %>'); <%_ } else if (fieldType === 'Boolean') { _%> const selected<%= fieldNameCapitalized %> = <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input(); if (await selected<%= fieldNameCapitalized %>.element(by.css('input[type="checkbox"]')).isSelected()) { @@ -187,6 +200,7 @@ describe('<%= entityClass %> e2e test', () => { expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeDelete - 1); });<%= closeBlockComment %> +<%_ } _%> after(async () => { await navBarPage.autoSignOut(); diff --git a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-detail.component.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-detail.component.spec.ts.ejs index 9aed9742..a864c21d 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-detail.component.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-detail.component.spec.ts.ejs @@ -19,10 +19,12 @@ <%_ const tsKeyId = pkData.map(pk => pk.field.tsTestValue).join(', '); _%> -/* tslint:disable max-line-length */ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ActivatedRoute } from '@angular/router'; import { of } from 'rxjs'; +<%_ if (fieldsContainBlob) { _%> +import { JhiDataUtils } from 'ng-jhipster'; +<%_ } _%> import { <%=angularXAppName%>TestModule } from '../../../<%= entityParentPathAddition %>test.module'; import { <%= entityAngularName %>DetailComponent } from 'app/entities/<%= entityFolderName %>/<%= entityFileName %>-detail.component'; @@ -33,6 +35,9 @@ describe('Component Tests', () => { describe('<%= entityAngularName %> Management Detail Component', () => { let comp: <%= entityAngularName %>DetailComponent; let fixture: ComponentFixture<<%= entityAngularName %>DetailComponent>; + <%_ if (fieldsContainBlob) { _%> + let dataUtils: JhiDataUtils; + <%_ } _%> const route = ({data: of({<%= entityInstance %>: new <%= entityAngularName %>(<%- tsKeyId %>)})} as any) as ActivatedRoute; beforeEach(() => { @@ -47,12 +52,13 @@ describe('Component Tests', () => { .compileComponents(); fixture = TestBed.createComponent(<%= entityAngularName %>DetailComponent); comp = fixture.componentInstance; + <%_ if (fieldsContainBlob) { _%> + dataUtils = fixture.debugElement.injector.get(JhiDataUtils); + <%_ } _%> }); describe('OnInit', () => { - it('Should call load all on init', () => { - // GIVEN - + it('Should load <%= entityInstance %> on init', () => { // WHEN comp.ngOnInit(); @@ -60,6 +66,37 @@ describe('Component Tests', () => { expect(comp.<%= entityInstance %>).toEqual(jasmine.objectContaining({<%- pkData.map(pk => `${pk.name}: ${pk.field.tsTestValue}`).join(', ') %>})); }); }); + <%_ if (fieldsContainBlob) { _%> + + describe('byteSize', () => { + it('Should call byteSize from JhiDataUtils', () => { + // GIVEN + spyOn(dataUtils, 'byteSize'); + const fakeBase64 = 'fake base64'; + + // WHEN + comp.byteSize(fakeBase64); + + // THEN + expect(dataUtils.byteSize).toBeCalledWith(fakeBase64); + }); + }); + + describe('openFile', () => { + it('Should call openFile from JhiDataUtils', () => { + // GIVEN + spyOn(dataUtils, 'openFile'); + const fakeContentType = 'fake content type'; + const fakeBase64 = 'fake base64'; + + // WHEN + comp.openFile(fakeContentType, fakeBase64); + + // THEN + expect(dataUtils.openFile).toBeCalledWith(fakeContentType, fakeBase64); + }); + }); + <%_ } _%> }); }); diff --git a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-update.component.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-update.component.spec.ts.ejs index ddba8c14..4452c6f9 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-update.component.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management-update.component.spec.ts.ejs @@ -19,11 +19,10 @@ <%_ const tsKeyId = pkData.map(pk => pk.field.tsTestValue).join(', '); _%> -/* tslint:disable max-line-length */ import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testing'; import { HttpResponse } from '@angular/common/http'; import { FormBuilder } from '@angular/forms'; -import { Observable, of } from 'rxjs'; +import { of } from 'rxjs'; import { <%=angularXAppName%>TestModule } from '../../../<%= entityParentPathAddition %>test.module'; import { <%= entityAngularName %>UpdateComponent } from 'app/entities/<%= entityFolderName %>/<%= entityFileName %>-update.component'; diff --git a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.component.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.component.spec.ts.ejs index 7a004fc4..aed0f470 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.component.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.component.spec.ts.ejs @@ -19,7 +19,6 @@ <%_ const tsKeyId = pkData.map(pk => pk.field.tsTestValue).join(', '); _%> -/* tslint:disable max-line-length */ import { ComponentFixture, TestBed, fakeAsync<%_ if (pagination !== 'no') { _%>, tick<%_ } _%> } from '@angular/core/testing'; import { of<%_ if (pagination !== 'no') { _%>, BehaviorSubject<%_ }_%> } from 'rxjs'; import { HttpResponse } from '@angular/common/http'; @@ -59,7 +58,7 @@ describe('Component Tests', () => { fixture = TestBed.createComponent(<%= entityAngularName %>Component); comp = fixture.componentInstance; <%_ if (pagination !== 'no') { _%> - comp.<%= entityInstance %>Table = new MockTable(); + comp.<%= entityInstance %>Table = new MockTable() as any; <%_ } _%> service = fixture.debugElement.injector.get(<%= entityAngularName %>Service); mockConfirmationService = fixture.debugElement.injector.get(ConfirmationService); @@ -80,7 +79,7 @@ describe('Component Tests', () => { // THEN expect(service.query).toHaveBeenCalled(); - expect(comp.<%= entityInstancePlural %>[0]).toEqual(jasmine.objectContaining({<%- pkData.map(pk => `${pk.name}: ${pk.field.tsTestValue}`).join(', ') %>})); + expect(comp.<%= entityInstancePlural %> && comp.<%= entityInstancePlural %>[0]).toEqual(jasmine.objectContaining({<%- pkData.map(pk => `${pk.name}: ${pk.field.tsTestValue}`).join(', ') %>})); })); <%_ if (pagination !== 'no') { _%> @@ -97,11 +96,11 @@ describe('Component Tests', () => { // WHEN fixture.detectChanges(); tick(100); - (>activatedRoute.queryParams).next({ first: 3}); + (activatedRoute.queryParams as BehaviorSubject).next({ first: 3}); // THEN expect(service.query).toHaveBeenCalled(); - expect(comp.<%= entityInstancePlural %>[0]).toEqual(jasmine.objectContaining({<%- pkData.map(pk => `${pk.name}: ${pk.field.tsTestValue}`).join(', ') %>})); + expect(comp.<%= entityInstancePlural %> && comp.<%= entityInstancePlural %>[0]).toEqual(jasmine.objectContaining({<%- pkData.map(pk => `${pk.name}: ${pk.field.tsTestValue}`).join(', ') %>})); })); <%_ } _%> diff --git a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.service.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.service.spec.ts.ejs index d68a0855..1501f0c9 100644 --- a/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.service.spec.ts.ejs +++ b/generators/entity-client/templates/angular/src/test/javascript/spec/app/entities/entity-management.service.spec.ts.ejs @@ -18,26 +18,20 @@ -%> <%_ const tsKeyId = pkData.map(pk => pk.field.tsTestValue).join(', '); +const enumImports = generateEntityClientEnumImports(fields); _%> -/* tslint:disable max-line-length */ import { TestBed, getTestBed } from '@angular/core/testing'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { of } from 'rxjs'; import { take, map } from 'rxjs/operators'; <%_ if (fieldsContainLocalDate) { _%> import { DATE_FORMAT } from 'app/shared/constants/input.constants'; import { DatePipe } from '@angular/common'; <%_ } _%> import { <%= entityAngularName %>Service } from 'app/entities/<%= entityFolderName %>/<%= entityFileName %>.service'; -import { I<%= entityAngularName %>, <%= entityAngularName %>, <%_ const enumsAlreadyDeclared = []; -fields.forEach(field => { -if (field.fieldIsEnum && !enumsAlreadyDeclared.includes(field.fieldType)) { - enumsAlreadyDeclared.push(field.fieldType); _%> -<%=field.fieldType%>, -<%_ } -}) _%> -} from 'app/shared/model/<%= entityModelFileName %>.model'; +import { I<%= entityAngularName %>, <%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model'; +<%_ enumImports.forEach( (importedPath, importedType) => { _%> +import { <%- importedType %> } from '<%- importedPath %>'; +<%_ }); _%> describe('Service Tests', () => { @@ -46,7 +40,7 @@ describe('Service Tests', () => { let service: <%= entityAngularName %>Service; let httpMock: HttpTestingController; let elemDefault: I<%= entityAngularName %>; - let expectedResult; + let expectedResult: I<%= entityAngularName %> | I<%= entityAngularName %>[] | boolean | null; <%_ if (fieldsContainDate) { _%> let currentDate: Date; <%_ if (fieldsContainLocalDate) { _%> @@ -60,7 +54,7 @@ describe('Service Tests', () => { providers: [DatePipe] <%_ } _%> }); - expectedResult = {}; + expectedResult = null; injector = getTestBed(); service = injector.get(<%= entityAngularName %>Service); httpMock = injector.get(HttpTestingController); @@ -75,7 +69,7 @@ describe('Service Tests', () => { }); describe('Service methods', () => { - it('should find an element', async () => { + it('should find an element', () => { const returnedFromService = Object.assign({ <%_ fields.forEach((field) => { const fieldType = field.fieldType; _%> @@ -88,16 +82,17 @@ describe('Service Tests', () => { }, elemDefault); service .find(<%- tsKeyId %>) - .pipe(take(1)).subscribe(resp => expectedResult = resp); + .pipe(take(1)).subscribe(resp => expectedResult = resp.body); const req = httpMock.expectOne({ method: 'GET' }); req.flush(returnedFromService); - expect(expectedResult).toMatchObject({body: elemDefault}); + expect(expectedResult).toMatchObject(elemDefault); }); - it('should create a <%= entityAngularName %>', async () => { + <%_ if (!readOnly) { _%> + it('should create a <%= entityAngularName %>', () => { const returnedFromService = Object.assign({ -<%_ if (pkType === 'String') { _%> +<%_ if (pkType === 'String' || pkType === 'UUID') { _%> id: 'ID', <%_ } else { _%> id: 0, @@ -122,14 +117,14 @@ describe('Service Tests', () => { <%_ }) _%> }, returnedFromService); service - .create(new <%= entityAngularName %>(null)) - .pipe(take(1)).subscribe(resp => expectedResult = resp); + .create(new <%= entityAngularName %>()) + .pipe(take(1)).subscribe(resp => expectedResult = resp.body); const req = httpMock.expectOne({ method: 'POST' }); req.flush(returnedFromService); - expect(expectedResult).toMatchObject({body: expected}); + expect(expectedResult).toMatchObject(expected); }); - it('should update a <%= entityAngularName %>', async () => { + it('should update a <%= entityAngularName %>', () => { const returnedFromService = Object.assign({ <%_ fields.forEach((field) => { const fieldType = field.fieldType; _%> @@ -161,13 +156,14 @@ describe('Service Tests', () => { }, returnedFromService); service .update(expected) - .pipe(take(1)).subscribe(resp => expectedResult = resp); + .pipe(take(1)).subscribe(resp => expectedResult = resp.body); const req = httpMock.expectOne({ method: 'PUT' }); req.flush(returnedFromService); - expect(expectedResult).toMatchObject({body: expected}); + expect(expectedResult).toMatchObject(expected); }); + <%_ } _%> - it('should return a list of <%= entityAngularName %>', async () => { + it('should return a list of <%= entityAngularName %>', () => { const returnedFromService = Object.assign({ <%_ fields.forEach((field) => { const fieldType = field.fieldType; _%> @@ -197,7 +193,7 @@ describe('Service Tests', () => { <%_ }) _%> }, returnedFromService); service - .query(expected) + .query() .pipe( take(1), map(resp => resp.body) @@ -208,14 +204,15 @@ describe('Service Tests', () => { expect(expectedResult).toContainEqual(expected); }); - it('should delete a <%= entityAngularName %>', async () => { - const rxPromise = service - .delete(<%- tsKeyId %>).subscribe(resp => expectedResult = resp.ok); + <%_ if (!readOnly) { _%> + it('should delete a <%= entityAngularName %>', () => { + service.delete(<%- tsKeyId %>).subscribe(resp => expectedResult = resp.ok); const req = httpMock.expectOne({ method: 'DELETE' }); req.flush({ status: 200 }); expect(expectedResult); }); + <%_ } _%> }); afterEach(() => { diff --git a/generators/entity-i18n/index.js b/generators/entity-i18n/index.js index 6f9c739e..fb1dc20a 100644 --- a/generators/entity-i18n/index.js +++ b/generators/entity-i18n/index.js @@ -1,4 +1,5 @@ /* eslint-disable consistent-return */ +const chalk = require('chalk'); const EntityI18nGenerator = require('generator-jhipster/generators/entity-i18n'); const writeFiles = require('./files').writeFiles; @@ -6,14 +7,14 @@ module.exports = class extends EntityI18nGenerator { constructor(args, opts) { super(args, Object.assign({ fromBlueprint: true }, opts)); // fromBlueprint variable is important - //TODO issue to report to jhipster + // TODO issue to report to jhipster // super overrides this this.options with this.options.context.options losing the refernce of options // thankfully we can retreive it from the opts param // MAYBE we should do another check for blueprint in the if below const jhContext = (this.jhipsterContext = opts.jhipsterContext); // TODO check with jhispter team what this is supposed to do: - //- in case of EntityClientGenerator options doesn't contain jhipsterContext + // - in case of EntityClientGenerator options doesn't contain jhipsterContext if (!jhContext) { this.error( @@ -66,7 +67,7 @@ module.exports = class extends EntityI18nGenerator { const phaseFromJHipster = super._writing(); const customPhaseSteps = { writeClientFiles() { - //override the writeClientFiles method from the _writing phase of JHipster + // override the writeClientFiles method from the _writing phase of JHipster writeFiles().writeClientFiles.call(this); } }; diff --git a/generators/entity-i18n/templates/i18n/entity_es.json.ejs b/generators/entity-i18n/templates/i18n/entity_es.json.ejs index a3ac0cd2..42c0937c 100644 --- a/generators/entity-i18n/templates/i18n/entity_es.json.ejs +++ b/generators/entity-i18n/templates/i18n/entity_es.json.ejs @@ -24,8 +24,8 @@ let helpBlocks = 0; %> "title": "<%= entityClassPluralHumanized %>", "createLabel": "Crear nuevo <%= entityClassHumanized %>", "createOrEditLabel": "Crear o editar <%= entityClassHumanized %>"<% if (searchEngine === 'elasticsearch') { %>, - "search": "Search for <%= entityClassHumanized %>"<% } %>, - "notFound": "No <%= entityClassPluralHumanized %> found" + "search": "Buscar <%= entityClassHumanized %>"<% } %>, + "notFound": "Ningún <%= entityClassPluralHumanized %> encontrado" },<% if (!microserviceAppName) { %> "created": "Un nuevo <%= entityClassHumanized %> ha sido creado con el identificador {{ param }}", "updated": "Un <%= entityClassHumanized %> ha sido actualizado con el identificador {{ param }}", diff --git a/generators/entity-i18n/templates/i18n/entity_pt-pt.json.ejs b/generators/entity-i18n/templates/i18n/entity_pt-pt.json.ejs index a3f3b5ad..4991778c 100644 --- a/generators/entity-i18n/templates/i18n/entity_pt-pt.json.ejs +++ b/generators/entity-i18n/templates/i18n/entity_pt-pt.json.ejs @@ -22,14 +22,14 @@ let helpBlocks = 0; %> "<%= entityTranslationKey %>" : { "home": { "title": "<%= entityClassPluralHumanized %>", - "createLabel": "Criar um(a) novo(a) <%= entityClassHumanized %>", - "createOrEditLabel": "Criar ou editar um(a) <%= entityClassHumanized %>"<% if (searchEngine === 'elasticsearch') { %>, - "search": "Search for <%= entityClassHumanized %>"<% } %>, - "notFound": "No <%= entityClassPluralHumanized %> found" + "createLabel": "Criar novo(a) <%= entityClassHumanized %>", + "createOrEditLabel": "Criar ou editar <%= entityClassHumanized %>"<% if (searchEngine === 'elasticsearch') { %>, + "search": "Procurar por <%= entityClassHumanized %>"<% } %>, + "notFound": "Nenhum <%= entityClassPluralHumanized %> encontrado" },<% if (!microserviceAppName) { %> - "created": "A new <%= entityClassHumanized %> is created with identifier {{ param }}", - "updated": "A <%= entityClassHumanized %> is updated with identifier {{ param }}", - "deleted": "A <%= entityClassHumanized %> is deleted with identifier {{ param }}",<% } %> + "created": "Um novo <%= entityClassHumanized %> foi criado com o identificador {{ param }}", + "updated": "<%= entityClassHumanized %> com identificador {{ param }} foi actualizado", + "deleted": "<%= entityClassHumanized %> com identificador {{ param }} foi eliminado",<% } %> "delete": { "question": "Tem a certeza que pretende eliminar o(a) <%= entityClassHumanized %> {{ id }}?" }, @@ -50,9 +50,9 @@ let helpBlocks = 0; %> }<% if (microserviceAppName) { %>, "<%= microserviceAppName %>": { "<%= entityTranslationKey %>" : { - "created": "A new <%= entityClassHumanized %> is created with identifier {{ param }}", - "updated": "A <%= entityClassHumanized %> is updated with identifier {{ param }}", - "deleted": "A <%= entityClassHumanized %> is deleted with identifier {{ param }}" + "created": "Um novo <%= entityClassHumanized %> foi criado com o identificador {{ param }}", + "updated": "<%= entityClassHumanized %> com identificador {{ param }} foi actualizado", + "deleted": "<%= entityClassHumanized %> com identificador {{ param }} foi eliminado" } }<% } %> } diff --git a/package-lock.json b/package-lock.json index 9491cd85..c8f5f15d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,17 @@ { "name": "generator-jhipster-primeng-blueprint", - "version": "0.0.12", + "version": "0.0.16", "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/runtime": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.7.tgz", + "integrity": "sha512-uCnC2JEVAu8AKB5do1WRIsvrdJ0flYx/A/9f/6chdacnEZ7LmavjdsDXr5ksYBegxtuTPR5Va9/+13QF/kFkCA==", + "requires": { + "regenerator-runtime": "^0.13.2" + } + }, "@mrmlnc/readdir-enhanced": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", @@ -83,14 +91,14 @@ } }, "@types/node": { - "version": "10.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.0.tgz", - "integrity": "sha512-wuJwN2KV4tIRz1bu9vq5kSPasJ8IsEjZaP1ZR7KlmdUZvGF/rXy8DmXOVwUD0kAtvtJ7aqMKPqUXC0NUTDbrDg==" + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==" }, "@types/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-Jugo5V/1bS0fRhy2z8+cUAHEyWOATaz4rbyLVvcFs7+dXp5HfwpEwzF1Q11bB10ApUqHf+yTauxI0UXQDwGrbA==" + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.0.tgz", + "integrity": "sha512-c4zji5CjWv1tJxIZkz1oUtGcdOlsH3aza28Nqmm+uNDWBRHoMsjooBEN4czZp1V3iXPihE/VRUOBqg+4Xq0W4g==" }, "acorn": { "version": "7.0.0", @@ -338,6 +346,22 @@ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, + "aws-sdk": { + "version": "2.533.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.533.0.tgz", + "integrity": "sha512-OSe7C0jnBdgfzedOtK+TgBEwtJaaZovm+Q2fbqIlfhUWg3rhhkt3oLyQ9bRD30/CFaunLhLr/8HAAN+/x+DWAA==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -476,6 +500,11 @@ } } }, + "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==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -527,9 +556,9 @@ "dev": true }, "boolean": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/boolean/-/boolean-2.0.2.tgz", - "integrity": "sha512-ymsbJQlux/uogyEWfsXJUYzuyoOzPyp6NvEV71s6/ptQR7ptKO9uHF+WZL2GRATDeN52EFhNyrIu+exNZKh3Cw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.0.tgz", + "integrity": "sha512-OElxJ1lUSinuoUnkpOgLmxp0DC4ytEhODEL6QJU0NpxE/mI4rUSh8h1P1Wkvfi3xQEBcxXR2gBIPNYNuaFcAbQ==" }, "boxen": { "version": "1.3.0", @@ -587,6 +616,16 @@ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "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", @@ -750,6 +789,14 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chevrotain": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz", + "integrity": "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==", + "requires": { + "regexp-to-ast": "0.4.0" + } + }, "ci-info": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", @@ -810,6 +857,11 @@ "resolved": "https://registry.npmjs.org/cli-list/-/cli-list-0.2.0.tgz", "integrity": "sha1-fmc+4N05phGkhkduU/PGs5QctYI=" }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==" + }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -971,9 +1023,9 @@ "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==" }, "colorspace": { "version": "1.1.2", @@ -1069,9 +1121,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "core-js": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.3.4.tgz", - "integrity": "sha512-BtibooaAmSOptGLRccsuX/dqgPtXwNgqcvYA6kOTTMzonRxZ+pJS4e+6mvVutESfXMeTnK8m3M+aBu3bkJbR+w==" + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.3.tgz", + "integrity": "sha512-DOO9b18YHR+Wk5kJ/c5YFbXuUETreD4TrvXb6edzqZE3aAEd0eJIAWghZ9HttMuiON8SVCnU3fqA4rPxRDD1HQ==" }, "core-util-is": { "version": "1.0.2", @@ -1210,6 +1262,14 @@ "resolved": "https://registry.npmjs.org/default-uid/-/default-uid-1.0.0.tgz", "integrity": "sha1-/O+p359axAyJFtkS3R/hFGqjxZ4=" }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "^1.0.2" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -1437,9 +1497,9 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "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==", "requires": { "once": "^1.4.0" } @@ -1823,6 +1883,11 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + }, "execa": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", @@ -2028,9 +2093,9 @@ "dev": true }, "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" }, "fecha": { "version": "2.3.3", @@ -2265,7 +2330,8 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "functional-red-black-tree": { "version": "1.0.1", @@ -2286,10 +2352,11 @@ } }, "generator-jhipster": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-6.4.1.tgz", - "integrity": "sha512-TO/OLaH/cGz/Agag3WXCe774LEwJ//cxBd72AhZTmvCd1Y0TduSzx+KNIYJqWznGXV2qUyPSyobg6OzQ/43eMA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-6.6.0.tgz", + "integrity": "sha512-iaP48cv7wlDCr/Y1r3JqsVbElU3rahgQcTt/2nofTLiJYWUA8Q3xmXlqIhhas5ThFuZlkczKsVv6DtKAvaQArg==", "requires": { + "aws-sdk": "2.533.0", "axios": "0.19.0", "chalk": "2.4.2", "commander": "2.19.0", @@ -2300,23 +2367,25 @@ "glob": "7.1.3", "gulp-filter": "5.1.0", "insight": "0.10.1", - "jhipster-core": "5.0.0", + "jhipster-core": "6.0.5", "js-object-pretty-print": "0.3.0", "js-yaml": "3.13.1", "lodash": "4.17.13", "meow": "5.0.0", "mkdirp": "0.5.1", + "ora": "3.4.0", "os-locale": "3.1.0", "parse-gitignore": "1.0.1", "pluralize": "7.0.0", - "prettier": "1.16.4", + "prettier": "1.19.1", + "progress": "2.0.3", "randexp": "0.5.3", "semver": "5.6.0", "shelljs": "0.8.3", "sync-request": "6.0.0", "tabtab": "2.2.2", "through2": "3.0.1", - "uuid": "3.3.2", + "uuid": "3.3.3", "yeoman-environment": "2.3.4", "yeoman-generator": "3.2.0", "yo": "3.1.0" @@ -2327,20 +2396,6 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -2356,14 +2411,6 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "chevrotain": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.2.0.tgz", - "integrity": "sha512-wA/7Py7CrNWe4vgAkvA2S+mQcW7jIERkB/FWAexqsdIRPVvEXdu4T8f3XWI8EMMQtkb3sJo3DHmafy+gbCPzTQ==", - "requires": { - "regexp-to-ast": "0.4.0" - } - }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -2392,11 +2439,6 @@ "universalify": "^0.1.0" } }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -2410,38 +2452,6 @@ "path-is-absolute": "^1.0.0" } }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, "inquirer": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", @@ -2472,20 +2482,12 @@ } } }, - "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=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, "jhipster-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-5.0.0.tgz", - "integrity": "sha512-pAkFqICz0IU5jpWDUGN3KHiXWE/HFpp7vVz53M5w5XmjeBOCEln2kMigYBH9j6PLkr7txAzcfSIf57Tzx2QUWw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-6.0.5.tgz", + "integrity": "sha512-wajVDw31QbqqnVHryqh3EEnmNskKvm7ddGavRx9FcX1Kb+pMIv48y2KbNeYWDyG9HJeZKsrttMWAF7ma+BFTxA==", "requires": { - "chevrotain": "6.2.0", + "chevrotain": "6.5.0", "fs-extra": "8.1.0", "lodash": "4.17.15", "winston": "3.2.1" @@ -2507,25 +2509,6 @@ "esprima": "^4.0.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - } - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -2540,16 +2523,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" }, - "macos-release": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", - "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -2560,29 +2533,10 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "os-name": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", - "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", - "requires": { - "macos-release": "^2.2.0", - "windows-release": "^3.1.0" - } - }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - }, "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==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } @@ -2595,53 +2549,15 @@ "p-limit": "^2.0.0" } }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "requires": { - "p-finally": "^1.0.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==" }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "^4.1.2", - "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=" - } - } - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==" + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==" }, "randexp": { "version": "0.5.3", @@ -2661,28 +2577,10 @@ "read-pkg": "^3.0.0" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" - } - }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "requires": { "tslib": "^1.9.0" } @@ -2702,22 +2600,6 @@ "rechoir": "^0.6.2" } }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "^4.0.1" - } - }, "through2": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", @@ -2726,45 +2608,10 @@ "readable-stream": "2 || 3" } }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", - "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "yeoman-doctor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yeoman-doctor/-/yeoman-doctor-4.0.0.tgz", - "integrity": "sha512-CP0fwGk5Y+jel+A0AQbyqnIFZRRpkKOeYUibiTSmlgV9PcgNFFVwn86VcUIpDLOqVjF+9v+O9FWQMo+IUcV2mA==", - "requires": { - "ansi-styles": "^3.2.0", - "bin-version-check": "^3.0.0", - "chalk": "^2.3.0", - "global-agent": "^2.0.0", - "global-tunnel-ng": "^2.5.3", - "latest-version": "^3.1.0", - "log-symbols": "^2.1.0", - "semver": "^5.0.3", - "twig": "^1.10.5", - "user-home": "^2.0.0" - } + "uuid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "yeoman-environment": { "version": "2.3.4", @@ -2827,318 +2674,14 @@ "requires": { "ms": "^2.1.1" } - } - } - }, - "yo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yo/-/yo-3.1.0.tgz", - "integrity": "sha512-boSESRRyvfyns3DfzxF2F0LVV97wSEFbKUi1oC7RwnZTA66KZ7Bo3JjOLe7mM6IjjeI0vEZcr4BbFjrSHh8d0Q==", - "requires": { - "async": "^2.6.1", - "chalk": "^2.4.1", - "cli-list": "^0.2.0", - "configstore": "^3.1.2", - "cross-spawn": "^6.0.5", - "figures": "^2.0.0", - "fullname": "^3.2.0", - "global-agent": "^2.0.0", - "global-tunnel-ng": "^2.7.1", - "got": "^8.3.2", - "humanize-string": "^1.0.2", - "inquirer": "^6.0.0", - "insight": "^0.10.3", - "lodash": "^4.17.11", - "meow": "^3.0.0", - "npm-keyword": "^5.0.0", - "open": "^6.3.0", - "package-json": "^5.0.0", - "parse-help": "^1.0.0", - "read-pkg-up": "^4.0.0", - "root-check": "^1.0.0", - "sort-on": "^3.0.0", - "string-length": "^2.0.0", - "tabtab": "^1.3.2", - "titleize": "^1.0.1", - "update-notifier": "^2.5.0", - "user-home": "^2.0.0", - "yeoman-character": "^1.0.0", - "yeoman-doctor": "^4.0.0", - "yeoman-environment": "^2.4.0", - "yosay": "^2.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "^1.0.1" - } - }, - "conf": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", - "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==", - "requires": { - "dot-prop": "^4.1.0", - "env-paths": "^1.0.0", - "make-dir": "^1.0.0", - "pkg-up": "^2.0.0", - "write-file-atomic": "^2.3.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", - "requires": { - "extend": "^3.0.0", - "spawn-sync": "^1.0.15", - "tmp": "^0.0.29" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "insight": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz", - "integrity": "sha512-YOncxSN6Omh+1Oqxt+OJAvJVMDKw7l6IEG0wT2cTMGxjsTcroOGW4IR926QDzxg/uZHcFZ2cZbckDWdZhc2pZw==", - "requires": { - "async": "^2.6.2", - "chalk": "^2.4.2", - "conf": "^1.4.0", - "inquirer": "^6.3.1", - "lodash.debounce": "^4.0.8", - "os-name": "^3.1.0", - "request": "^2.88.0", - "tough-cookie": "^3.0.1", - "uuid": "^3.3.2" - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "dependencies": { - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^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=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "tabtab": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-1.3.2.tgz", - "integrity": "sha1-u5wspjJPZZ/edjTCyvPAluEYfKc=", - "requires": { - "debug": "^2.2.0", - "inquirer": "^1.0.2", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "npmlog": "^2.0.3", - "object-assign": "^4.1.0" - }, - "dependencies": { - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "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" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", - "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", - "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - } - } - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "requires": { - "os-tmpdir": "~1.0.1" - } - }, - "yeoman-environment": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.5.0.tgz", - "integrity": "sha512-RCxVKbSiW1o0l5C7dkGvG4BHmI4dfSA50pcBU9VQ2AOUErgGdCtfU+bLM6g7NV9iA2uxFGFYv6iJArhmWzRouA==", - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "diff": "^3.5.0", - "escape-string-regexp": "^1.0.2", - "globby": "^8.0.1", - "grouped-queue": "^0.3.3", - "inquirer": "^6.0.0", - "is-scoped": "^1.0.0", - "lodash": "^4.17.10", - "log-symbols": "^2.2.0", - "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "untildify": "^3.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } - } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + } } } } @@ -3242,15 +2785,15 @@ "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" }, "global-agent": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.5.tgz", - "integrity": "sha512-pYJjCxxNBzYxo6iNO62JZn8iCFVbvpiM0zE4w/G5hBNIvLjnvzIeCVQPMKc3aK8ju5L7Q8NNI/oBSosU0eeSYw==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.7.tgz", + "integrity": "sha512-ooK7eqGYZku+LgnbfH/Iv0RJ74XfhrBZDlke1QSzcBt0bw1PmJcnRADPAQuFE+R45pKKDTynAr25SBasY2kvow==", "requires": { - "boolean": "^2.0.2", - "core-js": "^3.3.3", + "boolean": "^3.0.0", + "core-js": "^3.4.1", "es6-error": "^4.1.1", "matcher": "^2.0.0", - "roarr": "^2.14.2", + "roarr": "^2.14.5", "semver": "^6.3.0", "serialize-error": "^5.0.0" }, @@ -3288,13 +2831,11 @@ "dev": true }, "globalthis": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.0.tgz", - "integrity": "sha512-vcCAZTJ3r5Qcu5l8/2oyVdoFwxKgfYnMTR2vwWeux/NAVZK3PwcMaWkdUIn4GJbmKuRK7xcvDsLuK+CKcXyodg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "object-keys": "^1.0.12" + "define-properties": "^1.1.3" } }, "globby": { @@ -3530,6 +3071,11 @@ "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==" + }, "ignore": { "version": "3.3.10", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", @@ -3679,9 +3225,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" }, "is-callable": { "version": "1.1.4", @@ -4015,6 +3561,11 @@ } } }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, "js-object-pretty-print": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/js-object-pretty-print/-/js-object-pretty-print-0.3.0.tgz", @@ -4388,9 +3939,9 @@ "dev": true }, "matcher": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.0.0.tgz", - "integrity": "sha512-nlmfSlgHBFx36j/Pl/KQPbIaqE8Zf0TqmSMjsuddHDg6PMSVgmyW9HpkLs0o0M1n2GIZ/S2BZBLIww/xjhiGng==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz", + "integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==", "requires": { "escape-string-regexp": "^2.0.0" }, @@ -4462,6 +4013,29 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + } + } + }, "vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", @@ -4965,6 +4539,44 @@ "wordwrap": "~1.0.0" } }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "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==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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==", + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -5372,8 +4984,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise": { "version": "8.0.3", @@ -5427,6 +5038,11 @@ "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=" + }, "quick-lru": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", @@ -5531,6 +5147,11 @@ "strip-indent": "^2.0.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==" + }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -5754,17 +5375,17 @@ "dev": true }, "rimraf": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.0.tgz", - "integrity": "sha512-4Liqw7ccABzsWV5BzeZeGRSq7KWIgQYzOcmRDEwSX4WAawlQpcAFXZ1Kid72XYrjSnK5yxOS6Gez/iGusYE/Pw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", "requires": { "glob": "^7.1.3" }, "dependencies": { "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5777,11 +5398,11 @@ } }, "roarr": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.2.tgz", - "integrity": "sha512-ibqv70DCUhGVMfPe0JSUHBZ9PKLhxdk8VJ/Y2M7vVr+L4VakW1CdVTU9cJQBbM2STQa84CgBAzd7hJGcnALGeg==", + "version": "2.14.6", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.6.tgz", + "integrity": "sha512-qjbw0BEesKA+3XFBPt+KVe1PC/Z6ShfJ4wPlx2XifqH5h2Lj8/KQT5XJTsy3n1Es5kai+BwKALaECW3F70B1cg==", "requires": { - "boolean": "^2.0.2", + "boolean": "^3.0.0", "detect-node": "^2.0.4", "globalthis": "^1.0.0", "json-stringify-safe": "^5.0.1", @@ -5857,6 +5478,11 @@ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", "dev": true }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, "scoped-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", @@ -5899,13 +5525,6 @@ "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", "requires": { "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" - } } }, "set-blocking": { @@ -6726,9 +6345,9 @@ }, "dependencies": { "@types/node": { - "version": "8.10.56", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.56.tgz", - "integrity": "sha512-5yWs9hy3UWdandOgvmmPCNJ3jI5/o8syatQWOmiAO/9/PptOQ+0O2ANKHltFhE4MGCt/QiVkoxQFUbeha9Yf4w==" + "version": "8.10.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", + "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==" } } }, @@ -6869,10 +6488,11 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "twig": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/twig/-/twig-1.13.3.tgz", - "integrity": "sha512-Kjart2102Kf0IdsEmLonSJKcByU7o9uiJhBde3GhrNHrX4XenT5WSKu4Hpkx+rF6Kyppeyd48BKsCREIOPXd/g==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/twig/-/twig-1.14.0.tgz", + "integrity": "sha512-ut1LslUKAeF56TYQglabJaATUqbNuGO3EcXDhUspAdNbxez5VwTk2n8H00V0VfNy9Scet+VGQP8oPxt4v6mykQ==", "requires": { + "@babel/runtime": "^7.6.3", "locutus": "^2.0.5", "minimatch": "3.0.x", "walk": "2.3.x" @@ -6893,6 +6513,11 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -7011,6 +6636,22 @@ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, + "url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", + "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=" + } + } + }, "url-parse-lax": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", @@ -7112,6 +6753,14 @@ "foreachasync": "^3.0.0" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "requires": { + "defaults": "^1.0.3" + } + }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7188,9 +6837,9 @@ } }, "with-open-file": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.6.tgz", - "integrity": "sha512-SQS05JekbtwQSgCYlBsZn/+m2gpn4zWsqpCYIrCHva0+ojXcnmUEPsBN6Ipoz3vmY/81k5PvYEWSxER2g4BTqA==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", "requires": { "p-finally": "^1.0.0", "p-try": "^2.1.0", @@ -7286,6 +6935,20 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=" }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" + } + }, + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" + }, "xmlcreate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz", @@ -7530,6 +7193,23 @@ } } }, + "yeoman-doctor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yeoman-doctor/-/yeoman-doctor-4.0.0.tgz", + "integrity": "sha512-CP0fwGk5Y+jel+A0AQbyqnIFZRRpkKOeYUibiTSmlgV9PcgNFFVwn86VcUIpDLOqVjF+9v+O9FWQMo+IUcV2mA==", + "requires": { + "ansi-styles": "^3.2.0", + "bin-version-check": "^3.0.0", + "chalk": "^2.3.0", + "global-agent": "^2.0.0", + "global-tunnel-ng": "^2.5.3", + "latest-version": "^3.1.0", + "log-symbols": "^2.1.0", + "semver": "^5.0.3", + "twig": "^1.10.5", + "user-home": "^2.0.0" + } + }, "yeoman-environment": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz", @@ -7654,6 +7334,29 @@ "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + } + } + }, "vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", @@ -7685,6 +7388,29 @@ "yeoman-generator": "^2.0.5" }, "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + }, + "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" + } + }, "sinon": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.1.1.tgz", @@ -7702,6 +7428,704 @@ } } }, + "yo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yo/-/yo-3.1.0.tgz", + "integrity": "sha512-boSESRRyvfyns3DfzxF2F0LVV97wSEFbKUi1oC7RwnZTA66KZ7Bo3JjOLe7mM6IjjeI0vEZcr4BbFjrSHh8d0Q==", + "requires": { + "async": "^2.6.1", + "chalk": "^2.4.1", + "cli-list": "^0.2.0", + "configstore": "^3.1.2", + "cross-spawn": "^6.0.5", + "figures": "^2.0.0", + "fullname": "^3.2.0", + "global-agent": "^2.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^8.3.2", + "humanize-string": "^1.0.2", + "inquirer": "^6.0.0", + "insight": "^0.10.3", + "lodash": "^4.17.11", + "meow": "^3.0.0", + "npm-keyword": "^5.0.0", + "open": "^6.3.0", + "package-json": "^5.0.0", + "parse-help": "^1.0.0", + "read-pkg-up": "^4.0.0", + "root-check": "^1.0.0", + "sort-on": "^3.0.0", + "string-length": "^2.0.0", + "tabtab": "^1.3.2", + "titleize": "^1.0.1", + "update-notifier": "^2.5.0", + "user-home": "^2.0.0", + "yeoman-character": "^1.0.0", + "yeoman-doctor": "^4.0.0", + "yeoman-environment": "^2.4.0", + "yosay": "^2.0.2" + }, + "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==" + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "conf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", + "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==", + "requires": { + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "inquirer": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz", + "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.12", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "insight": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz", + "integrity": "sha512-YOncxSN6Omh+1Oqxt+OJAvJVMDKw7l6IEG0wT2cTMGxjsTcroOGW4IR926QDzxg/uZHcFZ2cZbckDWdZhc2pZw==", + "requires": { + "async": "^2.6.2", + "chalk": "^2.4.2", + "conf": "^1.4.0", + "inquirer": "^6.3.1", + "lodash.debounce": "^4.0.8", + "os-name": "^3.1.0", + "request": "^2.88.0", + "tough-cookie": "^3.0.1", + "uuid": "^3.3.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "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=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "macos-release": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==" + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "requires": { + "p-finally": "^1.0.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==" + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "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=" + } + } + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "^3.0.0" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + } + }, + "rxjs": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", + "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "requires": { + "tslib": "^1.9.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==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "tabtab": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-1.3.2.tgz", + "integrity": "sha1-u5wspjJPZZ/edjTCyvPAluEYfKc=", + "requires": { + "debug": "^2.2.0", + "inquirer": "^1.0.2", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "npmlog": "^2.0.3", + "object-assign": "^4.1.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "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" + } + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "^1.0.1" + } + }, + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "requires": { + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "mute-stream": "0.0.6", + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "tough-cookie": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "requires": { + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "yeoman-environment": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.7.0.tgz", + "integrity": "sha512-YNzSUWgJVSgnm0qgLON4Gb2nTm+kywBiWjK4MbvosjUP2YJJ30lNhEx7ukyzKRPUlsavd5IsuALtF6QaVrq81A==", + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.5.0", + "escape-string-regexp": "^1.0.2", + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^6.0.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.2.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + } + } + }, "yosay": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/yosay/-/yosay-2.0.2.tgz", diff --git a/package.json b/package.json index e49db6d2..52b7e965 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ "dependencies": { "chalk": "2.4.1", "ejs": "2.6.1", + "faker": "^4.1.0", + "generator-jhipster": "6.6.0", "glob": "7.1.2", "gulp-filter": "5.1.0", "insight": "0.10.1", @@ -35,10 +37,10 @@ "pluralize": "7.0.0", "prettier": "1.13.5", "randexp": "0.4.9", + "rimraf": "^3.0.0", "semver": "5.5.0", "shelljs": "0.8.2", "through2": "2.0.3", - "generator-jhipster": ">=5.4.0", "yeoman-environment": "2.3.0", "yeoman-generator": "2.0.5" }, diff --git a/test/import-jdl.spec.js b/test/import-jdl.spec.js index 53e97e62..c62bd4ad 100644 --- a/test/import-jdl.spec.js +++ b/test/import-jdl.spec.js @@ -3,10 +3,9 @@ const fse = require('fs-extra'); const fs = require('fs'); const assert = require('yeoman-assert'); const helpers = require('yeoman-test'); -const shelljs = require('shelljs'); -const walker = require('./path-walker'); - +const rimraf = require('rimraf'); const importJdl = require('generator-jhipster/cli/import-jdl'); +const walker = require('./path-walker'); const noopFork = () => ({ on(code, cb) { @@ -14,22 +13,18 @@ const noopFork = () => ({ } }); -let testDir; +let testDir = '/tmp/primeng-blueprint-test'; describe('Subgenerator client of primeng-blueprint JHipster blueprint', () => { describe('Sample test', () => { before(done => { + rimraf.sync(testDir); helpers .run('generator-jhipster/generators/app') - .inTmpDir(dir => { + .inDir(testDir, dir => { // importJdl doesn't haev a call back there we call the generators manually after it updates the json files testDir = dir; fse.copySync(path.join(__dirname, '../test/templates/primeng-blueprint-test'), dir); - importJdl( - ['jhipster.jh'], - { skipInstall: true, noInsight: true, interactive: false, 'skip-git': false }, - {}, - noopFork - ) + importJdl(['jhipster.jh'], { skipInstall: true, noInsight: true, interactive: false, 'skip-git': false }, {}, noopFork); }) .withOptions({ 'from-cli': true, @@ -62,10 +57,7 @@ describe('Subgenerator client of primeng-blueprint JHipster blueprint', () => { // Adds your tests here console.log(testDir); const basePath = path.join(__dirname, './samples/primeng-blueprint-test'); - const filesToTest = [ - `${basePath}/src/main/`, - `${basePath}/src/test/` - ]; + const filesToTest = [`${basePath}/src/main/`, `${basePath}/src/test/`]; filesToTest.forEach(file => walker.walk(file).forEach(f => { assert.file(path.join(testDir, f.substring(basePath.length))); diff --git a/test/samples/primeng-blueprint-test/.eslintignore b/test/samples/primeng-blueprint-test/.eslintignore new file mode 100644 index 00000000..c8d1f557 --- /dev/null +++ b/test/samples/primeng-blueprint-test/.eslintignore @@ -0,0 +1,9 @@ +node_modules/ +src/main/docker/ +src/test/javascript/protractor.conf.js +src/test/javascript/jest.conf.js +webpack/ +target/ +build/ +node/ +postcss.config.js diff --git a/test/samples/primeng-blueprint-test/.eslintrc.json b/test/samples/primeng-blueprint-test/.eslintrc.json new file mode 100644 index 00000000..2e225991 --- /dev/null +++ b/test/samples/primeng-blueprint-test/.eslintrc.json @@ -0,0 +1,24 @@ +{ + "plugins": ["@typescript-eslint/tslint"], + "extends": ["jhipster"], + "parserOptions": { + "project": "./tsconfig.json" + }, + "rules": { + "@typescript-eslint/tslint/config": [ + "error", + { + "lintFile": "./tslint.json" + } + ], + "@typescript-eslint/no-unused-vars": [ + "warn", + { + "vars": "all", + "args": "after-used", + "ignoreRestSiblings": false + } + ], + "@typescript-eslint/no-non-null-assertion": "off" + } +} diff --git a/test/samples/primeng-blueprint-test/.gitignore b/test/samples/primeng-blueprint-test/.gitignore index e9cc8f2f..8d578840 100644 --- a/test/samples/primeng-blueprint-test/.gitignore +++ b/test/samples/primeng-blueprint-test/.gitignore @@ -51,6 +51,8 @@ local.properties # PDT-specific .buildpath +# STS-specific +/.sts4-cache/* ###################### # Intellij ###################### diff --git a/test/samples/primeng-blueprint-test/.lintstagedrc.js b/test/samples/primeng-blueprint-test/.lintstagedrc.js new file mode 100644 index 00000000..58dedb03 --- /dev/null +++ b/test/samples/primeng-blueprint-test/.lintstagedrc.js @@ -0,0 +1,3 @@ +module.exports = { + '{,src/**/}*.{md,json,ts,css,scss,yml}': ['prettier --write', 'git add'] +}; diff --git a/test/samples/primeng-blueprint-test/.yo-rc.json b/test/samples/primeng-blueprint-test/.yo-rc.json index 0d14b48f..530dcf56 100644 --- a/test/samples/primeng-blueprint-test/.yo-rc.json +++ b/test/samples/primeng-blueprint-test/.yo-rc.json @@ -18,54 +18,40 @@ "skipServer": false, "testFrameworks": ["protractor"], "websocket": false, - "baseName": "compositekey", + "baseName": "primengtest", "applicationType": "monolith", "buildTool": "gradle", - "jhipsterVersion": "6.1.2", - "skipUserManagement": true, + "jhipsterVersion": "6.6.0", + "skipUserManagement": false, "clientPackageManager": "npm", "authenticationType": "jwt", "cacheProvider": "ehcache", "clientFramework": "angularX", + "clientTheme": "none", + "clientThemeVariant": "", "serverPort": "8080", "useSass": true, - "jwtSecretKey": "MWY4MmMyNDI3OWEwOTgwMjdmNTA0YTkyYzY4ZDc4NjBmODhmYWIyMGE0NGE0NjBkNjYwMzM1ZjE3Y2I0MjZjZWY3OGIzMmU2ZTNiYmY3ODBiN2I0NTI4OGI3NDlkYTMyM2EwMTZmMjZiODM5ZjlmYjU3MzU5ZDFhZjA2NzAxNGQ=", - "clientTheme": "none", + "jwtSecretKey": "YTQ1MzZmMzdmYTgzNmNmZGM0NjdjNzBiMTI1MTVhZGY1Yjg5MWVjZmIyZDE4ODczMTg1YjZkODRhYzA2ZTNhZTRjZWYxZWY1ZjI0YTFmMDliZmM0MDdlZjliMmIxOTE1ODZmMTk3NTg5OWVlNmY1MmQwYTRiMzZkNjNlMGYzODE=", "entitySuffix": "", "dtoSuffix": "DTO", - "otherModules": [ - { - "name": "generator-jhipster-primeng", - "version": "0.0.0" - }, + "blueprints": [ { "name": "generator-jhipster-primeng-blueprint", - "version": "0.0.0" + "version": "latest" } ], - "blueprint": "generator-jhipster-primeng", - "blueprintVersion": "0.0.0", - "clientThemeVariant": "", - "blueprints": [ + "embeddableLaunchScript": false, + "creationTimestamp": 1578866282552, + "otherModules": [ { "name": "generator-jhipster-primeng-blueprint", - "version": "0.0.0" + "version": "latest" } ] }, - "entities": ["Employee", "EmployeeSkill", "CertificateType", "EmployeeSkillCertificate", "Task", "TaskComment"], - "generator-jhipster-primeng": { - "jhipsterVersion": "6.1.2", - "applicationType": "monolith", - "baseName": "primengtest", - "clientFramework": "angularX", - "clientTheme": "none", - "useSass": true, - "enableTranslation": true, - "clientPackageManager": "npm" - }, + "entities": ["Employee", "EmployeeSkill", "CertificateType", "EmployeeSkillCertificate", "Task", "TaskComment", "PriceFormula"], "generator-jhipster-primeng-blueprint": { - "jhipsterVersion": "6.1.2", + "jhipsterVersion": "6.6.0", "applicationType": "monolith", "baseName": "primengtest", "useSass": true, diff --git a/test/samples/primeng-blueprint-test/README.md b/test/samples/primeng-blueprint-test/README.md index 12a387e4..4fbd8e12 100644 --- a/test/samples/primeng-blueprint-test/README.md +++ b/test/samples/primeng-blueprint-test/README.md @@ -1,6 +1,6 @@ -# compositekey +# primengtest -This application was generated using JHipster 6.1.2, you can find documentation and help at [https://www.jhipster.tech/documentation-archive/v6.1.2](https://www.jhipster.tech/documentation-archive/v6.1.2). +This application was generated using JHipster 6.6.0, you can find documentation and help at [https://www.jhipster.tech/documentation-archive/v6.6.0](https://www.jhipster.tech/documentation-archive/v6.6.0). ## Development @@ -19,7 +19,7 @@ We use npm scripts and [Webpack][] as our build system. Run the following commands in two separate terminals to create a blissful development experience where your browser auto-refreshes when files change on your hard drive. - ./gradlew + ./gradlew -x webpack npm start Npm is also used to manage CSS and JavaScript dependencies used in this application. You can upgrade dependencies by @@ -28,11 +28,11 @@ Add the `help` flag on any command to see how you can use it. For example, `npm The `npm run` command will list all of the scripts available to run for this project. -### Service workers +### PWA Support -Service workers are commented by default, to enable them please uncomment the following code. +JHipster ships with PWA (Progressive Web App) support, and it's turned off by default. One of the main components of a PWA is a service worker. -- The service worker registering script in index.html +The service worker initialization code is commented out by default. To enable it, uncomment the following code in `src/main/webapp/index.html`: ```html ``` -Note: workbox creates the respective service worker and dynamically generate the `service-worker.js` +Note: [Workbox](https://developers.google.com/web/tools/workbox/) powers JHipster's service worker. It dynamically generates the `service-worker.js` file. ### Managing dependencies @@ -63,17 +63,17 @@ Edit [src/main/webapp/app/vendor.ts](src/main/webapp/app/vendor.ts) file: import 'leaflet/dist/leaflet.js'; ``` -Edit [src/main/webapp/content/css/vendor.css](src/main/webapp/content/css/vendor.css) file: +Edit [src/main/webapp/content/scss/vendor.scss](src/main/webapp/content/scss/vendor.scss) file: ``` @import '~leaflet/dist/leaflet.css'; ``` -Note: there are still few other things remaining to do for Leaflet that we won't detail here. +Note: There are still a few other things remaining to do for Leaflet that we won't detail here. For further instructions on how to develop with JHipster, have a look at [Using JHipster in development][]. -### Using angular-cli +### Using Angular CLI You can also use [Angular CLI][] to generate some custom client code. @@ -91,7 +91,7 @@ will generate few files: ### Packaging as jar -To build the final jar and optimize the compositekey application for production, run: +To build the final jar and optimize the primengtest application for production, run: ./gradlew -Pprod clean bootJar @@ -114,7 +114,7 @@ To package your application as a war in order to deploy it to an application ser To launch your application's tests, run: - ./gradlew test integrationTest + ./gradlew test integrationTest jacocoTestReport ### Client tests @@ -137,7 +137,7 @@ You can run a Sonar analysis with using the [sonar-scanner](https://docs.sonarqu Then, run a Sonar analysis: ``` -./gradlew -Pprod clean check sonarqube +./gradlew -Pprod clean check jacocoTestReport sonarqube ``` For more information, refer to the [Code quality page][]. @@ -170,20 +170,20 @@ For more information refer to [Using Docker and Docker-Compose][], this page als To configure CI for your project, run the ci-cd sub-generator (`jhipster ci-cd`), this will let you generate configuration files for a number of Continuous Integration systems. Consult the [Setting up Continuous Integration][] page for more information. [jhipster homepage and latest documentation]: https://www.jhipster.tech -[jhipster 6.1.2 archive]: https://www.jhipster.tech/documentation-archive/v6.1.2 -[using jhipster in development]: https://www.jhipster.tech/documentation-archive/v6.1.2/development/ -[using docker and docker-compose]: https://www.jhipster.tech/documentation-archive/v6.1.2/docker-compose -[using jhipster in production]: https://www.jhipster.tech/documentation-archive/v6.1.2/production/ -[running tests page]: https://www.jhipster.tech/documentation-archive/v6.1.2/running-tests/ -[code quality page]: https://www.jhipster.tech/documentation-archive/v6.1.2/code-quality/ -[setting up continuous integration]: https://www.jhipster.tech/documentation-archive/v6.1.2/setting-up-ci/ +[jhipster 6.6.0 archive]: https://www.jhipster.tech/documentation-archive/v6.6.0 +[using jhipster in development]: https://www.jhipster.tech/documentation-archive/v6.6.0/development/ +[using docker and docker-compose]: https://www.jhipster.tech/documentation-archive/v6.6.0/docker-compose +[using jhipster in production]: https://www.jhipster.tech/documentation-archive/v6.6.0/production/ +[running tests page]: https://www.jhipster.tech/documentation-archive/v6.6.0/running-tests/ +[code quality page]: https://www.jhipster.tech/documentation-archive/v6.6.0/code-quality/ +[setting up continuous integration]: https://www.jhipster.tech/documentation-archive/v6.6.0/setting-up-ci/ [node.js]: https://nodejs.org/ [yarn]: https://yarnpkg.org/ [webpack]: https://webpack.github.io/ [angular cli]: https://cli.angular.io/ -[browsersync]: http://www.browsersync.io/ +[browsersync]: https://www.browsersync.io/ [jest]: https://facebook.github.io/jest/ -[jasmine]: http://jasmine.github.io/2.0/introduction.html +[jasmine]: https://jasmine.github.io/2.0/introduction.html [protractor]: https://angular.github.io/protractor/ -[leaflet]: http://leafletjs.com/ -[definitelytyped]: http://definitelytyped.org/ +[leaflet]: https://leafletjs.com/ +[definitelytyped]: https://definitelytyped.org/ diff --git a/test/samples/primeng-blueprint-test/build.gradle b/test/samples/primeng-blueprint-test/build.gradle deleted file mode 100644 index 41d33220..00000000 --- a/test/samples/primeng-blueprint-test/build.gradle +++ /dev/null @@ -1,288 +0,0 @@ -import org.gradle.internal.os.OperatingSystem - -buildscript { - repositories { - mavenLocal() - mavenCentral() - gradlePluginPortal() - maven { url "http://repo.spring.io/plugins-release" } - } - dependencies { - classpath "org.springframework.boot:spring-boot-gradle-plugin:${spring_boot_version}" - classpath "io.spring.gradle:propdeps-plugin:0.0.10.RELEASE" - //jhipster-needle-gradle-buildscript-dependency - JHipster will add additional gradle build script plugins here - } -} - -plugins { - id "java" - id "maven" - id "idea" - id "jacoco" - id "com.google.cloud.tools.jib" version "1.3.0" - id "com.gorylenko.gradle-git-properties" version "2.0.0" - id "com.github.node-gradle.node" version "1.5.1" - id "net.ltgt.apt-eclipse" version "0.21" - id "net.ltgt.apt-idea" version "0.21" - id "net.ltgt.apt" version "0.21" - id "org.liquibase.gradle" version "2.0.1" - id "org.sonarqube" version "2.7.1" - //jhipster-needle-gradle-plugins - JHipster will add additional gradle plugins here -} - -group = "com.mycompany.myapp" -version = "0.0.1-SNAPSHOT" - -description = "" - -sourceCompatibility=1.8 -targetCompatibility=1.8 -assert System.properties["java.specification.version"] == "1.8" || "11" || "12" - -apply plugin: "org.springframework.boot" -apply plugin: "propdeps" - -apply from: "gradle/docker.gradle" -apply from: "gradle/sonar.gradle" -//jhipster-needle-gradle-apply-from - JHipster will add additional gradle scripts to be applied here - -if (project.hasProperty("prod")) { - apply from: "gradle/profile_prod.gradle" -} else { - apply from: "gradle/profile_dev.gradle" -} - -if (project.hasProperty("war")) { - apply from: "gradle/war.gradle" -} - - -idea { - module { - excludeDirs += files("node_modules") - } -} - -eclipse { - sourceSets { - main { - java { - srcDirs += ["build/generated/sources/annotationProcessor/java/main"] - } - } - } -} - -// See https://virgo47.wordpress.com/2018/09/14/classpath-too-long-with-spring-boot-and-gradle/ for details -// https://github.com/jhipster/generator-jhipster/issues/9713 -if (OperatingSystem.current().isWindows()) { - task classpathJar(type: Jar) { - inputs.files sourceSets.main.runtimeClasspath - - archiveName = "runboot-classpath.jar" - doFirst { - manifest { - def classpath = sourceSets.test.runtimeClasspath.files - attributes "Class-Path": classpath.collect {f -> f.toURI().toString()}.join(" ") - } - } - } - - bootRun { - classpath = classpathJar.outputs.files - } -} - -defaultTasks "bootRun" - -springBoot { - mainClassName = "com.mycompany.myapp.PrimengtestApp" -} - -test { - useJUnitPlatform() - exclude "**/*IT*", "**/*IntTest*" - testLogging { - events 'FAILED', 'SKIPPED' - } - // uncomment if the tests reports are not generated - // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484 - // ignoreFailures true - reports.html.enabled = false -} - -task integrationTest(type: Test) { - useJUnitPlatform() - description = "Execute integration tests." - group = "verification" - include "**/*IT*", "**/*IntTest*" - - testLogging { - events 'FAILED', 'SKIPPED' - } - // uncomment if the tests reports are not generated - // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484 - // ignoreFailures true - reports.html.enabled = false -} - -check.dependsOn integrationTest -task testReport(type: TestReport) { - destinationDir = file("$buildDir/reports/tests") - reportOn test -} - -task integrationTestReport(type: TestReport) { - destinationDir = file("$buildDir/reports/tests") - reportOn integrationTest -} - -if (!project.hasProperty("runList")) { - project.ext.runList = "main" -} - -project.ext.diffChangelogFile = "src/main/resources/config/liquibase/changelog/" + new Date().format("yyyyMMddHHmmss") + "_changelog.xml" - -liquibase { - activities { - main { - driver "org.h2.Driver" - url "jdbc:h2:file:./target/h2db/db/primengtest" - username "primengtest" - password "" - changeLogFile "src/main/resources/config/liquibase/master.xml" - defaultSchemaName "" - logLevel "debug" - classpath "src/main/resources/" - } - diffLog { - driver "org.h2.Driver" - url "jdbc:h2:file:./target/h2db/db/primengtest" - username "primengtest" - password "" - changeLogFile project.ext.diffChangelogFile - referenceUrl "hibernate:spring:com.mycompany.myapp.domain?dialect=org.hibernate.dialect.H2Dialect&hibernate.physical_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy&hibernate.implicit_naming_strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy" - defaultSchemaName "" - logLevel "debug" - classpath "$buildDir/classes/java/main" - } - } - - runList = project.ext.runList -} - -configurations { - providedRuntime - implementation.exclude module: "spring-boot-starter-tomcat" -} - -repositories { - mavenLocal() - mavenCentral() - jcenter() - // TODO To remove after final JHipster release - maven { url "http://oss.sonatype.org/content/repositories/snapshots" } - //jhipster-needle-gradle-repositories - JHipster will add additional repositories -} - -dependencies { - // import JHipster dependencies BOM - implementation platform("io.github.jhipster:jhipster-dependencies:${jhipster_dependencies_version}" ) - - // Use ", version: jhipster_dependencies_version, changing: true" if you want - // to use a SNAPSHOT release instead of a stable release - implementation group: "io.github.jhipster", name: "jhipster-framework" - implementation "org.springframework.boot:spring-boot-starter-cache" - implementation "io.dropwizard.metrics:metrics-core" - implementation "io.micrometer:micrometer-registry-prometheus" - implementation "net.logstash.logback:logstash-logback-encoder" - implementation "com.fasterxml.jackson.datatype:jackson-datatype-hppc" - implementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310" - implementation "com.fasterxml.jackson.datatype:jackson-datatype-hibernate5" - implementation "com.fasterxml.jackson.core:jackson-annotations" - implementation "com.fasterxml.jackson.core:jackson-databind" - implementation "com.fasterxml.jackson.module:jackson-module-afterburner" - implementation "javax.cache:cache-api" - implementation "org.hibernate:hibernate-core" - implementation "com.zaxxer:HikariCP" - implementation "org.apache.commons:commons-lang3" - implementation "commons-io:commons-io" - implementation "javax.transaction:javax.transaction-api" - implementation "org.ehcache:ehcache" - implementation "org.hibernate:hibernate-jcache" - implementation "org.hibernate:hibernate-entitymanager" - implementation "org.hibernate:hibernate-envers" - implementation "org.hibernate.validator:hibernate-validator" - implementation "org.liquibase:liquibase-core" - liquibaseRuntime "org.liquibase:liquibase-core" - liquibaseRuntime "org.liquibase.ext:liquibase-hibernate5:${liquibase_hibernate5_version}" - liquibaseRuntime sourceSets.main.compileClasspath - implementation "org.springframework.boot:spring-boot-loader-tools" - implementation "org.springframework.boot:spring-boot-starter-mail" - implementation "org.springframework.boot:spring-boot-starter-logging" - implementation "org.springframework.boot:spring-boot-starter-actuator" - implementation "org.springframework.boot:spring-boot-starter-aop" - implementation "org.springframework.boot:spring-boot-starter-data-jpa" - implementation "org.springframework.boot:spring-boot-starter-security" - implementation ("org.springframework.boot:spring-boot-starter-web") { - exclude module: "spring-boot-starter-tomcat" - } - implementation "org.springframework.boot:spring-boot-starter-undertow" - implementation "org.springframework.boot:spring-boot-starter-thymeleaf" - implementation "org.zalando:problem-spring-web" - implementation "org.springframework.boot:spring-boot-starter-cloud-connectors" - implementation "org.springframework.security:spring-security-config" - implementation "org.springframework.security:spring-security-data" - implementation "org.springframework.security:spring-security-web" - implementation "io.jsonwebtoken:jjwt-api" - runtimeOnly "io.jsonwebtoken:jjwt-impl" - runtimeOnly "io.jsonwebtoken:jjwt-jackson" - implementation ("io.springfox:springfox-swagger2") { - exclude module: "mapstruct" - } - implementation "io.springfox:springfox-bean-validators" - implementation "mysql:mysql-connector-java" - liquibaseRuntime "mysql:mysql-connector-java" - implementation "org.mapstruct:mapstruct:${mapstruct_version}" - annotationProcessor "org.mapstruct:mapstruct-processor:${mapstruct_version}" - annotationProcessor "org.hibernate:hibernate-jpamodelgen:${hibernate_version}" - annotationProcessor "org.glassfish.jaxb:jaxb-runtime:${jaxb_runtime_version}" - annotationProcessor ("org.springframework.boot:spring-boot-configuration-processor:${spring_boot_version}") { - exclude group: "com.vaadin.external.google", module: "android-json" - } - testImplementation "com.jayway.jsonpath:json-path" - testImplementation ("org.springframework.boot:spring-boot-starter-test") { - exclude module: "junit" - exclude group: "com.vaadin.external.google", module: "android-json" - } - testImplementation "org.springframework.security:spring-security-test" - testImplementation "org.springframework.boot:spring-boot-test" - testImplementation "org.junit.jupiter:junit-jupiter-engine" - testImplementation "org.assertj:assertj-core" - testImplementation "junit:junit" - testImplementation "org.mockito:mockito-core" - testImplementation "org.hamcrest:hamcrest-library" - testImplementation "com.h2database:h2" - liquibaseRuntime "com.h2database:h2" - //jhipster-needle-gradle-dependency - JHipster will add additional dependencies here -} - -task cleanResources(type: Delete) { - delete "build/resources" -} - -wrapper { - gradleVersion = "5.4.1" -} - -if (project.hasProperty("nodeInstall")) { - node { - version = "${node_version}" - npmVersion = "${npm_version}" - yarnVersion = "${yarn_version}" - download = true - } -} - -compileJava.dependsOn processResources -processResources.dependsOn bootBuildInfo diff --git a/test/samples/primeng-blueprint-test/gradle.properties b/test/samples/primeng-blueprint-test/gradle.properties deleted file mode 100644 index 3a4e9e66..00000000 --- a/test/samples/primeng-blueprint-test/gradle.properties +++ /dev/null @@ -1,55 +0,0 @@ -rootProject.name=primengtest -profile=dev - -# Build properties -node_version=10.16.0 -npm_version=6.9.2 -yarn_version=1.17.3 - -# Dependency versions -jhipster_dependencies_version=3.0.4-SNAPSHOT -# The spring-boot version should match the one managed by -# https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster_dependencies_version} -spring_boot_version=2.1.6.RELEASE -# The hibernate version should match the one managed by -# https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} --> -hibernate_version=5.3.10.Final -mapstruct_version=1.3.0.Final - -liquibase_hibernate5_version=3.6 -liquibaseTaskPrefix=liquibase - -jaxb_runtime_version=2.3.2 - -# jhipster-needle-gradle-property - JHipster will add additional properties here - -## below are some of the gradle performance improvement settings that can be used as required, these are not enabled by default - -## The Gradle daemon aims to improve the startup and execution time of Gradle. -## The daemon is enabled by default in Gradle 3+ setting this to false will disable this. -## TODO: disable daemon on CI, since builds should be clean and reliable on servers -## https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:ways_to_disable_gradle_daemon -## un comment the below line to disable the daemon - -#org.gradle.daemon=false - -## Specifies the JVM arguments used for the daemon process. -## The setting is particularly useful for tweaking memory settings. -## Default value: -Xmx1024m -XX:MaxPermSize=256m -## un comment the below line to override the daemon defaults - -#org.gradle.jvmargs=-Xmx1024m -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 - -## When configured, Gradle will run in incubating parallel mode. -## This option should only be used with decoupled projects. More details, visit -## http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -## un comment the below line to enable parallel mode - -#org.gradle.parallel=true - -## Enables new incubating mode that makes Gradle selective when configuring projects. -## Only relevant projects are configured which results in faster builds for large multi-projects. -## http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:configuration_on_demand -## un comment the below line to enable the selective mode - -#org.gradle.configureondemand=true diff --git a/test/samples/primeng-blueprint-test/gradlew b/test/samples/primeng-blueprint-test/gradlew deleted file mode 100755 index af6708ff..00000000 --- a/test/samples/primeng-blueprint-test/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/test/samples/primeng-blueprint-test/gradlew.bat b/test/samples/primeng-blueprint-test/gradlew.bat deleted file mode 100755 index 6d57edc7..00000000 --- a/test/samples/primeng-blueprint-test/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/test/samples/primeng-blueprint-test/package-lock.json b/test/samples/primeng-blueprint-test/package-lock.json index a2c87be1..58450d9b 100644 --- a/test/samples/primeng-blueprint-test/package-lock.json +++ b/test/samples/primeng-blueprint-test/package-lock.json @@ -1,16 +1,16 @@ { "name": "primengtest", - "version": "0.0.0", + "version": "0.0.1-SNAPSHOT", "lockfileVersion": 1, "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.800.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.800.2.tgz", - "integrity": "sha512-251GOQwI3254AtnGWZoHmjOMFcz7h6M3fPmRHpYuuhRPIwZnQCKaszYI7gaP9zR7uArLUwsuPo+YYz8lb6Giwg==", + "version": "0.803.20", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.803.20.tgz", + "integrity": "sha512-NjyDJ61i9kh8J+qXt0E2j+P5Xsmi2mPasBzwcQyrZZGiho4zC0IFxcdxyzcsXFEupmilJKkjdt2g4QQRC5rUDQ==", "dev": true, "requires": { - "@angular-devkit/core": "8.0.2", + "@angular-devkit/core": "8.3.20", "rxjs": "6.4.0" }, "dependencies": { @@ -26,14 +26,14 @@ } }, "@angular-devkit/core": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.0.2.tgz", - "integrity": "sha512-S2OPYe6Qu7qTS8Q2lzf4qNjXdbN/J2YVnd3wGauMI8Tih5tY/NzUW3h5ds09nRcjsdBDuT0qgf3IMlCZWIABvQ==", + "version": "8.3.20", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-8.3.20.tgz", + "integrity": "sha512-UCfW/BJBJnioJU34QennQhA4o+rLoCXWiSrI2LM7yw8/MEM9I8KbqRETP1My3HjHkQnvP+Qh3noedpcu3Nnt8A==", "dev": true, "requires": { - "ajv": "6.10.0", + "ajv": "6.10.2", "fast-json-stable-stringify": "2.0.0", - "magic-string": "0.25.2", + "magic-string": "0.25.3", "rxjs": "6.4.0", "source-map": "0.7.3" }, @@ -50,12 +50,12 @@ } }, "@angular-devkit/schematics": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.0.2.tgz", - "integrity": "sha512-v+g0MOPADJJ5QNNmojCyh2sw1GOzadlbHPdTFqZOm77b2Bi79dRm+yuYMuY6a2nUt7DIcioLRcOFwV8UctajRg==", + "version": "8.3.20", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-8.3.20.tgz", + "integrity": "sha512-sDHZakh4e3A5WenR9zr1x6Va9GNRqQlRhqT3xcbkG88v2M0YqEt7dHB7YwnOhm7zSxiWQM8PdWEQHiQ4iu9NyQ==", "dev": true, "requires": { - "@angular-devkit/core": "8.0.2", + "@angular-devkit/core": "8.3.20", "rxjs": "6.4.0" }, "dependencies": { @@ -71,67 +71,70 @@ } }, "@angular/animations": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.0.0.tgz", - "integrity": "sha512-hggSRi83rmocLwzrKZtmFcqPdivKSJqp2yiYaiNmJ2yQWJ1JW/Lurypv9H347RWxmwCCwC2kV8embTGbOXIFDQ==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-8.2.14.tgz", + "integrity": "sha512-3Vc9TnNpKdtvKIXcWDFINSsnwgEMiDmLzjceWg1iYKwpeZGQahUXPoesLwQazBMmxJzQiA4HOMj0TTXKZ+Jzkg==", "requires": { "tslib": "^1.9.0" } }, "@angular/cdk": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-8.0.0.tgz", - "integrity": "sha512-2vsRWEHNARe0iRmqgzvM67gwfRy+aKvdef4Qu9L+ndSsTrrZT3tSgG8SMn1v9SfBHnx5G8mo4d1AMquXG69AuQ==", + "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" } }, "@angular/cli": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.0.2.tgz", - "integrity": "sha512-xXSCwTKonC6nMqKPDlEFhXjKBu85jVB+KYo2tLU+RKtgFeIF/hTaUWQTvWXRwRsQAfBhB1cwe0oijdljOItTgw==", + "version": "8.3.20", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-8.3.20.tgz", + "integrity": "sha512-bCo8zVFZ6iPc1EnHmVCmKvIcV7YkvalBKGNU7LtVHq6qZBI+ZmFtuyL5obKvFg1vJcminjKcY/UcMr9uGcAQrQ==", "dev": true, "requires": { - "@angular-devkit/architect": "0.800.2", - "@angular-devkit/core": "8.0.2", - "@angular-devkit/schematics": "8.0.2", - "@schematics/angular": "8.0.2", - "@schematics/update": "0.800.2", + "@angular-devkit/architect": "0.803.20", + "@angular-devkit/core": "8.3.20", + "@angular-devkit/schematics": "8.3.20", + "@schematics/angular": "8.3.20", + "@schematics/update": "0.803.20", "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.1", "debug": "^4.1.1", "ini": "1.3.5", - "inquirer": "6.3.1", + "inquirer": "6.5.1", "npm-package-arg": "6.1.0", - "open": "6.2.0", - "pacote": "9.5.0", - "read-package-tree": "5.2.2", - "semver": "6.0.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" } }, "@angular/common": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.0.0.tgz", - "integrity": "sha512-iOAJZ0+1zTRHnHE/5G30+4Q66W1pfZkSkxZIXvgijZ+wtuNloYdWNy/IdZ/m7ayBI7A6FsYEhyMUoWz2HVEJNw==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-8.2.14.tgz", + "integrity": "sha512-Qmt+aX2quUW54kaNT7QH7WGXnFxr/cC2C6sf5SW5SdkZfDQSiz8IaItvieZfXVQUbBOQKFRJ7TlSkt0jI/yjvw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.0.0.tgz", - "integrity": "sha512-4rKsVFMNykF83tPL1VE1+j9kZ3cWHUsLOAB/VqmF64EcR/GsbjKog2v23rSso5kqUtPiVq/FWGYllW6qMdxtJA==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-8.2.14.tgz", + "integrity": "sha512-ABZO4E7eeFA1QyJ2trDezxeQM5ZFa1dXw1Mpl/+1vuXDKNjJgNyWYwKp/NwRkLmrsuV0yv4UDCDe4kJOGbPKnw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.0.0.tgz", - "integrity": "sha512-Z0U0Ih8A7V3J1gq7AXnXbrGAD2ERmz7JbREJJRHDWiUNxIqGQiV3Odo1V8FL5n/cKvLwSYM2Ubvk10gb0+3njA==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-8.2.14.tgz", + "integrity": "sha512-XDrTyrlIZM+0NquVT+Kbg5bn48AaWFT+B3bAT288PENrTdkuxuF9AhjFRZj8jnMdmaE4O2rioEkXBtl6z3zptA==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -141,7 +144,6 @@ "magic-string": "^0.25.0", "minimist": "^1.2.0", "reflect-metadata": "^0.1.2", - "shelljs": "^0.8.1", "source-map": "^0.6.1", "tslib": "^1.9.0", "yargs": "13.1.0" @@ -162,69 +164,70 @@ } }, "@angular/core": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.0.0.tgz", - "integrity": "sha512-mrkP1PTzqCmZGLYll+TDyawLXHzi+FcRPqSuRxCmDMthUUE93SLXT2yISDkx9aMPtFKgFr6KfrIkKuCz16BP/g==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-8.2.14.tgz", + "integrity": "sha512-zeePkigi+hPh3rN7yoNENG/YUBUsIvUXdxx+AZq+QPaFeKEA2FBSrKn36ojHFrdJUjKzl0lPMEiGC2b6a6bo6g==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.0.0.tgz", - "integrity": "sha512-T6XdG3mALWzvnrN3fA1hAmfwvraiF1SPMWNXgPk2riuMf8CFdoro+tQZ4eo1islHrTTw5QzmqN8JJALfhAG6bg==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-8.2.14.tgz", + "integrity": "sha512-zhyKL3CFIqcyHJ/TQF/h1OZztK611a6rxuPHCrt/5Sn1SuBTJJQ1pPTkOYIDy6IrCrtyANc8qB6P17Mao71DNQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.0.0.tgz", - "integrity": "sha512-fTD+pTMbq+On9Uv3VXiei2lfuX7GX31dngm/Y4yWTFeW6eXy0+7kkfflzpLOb0hykCZvcXzarqCuEBBYNLrrOg==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-8.2.14.tgz", + "integrity": "sha512-MtJptptyKzsE37JZ2VB/tI4cvMrdAH+cT9pMBYZd66YSZfKjIj5s+AZo7z8ncoskQSB1o3HMfDjSK7QXGx1mLQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.0.0.tgz", - "integrity": "sha512-dx7W7JoSFbsveexjZ/BPlsXbMDLWVLmRCo7IqLvibMrTbdpaaOCNJIXJk1X+f7JJrQ7SwlZaVkoLCMoDWw6fmA==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-8.2.14.tgz", + "integrity": "sha512-mO2JPR5kLU/A3AQngy9+R/Q5gaF9csMStBQjwsCRI0wNtlItOIGL6+wTYpiTuh/ux+WVN1F2sLcEYU4Zf1ud9A==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.0.0.tgz", - "integrity": "sha512-DGUTb8qpndE5m716xh00GxuC8o7qamlqbUruGB+SQD6ynU7s5yLGxtKffxqb1BT63+YewpsVxc2Koruvb1qjDw==", + "version": "8.2.14", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-8.2.14.tgz", + "integrity": "sha512-DHA2BhODqV7F0g6ZKgFaZgbsqzHHWRcfWchCOrOVKu2rYiKUTwwHVLBgZAhrpNeinq2pWanVYSIhMr7wy+LfEA==", "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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.0.tgz", + "integrity": "sha512-AN2IR/wCUYsM+PdErq6Bp3RFTXl8W0p9Nmymm7zkpsCmh+r/YYcckaCGpU8Q/mEKmST19kkGRaG42A/jxOWwBA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.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", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.0.tgz", + "integrity": "sha512-3rqPi/bv/Xfu2YzHvBz4XqMI1fKVwnhntPA1/fjoECrSjrhbOCxlTrbVu5gUtr8zkxW+RpkDOa/HCW93gzS2Dw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helpers": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", "json5": "^2.1.0", "lodash": "^4.17.13", "resolve": "^1.3.2", @@ -233,9 +236,9 @@ }, "dependencies": { "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "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" @@ -248,9 +251,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { @@ -262,16 +265,15 @@ } }, "@babel/generator": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz", - "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.0.tgz", + "integrity": "sha512-2Lp2e02CV2C7j/H4n4D9YvsvdhPVVg9GDIamr6Tu4tU35mL3mzOrzl1lZ8ZJtysfZXh+y+AGORc2rPS7yHxBUg==", "dev": true, "requires": { - "@babel/types": "^7.5.5", + "@babel/types": "^7.8.0", "jsesc": "^2.5.1", "lodash": "^4.17.13", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" + "source-map": "^0.5.0" }, "dependencies": { "jsesc": { @@ -289,126 +291,136 @@ } }, "@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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.0.tgz", + "integrity": "sha512-x9psucuU0Xalw+0Vpr2FYJMLB7/KnPSLZhlkUyOGbYAWRDfmtZBrguYpJYiaNCRV7vGkYjO/gF6/J6yMvdWTDw==", "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": "^7.8.0", + "@babel/template": "^7.8.0", + "@babel/types": "^7.8.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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.0.tgz", + "integrity": "sha512-eUP5grliToMapQiTaYS2AAO/WwaCG7cuJztR1v/a1aPzUzUeGt+AaI9OvLATc/AfFkF8SLJ10d5ugGt/AQ9d6w==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.8.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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.0.tgz", + "integrity": "sha512-+hAlRGdf8fHQAyNnDBqTHQhwdLURLdrCROoWaEQYiQhk2sV9Rhs+GoFZZfMJExTq9HG8o2NX3uN2G90bFtmFdA==", "dev": true }, "@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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.0.tgz", + "integrity": "sha512-YhYFhH4T6DlbT6CPtVgLfC1Jp2gbCawU/ml7WJvUpBg01bCrXSzTYMZZXbbIGjq/kHmK8YUATxTppcRGzj31pA==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.8.0" } }, "@babel/helpers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz", - "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.0.tgz", + "integrity": "sha512-srWKpjAFbiut5JoCReZJ098hLqoZ9HufOnKZPggc7j74XaPuQ+9b3RYPV1M/HfjL63lCNd8uI1O487qIWxAFNA==", "dev": true, "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" + "@babel/template": "^7.8.0", + "@babel/traverse": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.0.tgz", + "integrity": "sha512-OsdTJbHlPtIk2mmtwXItYrdmalJ8T0zpVzNAbKSkHshuywj7zb29Y09McV/jQsQunc/nEyHiPV2oy9llYMLqxw==", "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", "js-tokens": "^4.0.0" - }, - "dependencies": { - "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 - } } }, "@babel/parser": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz", - "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.0.tgz", + "integrity": "sha512-VVtsnUYbd1+2A2vOVhm4P2qNXQE8L/W859GpUHfUcdhX8d3pEKThZuIr6fztocWx9HbK+00/CR0tXnhAggJ4CA==", "dev": true }, "@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==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.0.tgz", + "integrity": "sha512-dt89fDlkfkTrQcy5KavMQPyF2A6tR0kYp8HAnIoQv5hO34iAUffHghP/hMGd7Gf/+uYTmLQO0ar7peX1SUWyIA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/runtime": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz", - "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.0.tgz", + "integrity": "sha512-Z7ti+HB0puCcLmFE3x90kzaVgbx6TRrYIReaygW6EkBEnJh1ajS4/inhF7CypzWeDV3NFl1AfWj0eMtdihojxw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, + "@babel/runtime-corejs3": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.8.0.tgz", + "integrity": "sha512-5XaME/D4hTkUclw4BW+FeDyfUcxN5/Fox/+9UiWUqdyU33zsLxDAE74IexAmLccuHSQyFbIzF5+Yb4E6obVOSg==", + "dev": true, + "requires": { + "core-js-pure": "^3.0.0", + "regenerator-runtime": "^0.13.2" + } + }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.0.tgz", + "integrity": "sha512-0NNMDsY2t3ltAVVK1WHNiaePo3tXPUeJpCX4I3xSKFoEl852wJHG8mrgHVADf8Lz1y+8al9cF7cSSfzSnFSYiw==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/code-frame": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0" } }, "@babel/traverse": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz", - "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.0.tgz", + "integrity": "sha512-d/6sPXFLGlJHZO/zWDtgFaKyalCOHLedzxpVJn6el1cw+f2TZa7xZEszeXdOw6EUemqRFBAn106BWBvtSck9Qw==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.5", - "@babel/types": "^7.5.5", + "@babel/code-frame": "^7.8.0", + "@babel/generator": "^7.8.0", + "@babel/helper-function-name": "^7.8.0", + "@babel/helper-split-export-declaration": "^7.8.0", + "@babel/parser": "^7.8.0", + "@babel/types": "^7.8.0", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" + }, + "dependencies": { + "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 + } } }, "@babel/types": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz", - "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.0.tgz", + "integrity": "sha512-1RF84ehyx9HH09dMMwGWl3UTWlVoCPtqqJPjGuC4JzMe1ZIVDJ2DT8mv3cPv/A7veLD6sgR7vi95lJqm+ZayIg==", "dev": true, "requires": { "esutils": "^2.0.2", @@ -435,88 +447,80 @@ } }, "@fortawesome/angular-fontawesome": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.4.0.tgz", - "integrity": "sha512-DYVXdCzwQo6d0CxVMRK+10LpBAvYN9xigWeQW4wKYq/Czd5es46nPMKixB5rHfNViECwwlM2gTM61K4DpxlJxg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@fortawesome/angular-fontawesome/-/angular-fontawesome-0.5.0.tgz", + "integrity": "sha512-5IR/jNMddiEpgApcqSMfp7l5kZqOtxQYzkSLW6iZ4MZHbQQ+Kc9tu9qi2hro6VFSk/sPxeYEzkzGZUNrMYiwOg==", "requires": { "tslib": "^1.9.0" } }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.19.tgz", - "integrity": "sha512-nd2Ul/CUs8U9sjofQYAALzOGpgkVJQgEhIJnOHaoyVR/LeC3x2mVg4eB910a4kS6WgLPebAY0M2fApEI497raQ==" + "version": "0.2.26", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.26.tgz", + "integrity": "sha512-CcM/fIFwZlRdiWG/25xE/wHbtyUuCtqoCTrr6BsWw7hH072fR++n4L56KPydAr3ANgMJMjT8v83ZFIsDc7kE+A==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.19", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.19.tgz", - "integrity": "sha512-D4ICXg9oU08eF9o7Or392gPpjmwwgJu8ecCFusthbID95CLVXOgIyd4mOKD9Nud5Ckz+Ty59pqkNtThDKR0erA==", + "version": "1.2.26", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.26.tgz", + "integrity": "sha512-3Dfd/v2IztP1TxKOxZiB5+4kaOZK9mNy0KU1vVK7nFlPWz3gzxrCWB+AloQhQUoJ8HhGqbzjliK89Vl7PExGbw==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.19" + "@fortawesome/fontawesome-common-types": "^0.2.26" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.9.0.tgz", - "integrity": "sha512-U8YXPfWcSozsCW0psCtlRGKjjRs5+Am5JJwLOUmVHFZbIEWzaz4YbP84EoPwUsVmSAKrisu3QeNcVOtmGml0Xw==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.12.0.tgz", + "integrity": "sha512-CnpsWs6GhTs9ekNB3d8rcO5HYqRkXbYKf2YNiAlTWbj5eVlPqsd/XH1F9If8jkcR1aegryAbln/qYeKVZzpM0g==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.19" + "@fortawesome/fontawesome-common-types": "^0.2.26" } }, "@hapi/address": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", - "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", "dev": true }, "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", + "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==", "dev": true }, "@hapi/joi": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.0.tgz", - "integrity": "sha512-n6kaRQO8S+kepUTbXL9O/UOL788Odqs38/VOfoCrATDtTvyfiO3fgjlSRaNkHabpTLgM7qru9ifqXlXbXk8SeQ==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", "dev": true, "requires": { "@hapi/address": "2.x.x", - "@hapi/hoek": "6.x.x", - "@hapi/marker": "1.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", "@hapi/topo": "3.x.x" } }, - "@hapi/marker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@hapi/marker/-/marker-1.0.0.tgz", - "integrity": "sha512-JOfdekTXnJexfE8PyhZFyHvHjt81rBFSAbTIRAhF2vv/2Y1JzoKsGqxH/GpZJoF7aEfYok8JVcAHmSz1gkBieA==", - "dev": true - }, "@hapi/topo": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.2.tgz", - "integrity": "sha512-r+aumOqJ5QbD6aLPJWqVjMAPsx5pZKz+F5yPqXZ/WWG9JTtHbQqlzrJoknJ0iJxLj9vlXtmpSdjlkszseeG8OA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", "dev": true, "requires": { - "@hapi/hoek": "8.x.x" - }, - "dependencies": { - "@hapi/hoek": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.1.0.tgz", - "integrity": "sha512-b1J4jxYnW+n6lC91V6Pqg9imP9BZq0HNCeM+3sbXg05rQsE9cGYrKFpZjyztVesGmNRE6R+QaEoWGATeIiUVjA==", - "dev": true - } + "@hapi/hoek": "^8.3.0" } }, "@jest/console": { - "version": "24.7.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz", - "integrity": "sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.9.0.tgz", + "integrity": "sha512-Zuj6b8TnKXi3q4ymac8EQfc3ea/uhLeCGThFqXeC8H9/raaH8ARPUTdId+XyGd03Z4In0/VjD2OYFcBF09fNLQ==", "dev": true, "requires": { - "@jest/source-map": "^24.3.0", + "@jest/source-map": "^24.9.0", "chalk": "^2.0.1", "slash": "^2.0.0" }, @@ -530,73 +534,97 @@ } }, "@jest/core": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.8.0.tgz", - "integrity": "sha512-R9rhAJwCBQzaRnrRgAdVfnglUuATXdwTRsYqs6NMdVcAl5euG8LtWDe+fVkN27YfKVBW61IojVsXKaOmSnqd/A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-24.9.0.tgz", + "integrity": "sha512-Fogg3s4wlAr1VX7q+rhV9RVnUv5tD7VuWfYy1+whMiWUrvl7U3QJSJyWcDio9Lq2prqYsZaeTv2Rz24pWGkJ2A==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/reporters": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/reporters": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-changed-files": "^24.8.0", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", + "jest-changed-files": "^24.9.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve-dependencies": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", - "jest-watcher": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-resolve-dependencies": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", + "jest-watcher": "^24.9.0", "micromatch": "^3.1.10", "p-each-series": "^1.0.0", - "pirates": "^4.0.1", "realpath-native": "^1.1.0", "rimraf": "^2.5.4", + "slash": "^2.0.0", "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "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" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } } }, "@jest/environment": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.8.0.tgz", - "integrity": "sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-24.9.0.tgz", + "integrity": "sha512-5A1QluTPhvdIPFYnO3sZC3smkNeXPVELz7ikPbhUj0bQjB07EoE9qtLrem14ZUYWdVayYbsjVwIiL4WBIMV4aQ==", "dev": true, "requires": { - "@jest/fake-timers": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/fake-timers": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/fake-timers": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.8.0.tgz", - "integrity": "sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-24.9.0.tgz", + "integrity": "sha512-eWQcNa2YSwzXWIMC5KufBh3oWRIijrQFROsIqt6v/NS9Io/gknw1jsAC9c+ih/RQX4A3O7SeWAhQeN0goKhT9A==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0" + "@jest/types": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0" } }, "@jest/reporters": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.8.0.tgz", - "integrity": "sha512-eZ9TyUYpyIIXfYCrw0UHUWUvE35vx5I92HGMgS93Pv7du+GHIzl+/vh8Qj9MCWFK/4TqyttVBPakWMOfZRIfxw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-24.9.0.tgz", + "integrity": "sha512-mu4X0yjaHrffOsWmVLzitKmmmWSQ3GGuefgNscUSWNiUNcEOSEQk9k3pERKEQVBb0Cnn88+UESIsZEMH3o88Gw==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.2", @@ -604,13 +632,13 @@ "istanbul-lib-instrument": "^3.0.1", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.1", - "istanbul-reports": "^2.1.1", - "jest-haste-map": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "istanbul-reports": "^2.2.6", + "jest-haste-map": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", - "node-notifier": "^5.2.1", + "node-notifier": "^5.4.2", "slash": "^2.0.0", "source-map": "^0.6.0", "string-length": "^2.0.0" @@ -631,9 +659,9 @@ } }, "@jest/source-map": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.3.0.tgz", - "integrity": "sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-24.9.0.tgz", + "integrity": "sha512-/Xw7xGlsZb4MJzNDgB7PW5crou5JqWiBQaz6xyPd3ArOg2nfn/PunV8+olXbbEZzNl591o5rWKE9BRDaFAuIBg==", "dev": true, "requires": { "callsites": "^3.0.0", @@ -641,12 +669,6 @@ "source-map": "^0.6.0" }, "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -656,45 +678,46 @@ } }, "@jest/test-result": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.8.0.tgz", - "integrity": "sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-24.9.0.tgz", + "integrity": "sha512-XEFrHbBonBJ8dGp2JmF8kP/nQI/ImPpygKHwQ/SY+es59Z3L5PI4Qb9TQQMAEeYsThG1xF0k6tmG0tIKATNiiA==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/types": "^24.9.0", "@types/istanbul-lib-coverage": "^2.0.0" } }, "@jest/test-sequencer": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz", - "integrity": "sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-24.9.0.tgz", + "integrity": "sha512-6qqsU4o0kW1dvA95qfNog8v8gkRN9ph6Lz7r96IvZpHdNipP2cBcb07J1Z45mz/VIS01OHJ3pY8T5fUY38tg4A==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-runner": "^24.8.0", - "jest-runtime": "^24.8.0" + "@jest/test-result": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-runner": "^24.9.0", + "jest-runtime": "^24.9.0" } }, "@jest/transform": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.8.0.tgz", - "integrity": "sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-24.9.0.tgz", + "integrity": "sha512-TcQUmyNRxV94S0QpMOnZl0++6RMiqpbH/ZMccFB/amku6Uwvyb1cjYX7xkp5nGNkbX4QPH/FcB6q1HBTHynLmQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "babel-plugin-istanbul": "^5.1.0", "chalk": "^2.0.1", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.1.15", - "jest-haste-map": "^24.8.0", - "jest-regex-util": "^24.3.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-regex-util": "^24.9.0", + "jest-util": "^24.9.0", "micromatch": "^3.1.10", + "pirates": "^4.0.1", "realpath-native": "^1.1.0", "slash": "^2.0.0", "source-map": "^0.6.1", @@ -727,14 +750,14 @@ } }, "@jest/types": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.8.0.tgz", - "integrity": "sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", + "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^12.0.9" + "@types/yargs": "^13.0.0" } }, "@mrmlnc/readdir-enhanced": { @@ -748,24 +771,24 @@ } }, "@ng-bootstrap/ng-bootstrap": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.1.tgz", - "integrity": "sha512-7etP9X9jKIkbuDzU3ngI2jQhHQDZxIu0ErvlkHb7u7YH9akIOLVkXvz2mTMvcFABWZhze64UjFuEgR46b6WGSw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-5.1.4.tgz", + "integrity": "sha512-UtL9GBkAMy0O/0Rkc4DG1WoFDWhAnAdvsQuJ1IFLmlN2v6HAX+E84tgUK0n15WLBhYBXXuhRx0dIW2jafjg1xQ==", "requires": { "tslib": "^1.9.0" } }, "@ngtools/webpack": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.0.2.tgz", - "integrity": "sha512-5P0FHF4p5H/G9xGjOG9meDViXcdW3RPdJa2nX1gGpii3/dhFhmU4pxjKn1Bfs4x+PB9FQQvhSvGIBLNf+B4y5Q==", + "version": "8.3.20", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-8.3.20.tgz", + "integrity": "sha512-2e9Kat6PQEzqtNsZZpnOIvoDzyGwMELiuBYBa9keZeaXOD6TxjSyCRzHHXAldAXqvh4Uj2qjTid54Sy14CxtsQ==", "dev": true, "requires": { - "@angular-devkit/core": "8.0.2", + "@angular-devkit/core": "8.3.20", "enhanced-resolve": "4.1.0", "rxjs": "6.4.0", "tree-kill": "1.2.1", - "webpack-sources": "1.3.0" + "webpack-sources": "1.4.3" }, "dependencies": { "rxjs": { @@ -801,6 +824,12 @@ "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true }, + "@openapitools/openapi-generator-cli": { + "version": "0.0.14-4.0.2", + "resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-0.0.14-4.0.2.tgz", + "integrity": "sha512-x4gKaGNgG5Eqt43B4V814Bp0zUBT5h9/K0Tz4oTi5wGy+5sqU5/gElKys0jmM6wvEio2OXJm728BIFuKPuFi5w==", + "dev": true + }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -811,28 +840,28 @@ } }, "@schematics/angular": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.0.2.tgz", - "integrity": "sha512-mN9qsoBVpbY1Q7BP8WaiHsyDv+kl5WrIHw/9OASLrGZcoVY7+oj2CfznVq0XRwvVjDtm6ZFor5ruxLF9dQUOSw==", + "version": "8.3.20", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-8.3.20.tgz", + "integrity": "sha512-Y20pSJhQ0KQd8Tk2kPQlmpRDNDaoIKMeOOGLT2FgCFrumxZXuIbBgN9fGDgW40iI2sq80bccOeo24RKkn3QpcA==", "dev": true, "requires": { - "@angular-devkit/core": "8.0.2", - "@angular-devkit/schematics": "8.0.2" + "@angular-devkit/core": "8.3.20", + "@angular-devkit/schematics": "8.3.20" } }, "@schematics/update": { - "version": "0.800.2", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.800.2.tgz", - "integrity": "sha512-HPjbzr/LfFLdMzi6zMQK8mPyLw+nt+m7OQsdoeOkFgHkHVfHrKQWcOGt4A0D6keDJ6K2g7W5CsqFR6/GMac7Mg==", + "version": "0.803.20", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.803.20.tgz", + "integrity": "sha512-MseLreuHdnSLUEnRxZFVSHKKK+3mGXH12SgOSeirwATIL22Df74+Q5BYvsge/Kd2k6s9ak/NCuRXG7FAo8mkMA==", "dev": true, "requires": { - "@angular-devkit/core": "8.0.2", - "@angular-devkit/schematics": "8.0.2", + "@angular-devkit/core": "8.3.20", + "@angular-devkit/schematics": "8.3.20", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", - "pacote": "9.5.0", + "pacote": "9.5.5", "rxjs": "6.4.0", - "semver": "6.0.0", + "semver": "6.3.0", "semver-intersect": "1.4.0" }, "dependencies": { @@ -847,10 +876,16 @@ } } }, + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true + }, "@types/babel__core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.2.tgz", - "integrity": "sha512-cfCCrFmiGY/yq0NuKNxIQvZFy9kY/1immpSpTngOnyIbD4+eJOG5mxphhHDv3CHL9GltO4GcKr54kGBg3RNdbg==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.3.tgz", + "integrity": "sha512-8fBo0UR2CcwWxeX7WIIgJ7lXjasFxoYgRnFHUj+hRvKkpiBJbxhdAPTCY6/ZKM0uxANFVzt4yObSLuTiTnazDA==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -861,9 +896,9 @@ } }, "@types/babel__generator": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.0.2.tgz", - "integrity": "sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.1.tgz", + "integrity": "sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==", "dev": true, "requires": { "@babel/types": "^7.0.0" @@ -880,29 +915,44 @@ } }, "@types/babel__traverse": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.7.tgz", - "integrity": "sha512-CeBpmX1J8kWLcDEnI3Cl2Eo6RfbGvzUctA+CjZUhOKDFbLfcr7fc4usEqLNWetrlJd7RhAkyYe2czXop4fICpw==", + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.0.8.tgz", + "integrity": "sha512-yGeB2dHEdvxjP0y4UbRtQaSkXJ9649fYCmIdRoul5kfAoGCwxuCbMhag0k3RPfnuh9kPGm8x89btcfDEXdVWGw==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, "@types/chai": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", - "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.7.tgz", + "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==", "dev": true }, "@types/chai-string": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.1.tgz", - "integrity": "sha512-aRNMs6TKgjgPlCHwDfq/YNy5VtRR2hJ4AUWByddrT0TRVVD8eX4MiHW6/iHvmQHRlVuuPZcwnTUE7b4yFt7bEA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/chai-string/-/chai-string-1.4.2.tgz", + "integrity": "sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q==", "dev": true, "requires": { "@types/chai": "*" } }, + "@types/concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -915,6 +965,15 @@ "integrity": "sha1-XHiBSdhabPj/X18ACs3ZEs3qQnQ=", "dev": true }, + "@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", @@ -952,18 +1011,18 @@ } }, "@types/jest": { - "version": "24.0.14", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.14.tgz", - "integrity": "sha512-IxS2AO0nOr4zrpKfRCxobQUb1bSK6ejodZ7odCzHXMjsASCI8J10N8qVQhrCjvJTc3bUjGGeuD+ytKZqyhajqQ==", + "version": "24.0.23", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-24.0.23.tgz", + "integrity": "sha512-L7MBvwfNpe7yVPTXLn32df/EK+AMBFAFvZrRuArGs7npEWnlziUXK+5GMIUTI4NIuwok3XibsjXCs5HxviYXjg==", "dev": true, "requires": { - "@types/jest-diff": "*" + "jest-diff": "^24.3.0" } }, - "@types/jest-diff": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jest-diff/-/jest-diff-20.0.1.tgz", - "integrity": "sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA==", + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==", "dev": true }, "@types/minimatch": { @@ -979,9 +1038,9 @@ "dev": true }, "@types/node": { - "version": "10.12.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.27.tgz", - "integrity": "sha512-e9wgeY6gaY21on3ve0xAjgBVjGDWq/xUteK0ujsE53bUoxycMkqfnkUgMt6ffZtykZ5X12Mg3T7Pw4TRCObDKg==", + "version": "12.12.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.17.tgz", + "integrity": "sha512-Is+l3mcHvs47sKy+afn2O1rV4ldZFU7W8101cNlOd+MRbjM4Onida8jSZnJdTe/0Pcf25g9BNIUsuugmE6puHA==", "dev": true }, "@types/normalize-package-data": { @@ -996,10 +1055,16 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, + "@types/qs": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.0.tgz", + "integrity": "sha512-c4zji5CjWv1tJxIZkz1oUtGcdOlsH3aza28Nqmm+uNDWBRHoMsjooBEN4czZp1V3iXPihE/VRUOBqg+4Xq0W4g==", + "dev": true + }, "@types/selenium-webdriver": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.0.tgz", - "integrity": "sha512-x/OwFhZaZBkucIl/SuooCmkdu1V6LBfHcBeBV5rj05Co8EenuL1KJiIRUU/Da2hscoqbXyF3QuWDOZZ4sLVA5Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.5.tgz", + "integrity": "sha512-ma1aL1znI3ptEbSQgbywgadrRCJouPIACSfOl/bPwu/TPNSyyE/+o9jZ6+bpDVTtIdksZuVKpq4SR1ip3DRduw==", "dev": true }, "@types/stack-utils": { @@ -1009,11 +1074,81 @@ "dev": true }, "@types/yargs": { - "version": "12.0.12", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-12.0.12.tgz", - "integrity": "sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw==", + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.5.tgz", + "integrity": "sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-13.1.0.tgz", + "integrity": "sha512-gCubfBUZ6KxzoibJ+SCUc/57Ms1jz5NjHe4+dI2krNmU5zCPAphyLJYyTOg06ueIyfj+SaCUqmzun7ImlxDcKg==", "dev": true }, + "@typescript-eslint/eslint-plugin": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.11.0.tgz", + "integrity": "sha512-G2HHA1vpMN0EEbUuWubiCCfd0R3a30BB+UdvnFkxwZIxYEGOrWEXDv8tBFO9f44CWc47Xv9lLM3VSn4ORLI2bA==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.11.0", + "eslint-utils": "^1.4.3", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/eslint-plugin-tslint": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin-tslint/-/eslint-plugin-tslint-2.11.0.tgz", + "integrity": "sha512-mZ2HqY3ZoC32mFB2LjN/XanP/Op2aylVWpv+qmTjbtoVl7ZkuDLZKoqoJ7KHVchE77/pw9YDDz9EG49ee5veSQ==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "2.11.0", + "lodash.memoize": "^4.1.2" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.11.0.tgz", + "integrity": "sha512-YxcA/y0ZJaCc/fB/MClhcDxHI0nOBB7v2/WxBju2cOTanX7jO9ttQq6Fy4yW9UaY5bPd9xL3cun3lDVqk67sPQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.11.0", + "eslint-scope": "^5.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.11.0.tgz", + "integrity": "sha512-DyGXeqhb3moMioEFZIHIp7oXBBh7dEfPTzGrlyP0Mi9ScCra4SWEGs3kPd18mG7Sy9Wy8z88zmrw5tSGL6r/6A==", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.11.0", + "@typescript-eslint/typescript-estree": "2.11.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.11.0.tgz", + "integrity": "sha512-HGY4+d4MagO6cKMcKfIKaTMxcAv7dEVnji2Zi+vi5VV8uWAM631KjAB5GxFcexMYrwKT0EekRiiGK1/Sd7VFGA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash.unescape": "4.0.1", + "semver": "^6.3.0", + "tsutils": "^3.17.1" + } + }, "@webassemblyjs/ast": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", @@ -1219,9 +1354,9 @@ } }, "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.3.tgz", + "integrity": "sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==", "dev": true }, "accepts": { @@ -1235,21 +1370,15 @@ } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", - "dev": true - }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", "dev": true }, "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", "dev": true, "requires": { "acorn": "^6.0.1", @@ -1257,13 +1386,19 @@ }, "dependencies": { "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", "dev": true } } }, + "acorn-jsx": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "dev": true + }, "acorn-walk": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", @@ -1300,10 +1435,20 @@ "humanize-ms": "^1.2.1" } }, + "aggregate-error": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-1.0.0.tgz", + "integrity": "sha1-iINE2tAiCnLjr1CQYRf0h3GSX6w=", + "dev": true, + "requires": { + "clean-stack": "^1.0.0", + "indent-string": "^3.0.0" + } + }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "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", @@ -1336,15 +1481,6 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, - "angular-router-loader": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/angular-router-loader/-/angular-router-loader-0.8.5.tgz", - "integrity": "sha512-8wggCTKGgzB1o8co3Wvj+p9pKN7T7q3C477lEz3NLjvPVzUti8rv9i45Di+4aO/k+HvzGh3s8QdNlXU2Bl4avQ==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2" - } - }, "angular2-template-loader": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/angular2-template-loader/-/angular2-template-loader-0.6.2.tgz", @@ -1352,44 +1488,60 @@ "dev": true, "requires": { "loader-utils": "^0.2.15" + } + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", + "dev": true + }, + "ansi-align": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", + "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", + "dev": true, + "requires": { + "string-width": "^2.0.0" }, "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "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 }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "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": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "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" } } } }, - "ansi": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", - "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=", - "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==", + "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 }, "ansi-cyan": { @@ -1402,10 +1554,13 @@ } }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-html": { "version": "0.0.7", @@ -1423,9 +1578,9 @@ } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, "ansi-styles": { @@ -1493,9 +1648,9 @@ } }, "arg": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.1.tgz", - "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz", + "integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", "dev": true }, "argparse": { @@ -1714,9 +1869,9 @@ "dev": true }, "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "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": { @@ -1732,18 +1887,43 @@ "dev": true }, "autoprefixer": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.6.0.tgz", - "integrity": "sha512-kuip9YilBqhirhHEGHaBTZKXL//xxGnzvsD0FtBQa6z+A69qZD6s/BAX9VzDF1i9VKDquTJDQaPLSEhOnL6FvQ==", + "version": "9.7.3", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.7.3.tgz", + "integrity": "sha512-8T5Y1C5Iyj6PgkPSFd0ODvK9DIleuPKUPYniNxybS47g2k2wFgLZ46lGQHlBuGKIAEV8fbCDfKCCRS1tvOgc3Q==", "dev": true, "requires": { - "browserslist": "^4.6.1", - "caniuse-lite": "^1.0.30000971", + "browserslist": "^4.8.0", + "caniuse-lite": "^1.0.30001012", "chalk": "^2.4.2", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", - "postcss": "^7.0.16", - "postcss-value-parser": "^3.3.1" + "postcss": "^7.0.23", + "postcss-value-parser": "^4.0.2" + } + }, + "aws-sdk": { + "version": "2.533.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.533.0.tgz", + "integrity": "sha512-OSe7C0jnBdgfzedOtK+TgBEwtJaaZovm+Q2fbqIlfhUWg3rhhkt3oLyQ9bRD30/CFaunLhLr/8HAAN+/x+DWAA==", + "dev": true, + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + }, + "dependencies": { + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "dev": true + } } }, "aws-sign2": { @@ -1753,9 +1933,9 @@ "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", + "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==", "dev": true }, "axios": { @@ -1769,12 +1949,13 @@ } }, "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.1.1.tgz", + "integrity": "sha512-lF98xa/yvy6j3fBHAgQXIYl+J4eZadOSqsPojemUqClzNbBV38wWGpUbQbVEyf4eUF5yF7eHmGgGA2JiHyjeqw==", "dev": true, "requires": { - "ast-types-flow": "0.0.7" + "@babel/runtime": "^7.7.4", + "@babel/runtime-corejs3": "^7.7.4" } }, "babel-code-frame": { @@ -1813,6 +1994,12 @@ "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 + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -1840,16 +2027,16 @@ } }, "babel-jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.8.0.tgz", - "integrity": "sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-24.9.0.tgz", + "integrity": "sha512-ntuddfyiN+EhMw58PTNL1ph4C9rECiQXjI4nMMBKBaNjXvqLdkXpPRcMSr4iyBrJg/+wz9brFUD6RhOAT6r4Iw==", "dev": true, "requires": { - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", "@types/babel__core": "^7.1.0", "babel-plugin-istanbul": "^5.1.0", - "babel-preset-jest": "^24.6.0", + "babel-preset-jest": "^24.9.0", "chalk": "^2.4.2", "slash": "^2.0.0" }, @@ -1875,9 +2062,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz", - "integrity": "sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.9.0.tgz", + "integrity": "sha512-2EMA2P8Vp7lG0RAzr4HXqtYwacfMErOuv1U3wrvxHX6rD1sV6xS3WXG3r8TRQ2r6w8OhvSdWt+z41hQNwNm3Xw==", "dev": true, "requires": { "@types/babel__traverse": "^7.0.6" @@ -1900,13 +2087,13 @@ } }, "babel-preset-jest": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz", - "integrity": "sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz", + "integrity": "sha512-izTUuhE4TMfTRPF92fFwD2QfdXaZW08qvWTFCI51V8rW5x00UuPgc3ajRoWofXOuxjfcOM5zzSYsQS3H8KGCAg==", "dev": true, "requires": { "@babel/plugin-syntax-object-rest-spread": "^7.0.0", - "babel-plugin-jest-hoist": "^24.6.0" + "babel-plugin-jest-hoist": "^24.9.0" } }, "babel-runtime": { @@ -1920,9 +2107,9 @@ }, "dependencies": { "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", "dev": true }, "regenerator-runtime": { @@ -2025,9 +2212,9 @@ "dev": true }, "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "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": { @@ -2061,11 +2248,53 @@ } }, "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", "dev": true }, + "bin-version": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-2.0.0.tgz", + "integrity": "sha1-LMldg7Uive8umZeOdq61SRyBFP8=", + "dev": true, + "requires": { + "execa": "^0.1.1", + "find-versions": "^2.0.0" + }, + "dependencies": { + "execa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.1.1.tgz", + "integrity": "sha1-sJwqkwm8DvBQFHlHLbMYD41MPt0=", + "dev": true, + "requires": { + "cross-spawn-async": "^2.1.1", + "object-assign": "^4.0.1", + "strip-eof": "^1.0.0" + } + } + } + }, + "bin-version-check": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-3.0.0.tgz", + "integrity": "sha1-4k6/prY8sDh8X8F0+G5cyBLKfMk=", + "dev": true, + "requires": { + "bin-version": "^2.0.0", + "semver": "^5.1.0", + "semver-truncate": "^1.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 + } + } + }, "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", @@ -2073,11 +2302,21 @@ "dev": true }, "binaryextensions": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.2.tgz", - "integrity": "sha512-xVNN69YGDghOqCCtA6FI7avYrr02mTJjOgB0/f1VPD3pJC8QEvjTKWc4epDx8AqxxA75NI0QpVM2gPJXUbE4Tg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.2.0.tgz", + "integrity": "sha512-bHhs98rj/7i/RZpCSJ3uk55pLXOItjIrh2sRQZSM6OoktScX+LxJzvlU+FELp9j3TdcddTmmYArLSGptCTwjuw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "blob": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", @@ -2102,9 +2341,9 @@ } }, "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, "bn.js": { @@ -2211,10 +2450,70 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, + "boolean": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.0.tgz", + "integrity": "sha512-OElxJ1lUSinuoUnkpOgLmxp0DC4ytEhODEL6QJU0NpxE/mI4rUSh8h1P1Wkvfi3xQEBcxXR2gBIPNYNuaFcAbQ==", + "dev": true + }, "bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", + "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==" + }, + "boxen": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", + "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", + "dev": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^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 + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "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 + }, + "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" + } + }, + "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" + } + } + } }, "brace-expansion": { "version": "1.1.11", @@ -2591,20 +2890,20 @@ } }, "browserslist": { - "version": "4.6.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.6.tgz", - "integrity": "sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA==", + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.3.tgz", + "integrity": "sha512-iU43cMMknxG1ClEZ2MDKeonKE1CCrFVkQK2AqO2YWFmvIrx4JWrvQ4w4hQez6EpVI8rHTtqh/ruHHDHSOKxvUg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000984", - "electron-to-chromium": "^1.3.191", - "node-releases": "^1.1.25" + "caniuse-lite": "^1.0.30001017", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.44" } }, "browserstack": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz", - "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", + "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" @@ -2632,9 +2931,9 @@ "dev": true }, "bser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.0.tgz", - "integrity": "sha512-8zsjWrQkkBoLK6uxASk1nJ2SKv97ltiGDo6A3wA0/yRPz+CwmEyDo0hUrhIuukG2JHpAl3bvFIixw2/3Hi0DOg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", "dev": true, "requires": { "node-int64": "^0.4.0" @@ -2722,9 +3021,9 @@ "dev": true }, "cacache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", - "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", + "version": "12.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", + "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", "dev": true, "requires": { "bluebird": "^3.5.5", @@ -2732,6 +3031,7 @@ "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", @@ -2741,6 +3041,17 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "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" + } + } } }, "cache-base": { @@ -2761,9 +3072,9 @@ } }, "cache-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.0.0.tgz", - "integrity": "sha512-QTLCBoDju/InytQyQNHsn0q0xDlInCtId09CW8BLhFZY72GcqDHGbJdSiulsv1YBwB4zvy2QhioPADoSAl7qjg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", "dev": true, "requires": { "buffer-json": "^2.0.0", @@ -2771,7 +3082,70 @@ "loader-utils": "^1.2.3", "mkdirp": "^0.5.1", "neo-async": "^2.6.1", - "schema-utils": "^1.0.0" + "schema-utils": "^2.0.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "dev": true, + "requires": { + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + } } }, "call-me-maybe": { @@ -2787,6 +3161,14 @@ "dev": true, "requires": { "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } } }, "caller-path": { @@ -2805,9 +3187,9 @@ "dev": true }, "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, "camel-case": { @@ -2858,9 +3240,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000985", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz", - "integrity": "sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w==", + "version": "1.0.30001020", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001020.tgz", + "integrity": "sha512-yWIvwA68wRHKanAVS1GjN8vajAv7MBFshullKCeq/eKpK7pJBVDgFFEqvgWTkcP2+wIDeQGYFRXECjKZnLkUjA==", "dev": true }, "canonical-path": { @@ -2943,18 +3325,18 @@ "dev": true }, "chevrotain": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-4.4.0.tgz", - "integrity": "sha512-CS0auzIhlLxo9RCVarVZJIsKj339jJrLIdCbX3rwk/kTu7+VkYdiXiAD8aJOXJEcRc1GGcbOQ587e/85+xLxaA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-6.5.0.tgz", + "integrity": "sha512-BwqQ/AgmKJ8jcMEjaSnfMybnKMgGTrtDKowfTP3pX4jwVy0kNjRsT/AP6h+wC3+3NC+X8X15VWBnTCQlX+wQFg==", "dev": true, "requires": { "regexp-to-ast": "0.4.0" } }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", + "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", @@ -2972,9 +3354,9 @@ } }, "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", + "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==", "dev": true }, "chrome-trace-event": { @@ -2987,9 +3369,9 @@ } }, "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", "dev": true }, "cipher-base": { @@ -3002,23 +3384,6 @@ "safe-buffer": "^5.0.1" } }, - "class-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/class-extend/-/class-extend-0.1.2.tgz", - "integrity": "sha1-gFeoKwD1P4Kl1ixQ74z/3sb6vDQ=", - "dev": true, - "requires": { - "object-assign": "^2.0.0" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", - "dev": true - } - } - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -3059,15 +3424,39 @@ } } }, + "clean-stack": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-1.3.0.tgz", + "integrity": "sha1-noIVAa6XmYbEax1m0tQy2y/UrjE=", + "dev": true + }, + "cli-boxes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", + "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", + "dev": true + }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "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": "^2.0.0" + "restore-cursor": "^3.1.0" } }, + "cli-list": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/cli-list/-/cli-list-0.2.0.tgz", + "integrity": "sha1-fmc+4N05phGkhkduU/PGs5QctYI=", + "dev": true + }, + "cli-spinners": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz", + "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==", + "dev": true + }, "cli-table": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", @@ -3110,6 +3499,12 @@ "number-is-nan": "^1.0.0" } }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", + "dev": true + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3149,6 +3544,28 @@ "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 + }, + "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 + }, + "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" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3173,15 +3590,33 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "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": { - "for-own": "^1.0.0", "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "dev": true, + "requires": { + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" } }, "clone-stats": { @@ -3225,9 +3660,9 @@ "dev": true }, "codelyzer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-5.1.0.tgz", - "integrity": "sha512-QiyY2/oDQnYx4mAVEDqr+z9MwrOto18tQFjExiuRChXCy0yvngS5fQpWIxvAGpbOmZFiR1PRTRLbEI71u10maA==", + "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", @@ -3301,9 +3736,9 @@ "dev": true }, "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "colorspace": { @@ -3326,9 +3761,9 @@ } }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "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 }, "common-tags": { @@ -3394,12 +3829,12 @@ "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==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { - "mime-db": ">= 1.40.0 < 2" + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -3494,6 +3929,47 @@ } } }, + "config-chain": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", + "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz", + "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, "connect": { "version": "3.6.6", "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", @@ -3530,13 +4006,10 @@ "dev": true }, "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", - "dev": true, - "requires": { - "date-now": "^0.1.4" - } + "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", @@ -3568,9 +4041,9 @@ "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==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -3608,6 +4081,17 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" + }, + "dependencies": { + "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" + } + } } }, "copy-descriptor": { @@ -3617,12 +4101,12 @@ "dev": true }, "copy-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-PlZRs9CUMnAVylZq+vg2Juew662jWtwOXOqH4lbQD9ZFhRG9R7tVStOgHt21CBGVq7k5yIJaz8TXDLSjV+Lj8Q==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", "dev": true, "requires": { - "cacache": "^11.3.2", + "cacache": "^12.0.3", "find-cache-dir": "^2.1.0", "glob-parent": "^3.1.0", "globby": "^7.1.1", @@ -3630,12 +4114,18 @@ "loader-utils": "^1.2.3", "minimatch": "^3.0.4", "normalize-path": "^3.0.0", - "p-limit": "^2.2.0", + "p-limit": "^2.2.1", "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "serialize-javascript": "^2.1.2", "webpack-log": "^2.0.0" }, "dependencies": { + "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 + }, "find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", @@ -3647,6 +4137,26 @@ "pkg-dir": "^3.0.0" } }, + "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" + } + }, + "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" + } + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -3657,6 +4167,12 @@ "semver": "^5.6.0" } }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -3672,18 +4188,35 @@ "find-up": "^3.0.0" } }, + "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" + } + }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "core-js": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.1.3.tgz", - "integrity": "sha512-PWZ+ZfuaKf178BIAg+CRsljwjIMRV8MY00CbZczkR6Zk5LfkSkjGoaab3+bqRQWVITNZxQB7TFYz+CFcyuamvA==" + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.5.0.tgz", + "integrity": "sha512-Ifh3kj78gzQ7NAoJXeTu+XwzDld0QRIwjBLRqAMhuLhP3d2Av5wmgE9ycfnvK6NAEjTkQ1sDPeoEZAWO3Hx1Uw==" + }, + "core-js-pure": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.3.tgz", + "integrity": "sha512-4LhJ4fw0sC4/8X5krM9hI5oQ3cgYHYojWwwWnQKjC6k6vf/qIVS9d0r3+Bdn+FUADgRpD0xzPFQ9P7cOeuIwlA==", + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -3703,6 +4236,16 @@ "parse-json": "^4.0.0" }, "dependencies": { + "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" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -3712,6 +4255,12 @@ "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true } } }, @@ -3775,9 +4324,37 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "cross-spawn-async": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", + "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "dev": true, + "requires": { + "lru-cache": "^4.0.0", + "which": "^1.2.8" + }, + "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 } } @@ -3801,6 +4378,12 @@ "randomfill": "^1.0.3" } }, + "crypto-random-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", + "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", + "dev": true + }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -3818,9 +4401,9 @@ } }, "css-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.0.0.tgz", - "integrity": "sha512-WR6KZuCkFbnMhRrGPlkwAA7SSCtwqPwpyXJAPhotYkYsc0mKU9n/fu5wufy4jl2WhBw9Ia8gUQMIp/1w98DuPw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.3.2.tgz", + "integrity": "sha512-4XSiURS+YEK2fQhmSaM1onnUm0VKWNf6WWBYjkp9YbSDGCBTVZ5XOM6Gkxo8tLgQlzkZOBJvk9trHlDk4gjEYg==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -3828,25 +4411,51 @@ "icss-utils": "^4.1.1", "loader-utils": "^1.2.3", "normalize-path": "^3.0.0", - "postcss": "^7.0.17", + "postcss": "^7.0.23", "postcss-modules-extract-imports": "^2.0.0", "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.0", + "postcss-modules-scope": "^2.1.1", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.0", - "schema-utils": "^1.0.0" + "postcss-value-parser": "^4.0.2", + "schema-utils": "^2.6.0" }, "dependencies": { + "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 + }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "postcss-value-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", - "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -3881,19 +4490,19 @@ } }, "css-tree": { - "version": "1.0.0-alpha.33", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.33.tgz", - "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { "mdn-data": "2.0.4", - "source-map": "^0.5.3" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -4003,36 +4612,12 @@ "dev": true }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.29" - }, - "dependencies": { - "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", - "dev": true, - "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" - } - }, - "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", - "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 - } + "css-tree": "1.0.0-alpha.37" } }, "cssom": { @@ -4066,9 +4651,9 @@ "dev": true }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", "dev": true }, "d3": { @@ -4110,9 +4695,9 @@ }, "dependencies": { "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", @@ -4128,12 +4713,6 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "dateformat": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", @@ -4210,10 +4789,18 @@ } }, "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "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" + } }, "deep-extend": { "version": "0.6.0", @@ -4237,6 +4824,21 @@ "ip-regex": "^2.1.0" } }, + "default-uid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-uid/-/default-uid-1.0.0.tgz", + "integrity": "sha1-/O+p359axAyJFtkS3R/hFGqjxZ4=", + "dev": true + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4333,6 +4935,15 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "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" + } } } }, @@ -4361,9 +4972,9 @@ "dev": true }, "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "requires": { "inherits": "^2.0.1", @@ -4408,6 +5019,14 @@ "requires": { "acorn": "^5.2.1", "defined": "^1.0.0" + }, + "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + } } }, "dev-ip": { @@ -4450,9 +5069,9 @@ "dev": true }, "diff-sequences": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.3.0.tgz", - "integrity": "sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-24.9.0.tgz", + "integrity": "sha512-Dj6Wk3tWyTE+Fo1rW8v0Xhwk80um6yFYKbuAxc9c3EZxIHFDYwbi34Uk42u1CdnIiVorvt4RmlSDjIPyzGC2ew==", "dev": true }, "diffie-hellman": { @@ -4517,6 +5136,15 @@ "buffer-indexof": "^1.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", @@ -4527,13 +5155,21 @@ } }, "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } } }, "domain-browser": { @@ -4585,6 +5221,16 @@ "is-obj": "^1.0.0" } }, + "downgrade-root": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/downgrade-root/-/downgrade-root-1.2.2.tgz", + "integrity": "sha1-UxMZcVsOgf/MIusoR4uidkPhLGw=", + "dev": true, + "requires": { + "default-uid": "^1.0.0", + "is-root": "^1.0.0" + } + }, "drange": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", @@ -4638,21 +5284,13 @@ } }, "editions": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz", - "integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/editions/-/editions-2.3.0.tgz", + "integrity": "sha512-jeXYwHPKbitU1l14dWlsl5Nm+b1Hsm7VX73BsrQ4RVwEcAQQIPFHTZAbVtuIGxZBrpdT2FXd8lbtrNBrzZxIsA==", "dev": true, "requires": { - "errlop": "^1.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "errlop": "^2.0.0", + "semver": "^6.3.0" } }, "ee-first": { @@ -4668,9 +5306,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.200", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.200.tgz", - "integrity": "sha512-PUurrpyDA74MuAjJRD+79ss5BqJlU3mdArRbuu4wO/dt6jc3Ic/6BDmFJxkdwbfq39cHf/XKm2vW98XSvut9Dg==", + "version": "1.3.332", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.332.tgz", + "integrity": "sha512-AP2HkLhfSOIxP7gDjlyZ4ywGWIcxRMZoU9+JriuVkQe2pSLDdWBsE6+eI6BQOqun1dohLrUTOPHsQLLhhFA7Eg==", "dev": true }, "elegant-spinner": { @@ -4680,9 +5318,9 @@ "dev": true }, "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", + "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", "dev": true, "requires": { "bn.js": "^4.4.0", @@ -4695,9 +5333,9 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "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": { @@ -4731,9 +5369,9 @@ } }, "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "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" @@ -4762,6 +5400,19 @@ "ms": "2.0.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" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4788,15 +5439,15 @@ } }, "engine.io-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", - "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", + "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", "dev": true, "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", + "debug": "~4.1.0", + "engine.io-parser": "~2.2.0", "has-cors": "1.1.0", "indexof": "0.0.1", "parseqs": "0.0.5", @@ -4811,28 +5462,13 @@ "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 } } }, "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==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", + "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", "dev": true, "requires": { "after": "0.8.2", @@ -4854,9 +5490,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", "dev": true }, "env-paths": { @@ -4888,13 +5524,10 @@ "dev": true }, "errlop": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz", - "integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==", - "dev": true, - "requires": { - "editions": "^2.1.2" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/errlop/-/errlop-2.0.0.tgz", + "integrity": "sha512-z00WIrQhtOMUnjdTG0O4f6hMG64EVccVDBy2WwgjcF8S4UB1exGYuc2OFwmdQmsJwLQVEIHWHPCz/omXXgAZHw==", + "dev": true }, "errno": { "version": "0.1.7", @@ -4906,13 +5539,12 @@ } }, "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", "dev": true, "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" + "string-template": "~0.2.1" } }, "error-ex": { @@ -4925,32 +5557,37 @@ } }, "error-stack-parser": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", - "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", "dev": true, "requires": { - "stackframe": "^1.0.4" + "stackframe": "^1.1.1" } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", + "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", "dev": true, "requires": { - "es-to-primitive": "^1.2.0", + "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "has-symbols": "^1.0.1", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { "is-callable": "^1.1.4", @@ -4958,6 +5595,12 @@ "is-symbol": "^1.0.2" } }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "es6-promise": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", @@ -4996,9 +5639,9 @@ "dev": true }, "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", + "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", "dev": true, "requires": { "esprima": "^3.1.3", @@ -5023,47 +5666,253 @@ } } }, - "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==", + "eslint": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", + "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", "dev": true, "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "inquirer": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.3.tgz", + "integrity": "sha512-+OiOVeVydu4hnCGLCSX+wedovR/Yzskv9BFqUNNKq9uU2qg7LCcCo3R86S2E7WLo0y/x2pnEZfZe1CoYnORUAw==", + "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.5.3", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true + } } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "eslint-config-jhipster": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-jhipster/-/eslint-config-jhipster-0.0.1.tgz", + "integrity": "sha512-E9/05t3+6V2K9YrJwsLmrblGgYnYfw62o/ja+Hr9wz3+AX2nG6gtycMW7LrS4alFuar1SGhbAyT3orTR5ur9MQ==", "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==", + "eslint-config-prettier": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz", + "integrity": "sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ==", "dev": true, "requires": { - "estraverse": "^4.1.0" + "get-stdin": "^6.0.0" } }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "eslint-loader": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-3.0.3.tgz", + "integrity": "sha512-+YRqB95PnNvxNp1HEjQmvf9KNvCin5HXYYseOXVC2U0KEcw4IkQ2IQEBG46j7+gW39bMzeu0GsUhVbBY3Votpw==", + "dev": true, + "requires": { + "fs-extra": "^8.1.0", + "loader-fs-cache": "^1.0.2", + "loader-utils": "^1.2.3", + "object-hash": "^2.0.1", + "schema-utils": "^2.6.1" + }, + "dependencies": { + "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 + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + }, + "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 + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "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": { @@ -5073,9 +5922,9 @@ "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", "dev": true }, "eventsource": { @@ -5098,9 +5947,9 @@ } }, "exec-sh": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.2.tgz", - "integrity": "sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz", + "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==", "dev": true }, "execa": { @@ -5118,6 +5967,15 @@ "strip-eof": "^1.0.0" } }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", @@ -5190,17 +6048,17 @@ } }, "expect": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-24.8.0.tgz", - "integrity": "sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-24.9.0.tgz", + "integrity": "sha512-wvVAx8XIol3Z5m9zvZXiyZOQ+sRJqNTIm6sGjdWlaZIeupQGO3WbYI+15D/AmEwZywL6wtJkbAbJtzkOfBuR0Q==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-styles": "^3.2.0", - "jest-get-type": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-regex-util": "^24.3.0" + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-regex-util": "^24.9.0" } }, "express": { @@ -5504,9 +6362,9 @@ "dev": true }, "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", "dev": true }, "fastparse": { @@ -5525,12 +6383,12 @@ } }, "fb-watchman": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", - "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", "dev": true, "requires": { - "bser": "^2.0.0" + "bser": "2.1.1" } }, "fbjs": { @@ -5551,6 +6409,15 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", "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, + "requires": { + "asap": "~2.0.3" + } } } }, @@ -5567,24 +6434,74 @@ "dev": true }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "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-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.0.0.tgz", - "integrity": "sha512-roAbL6IdSGczwfXxhMi6Zq+jD4IfUpL0jWHD7fvmjdOVb7xBfdRUHe4LpBgO23VtVK5AW1OlWZo0p34Jvx3iWg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.0.2.tgz", + "integrity": "sha512-QMiQ+WBkGLejKe81HU8SZ9PovsU/5uaLo0JdTCEXOYv7i7jfAjHZi1tcwp9tSASJPOmmHZtbdCervFmXMH/Dcg==", "dev": true, "requires": { - "loader-utils": "^1.2.2", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "filesize": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", @@ -5614,6 +6531,12 @@ } } }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, "finalhandler": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", @@ -5647,9 +6570,9 @@ } }, "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==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", + "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -5666,27 +6589,26 @@ "locate-path": "^3.0.0" } }, - "findup-sync": { + "find-versions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-2.0.0.tgz", + "integrity": "sha1-KtkNSQ9oKMGqQCks9wmsMxghDDw=", + "dev": true, + "requires": { + "array-uniq": "^1.0.0", + "semver-regex": "^1.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, "requires": { "detect-file": "^1.0.0", - "is-glob": "^3.1.0", + "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" - }, - "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" - } - } } }, "first-chunk-stream": { @@ -5706,6 +6628,34 @@ "is-buffer": "~2.0.3" } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "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", @@ -5754,14 +6704,11 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "foreachasync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", + "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=", + "dev": true }, "forever-agent": { "version": "0.6.1", @@ -5770,14 +6717,14 @@ "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.3.6.tgz", - "integrity": "sha512-QcF2eh2IWLyvIA9TYw41chGcGz+BfEAdjoDdIdQkzUARcljgkozEkYATKnY/3amT+Dx4FHJpCTCyJTZmvHd48g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", "dev": true, "requires": { "babel-code-frame": "^6.22.0", "chalk": "^2.4.1", - "chokidar": "^2.0.4", + "chokidar": "^3.3.0", "micromatch": "^3.1.10", "minimatch": "^3.0.4", "semver": "^5.6.0", @@ -5785,52 +6732,151 @@ "worker-rpc": "^0.1.0" }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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" + } + }, + "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 - } - } - }, - "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 - }, - "friendly-errors-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", - "dev": true, - "requires": { + }, + "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" + } + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "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" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "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" + } + }, + "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-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "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" + } + } + } + }, + "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 + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "dev": true, + "requires": { "chalk": "^1.1.3", "error-stack-parser": "^2.0.0", "string-width": "^2.0.0" @@ -5861,6 +6907,39 @@ "supports-color": "^2.0.0" } }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "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" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -5900,12 +6979,12 @@ } }, "fs-minipass": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", - "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "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.2.1" + "minipass": "^2.6.0" } }, "fs-write-stream-atomic": { @@ -5927,14 +7006,15 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz", + "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==", "dev": true, "optional": true, "requires": { + "bindings": "^1.5.0", "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "node-pre-gyp": "*" }, "dependencies": { "abbrev": { @@ -5946,7 +7026,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -5967,19 +7048,21 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "chownr": { - "version": "1.1.1", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true @@ -5987,17 +7070,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -6006,7 +7092,7 @@ "optional": true }, "debug": { - "version": "4.1.1", + "version": "3.2.6", "bundled": true, "dev": true, "optional": true, @@ -6033,12 +7119,12 @@ "optional": true }, "fs-minipass": { - "version": "1.2.5", + "version": "1.2.7", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.6.0" } }, "fs.realpath": { @@ -6064,7 +7150,7 @@ } }, "glob": { - "version": "7.1.3", + "version": "7.1.6", "bundled": true, "dev": true, "optional": true, @@ -6093,7 +7179,7 @@ } }, "ignore-walk": { - "version": "3.0.1", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true, @@ -6112,9 +7198,10 @@ } }, "inherits": { - "version": "2.0.3", + "version": "2.0.4", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -6126,6 +7213,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -6140,6 +7228,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -6147,53 +7236,56 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { - "version": "2.3.5", + "version": "2.9.0", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.2.1", + "version": "1.3.3", "bundled": true, "dev": true, "optional": true, "requires": { - "minipass": "^2.2.1" + "minipass": "^2.9.0" } }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "2.1.1", + "version": "2.1.2", "bundled": true, "dev": true, "optional": true }, "needle": { - "version": "2.3.0", + "version": "2.4.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^4.1.0", + "debug": "^3.2.6", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.12.0", + "version": "0.14.0", "bundled": true, "dev": true, "optional": true, @@ -6207,7 +7299,7 @@ "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", - "tar": "^4" + "tar": "^4.4.2" } }, "nopt": { @@ -6221,13 +7313,22 @@ } }, "npm-bundled": { - "version": "1.0.6", + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.4.1", + "version": "1.4.7", "bundled": true, "dev": true, "optional": true, @@ -6251,7 +7352,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -6263,6 +7365,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -6296,7 +7399,7 @@ "optional": true }, "process-nextick-args": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true, "optional": true @@ -6337,7 +7440,7 @@ } }, "rimraf": { - "version": "2.6.3", + "version": "2.7.1", "bundled": true, "dev": true, "optional": true, @@ -6348,7 +7451,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -6363,7 +7467,7 @@ "optional": true }, "semver": { - "version": "5.7.0", + "version": "5.7.1", "bundled": true, "dev": true, "optional": true @@ -6384,6 +7488,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -6403,6 +7508,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -6414,18 +7520,18 @@ "optional": true }, "tar": { - "version": "4.4.8", + "version": "4.4.13", "bundled": true, "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" + "yallist": "^3.0.3" } }, "util-deprecate": { @@ -6446,11 +7552,99 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { - "version": "3.0.3", + "version": "3.1.1", "bundled": true, + "dev": true, + "optional": true + } + } + }, + "fullname": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fullname/-/fullname-3.3.0.tgz", + "integrity": "sha1-oIdH1pISKWELgXi3YU/OEMsYX1o=", + "dev": true, + "requires": { + "execa": "^0.6.0", + "filter-obj": "^1.1.0", + "mem": "^1.1.0", + "p-any": "^1.0.0", + "p-try": "^1.0.0", + "passwd-user": "^2.1.0", + "rc": "^1.1.6" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.6.3.tgz", + "integrity": "sha1-V7aaWU8IF1nGnlNw8NF7nLEWWP4=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "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" + } + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true } } @@ -6461,6 +7655,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "g-status": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz", @@ -6470,6 +7670,17 @@ "arrify": "^1.0.1", "matcher": "^1.0.0", "simple-git": "^1.85.0" + }, + "dependencies": { + "matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.4" + } + } } }, "gauge": { @@ -6486,11 +7697,12 @@ } }, "generator-jhipster": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-6.1.2.tgz", - "integrity": "sha512-JUZaCPsJODHPyysRdyDmK2rs2jzxBEAnmkNmyyxwu941oYLjTFyiYKn5XNGSXdYYvPIs1er1cc8btl+43lisJg==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/generator-jhipster/-/generator-jhipster-6.6.0.tgz", + "integrity": "sha512-iaP48cv7wlDCr/Y1r3JqsVbElU3rahgQcTt/2nofTLiJYWUA8Q3xmXlqIhhas5ThFuZlkczKsVv6DtKAvaQArg==", "dev": true, "requires": { + "aws-sdk": "2.533.0", "axios": "0.19.0", "chalk": "2.4.2", "commander": "2.19.0", @@ -6501,24 +7713,28 @@ "glob": "7.1.3", "gulp-filter": "5.1.0", "insight": "0.10.1", - "jhipster-core": "4.0.2", + "jhipster-core": "6.0.5", "js-object-pretty-print": "0.3.0", "js-yaml": "3.13.1", - "lodash": "4.17.11", + "lodash": "4.17.13", "meow": "5.0.0", "mkdirp": "0.5.1", + "ora": "3.4.0", "os-locale": "3.1.0", "parse-gitignore": "1.0.1", "pluralize": "7.0.0", - "prettier": "1.16.4", + "prettier": "1.19.1", + "progress": "2.0.3", "randexp": "0.5.3", "semver": "5.6.0", "shelljs": "0.8.3", + "sync-request": "6.0.0", "tabtab": "2.2.2", "through2": "3.0.1", - "uuid": "3.3.2", + "uuid": "3.3.3", "yeoman-environment": "2.3.4", - "yeoman-generator": "3.2.0" + "yeoman-generator": "3.2.0", + "yo": "3.1.0" }, "dependencies": { "commander": { @@ -6542,15 +7758,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true - }, - "prettier": { - "version": "1.16.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz", - "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==", "dev": true }, "semver": { @@ -6570,68 +7780,75 @@ } } }, - "generator-jhipster-primeng": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/generator-jhipster-primeng/-/generator-jhipster-primeng-0.0.0.tgz", - "integrity": "sha1-3/1dPB42vRGct/vpY1IyTdNSv2k=", + "generator-jhipster-primeng-blueprint": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/generator-jhipster-primeng-blueprint/-/generator-jhipster-primeng-blueprint-0.0.16.tgz", + "integrity": "sha512-8GCujbyFXA7m/ygB5IJ32wGYgMDdoyiSUyEyySeHhaZWme5u9W8XR0WSwiyIJxDTUuVVtovkEt85UtU9zXye/g==", "dev": true, "requires": { - "chalk": "1.1.3", - "fs-extra": "0.30.0", - "generator-jhipster": ">=4.6.0", + "chalk": "2.4.1", + "ejs": "2.6.1", + "generator-jhipster": ">=5.4.0", + "glob": "7.1.2", + "gulp-filter": "5.1.0", + "insight": "0.10.1", + "jhipster-core": "3.0.2", + "js-yaml": "3.12.0", + "lodash": "4.17.10", + "meow": "5.0.0", "mkdirp": "0.5.1", - "semver": "5.3.0", - "shelljs": "0.5.3", - "yeoman-generator": "1.1.1" + "pluralize": "7.0.0", + "prettier": "1.13.5", + "randexp": "0.4.9", + "semver": "5.5.0", + "shelljs": "0.8.2", + "through2": "2.0.3", + "yeoman-environment": "2.3.0", + "yeoman-generator": "2.0.5" }, "dependencies": { "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "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": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "async": { - "version": "2.6.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" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", + "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", + "dev": true }, "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "^1.0.1" + "restore-cursor": "^2.0.0" } }, "clone": { @@ -6646,16 +7863,11 @@ "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", + "dev": true }, "dargs": { "version": "5.1.0", @@ -6663,52 +7875,43 @@ "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", "dev": true }, - "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", - "dev": true - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "dev": true - }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "dev": true + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } }, "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { - "extend": "^3.0.0", - "spawn-sync": "^1.0.15", - "tmp": "^0.0.29" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" + "escape-string-regexp": "^1.0.5" } }, "find-up": { @@ -6720,125 +7923,91 @@ "locate-path": "^2.0.0" } }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "gh-got": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-5.0.0.tgz", - "integrity": "sha1-7pW+NxBv2HSKlvjR20uuqJ4b+oo=", - "dev": true, - "requires": { - "got": "^6.2.0", - "is-plain-obj": "^1.1.0" - } - }, - "github-username": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-3.0.0.tgz", - "integrity": "sha1-CnciGbMTB0NCnyRW0L3T21Xc57E=", + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "gh-got": "^5.0.0" + "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" } }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "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" - } - }, - "got": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", - "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", - "dev": true, - "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" } }, "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^1.0.1", + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^1.1.0", - "figures": "^1.3.5", + "external-editor": "^2.1.0", + "figures": "^2.0.0", "lodash": "^4.3.0", - "mute-stream": "0.0.6", - "pinkie-promise": "^2.0.0", + "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", "through": "^2.3.6" } }, "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=", + "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 + }, + "jhipster-core": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.0.2.tgz", + "integrity": "sha512-b5wZgA/E3S547mDKg6g4bzGYC+fLBr4LUBcpcMtqZ4UubHrIFIOT9eqw/rF0yRzU/w8UeVgp/Sqi77PVKg9jag==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "lodash": "4.17.10", + "winston": "2.4.2" } }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, @@ -6852,66 +8021,82 @@ "path-exists": "^3.0.0" } }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "^1.0.0" - } + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", + "dev": true }, - "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==", + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pify": "^3.0.0" } }, "mem-fs-editor": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz", - "integrity": "sha1-3Qpuryu4prN3QAZ6pUnrUwEFr58=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", + "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", "dev": true, "requires": { "commondir": "^1.0.1", - "deep-extend": "^0.4.0", - "ejs": "^2.3.1", + "deep-extend": "^0.6.0", + "ejs": "^2.5.9", "glob": "^7.0.3", - "globby": "^6.1.0", + "globby": "^7.1.1", + "isbinaryfile": "^3.0.2", "mkdirp": "^0.5.0", "multimatch": "^2.0.0", "rimraf": "^2.2.8", "through2": "^2.0.0", "vinyl": "^2.0.1" + }, + "dependencies": { + "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" + } + } } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true }, "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } }, "p-limit": { "version": "1.3.0", @@ -6937,21 +8122,53 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, + "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" + } + }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "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": "^2.0.0" + "pify": "^3.0.0" } }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prettier": { + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz", + "integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==", + "dev": true + }, "pretty-bytes": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true }, + "randexp": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.9.tgz", + "integrity": "sha512-maAX1cnBkzIZ89O4tSQUOF098xjGMC8N+9vuY/WfHwg87THw6odD2Br35donlj5e6KnB1SB0QBHhTQhhDHuTPQ==", + "dev": true, + "requires": { + "drange": "^1.0.0", + "ret": "^0.2.0" + } + }, "read-chunk": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", @@ -6960,35 +8177,27 @@ "requires": { "pify": "^3.0.0", "safe-buffer": "^5.1.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "read-pkg": "^3.0.0" } }, "replace-ext": { @@ -6998,45 +8207,89 @@ "dev": true }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "exit-hook": "^1.0.0", - "onetime": "^1.0.0" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "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" + }, + "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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" + } + } + } + }, + "rxjs": { + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", + "dev": true, + "requires": { + "symbol-observable": "1.0.1" } }, "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true }, "shelljs": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.5.3.tgz", - "integrity": "sha1-xUmCuZbHbvDB5rWfvcWCX1txMRM=", - "dev": true + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": "^2.0.0" + "ansi-regex": "^3.0.0" } }, "strip-bom": { @@ -7045,28 +8298,20 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "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=", + "symbol-observable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", "dev": true }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.1" - } - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "os-homedir": "^1.0.0" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "vinyl": { @@ -7083,776 +8328,269 @@ "replace-ext": "^1.0.0" } }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "winston": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", + "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", + "dev": true, + "requires": { + "async": "~1.0.0", + "colors": "1.0.x", + "cycle": "1.0.x", + "eyes": "0.1.x", + "isstream": "0.1.x", + "stack-trace": "0.0.x" + } }, "yeoman-environment": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", - "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz", + "integrity": "sha512-PHSAkVOqYdcR+C+Uht1SGC4eVD/9OhygYFkYaI66xF8vKIeS1RNYay+umj2ZrQeJ50tF5Q/RSO6qGDz9y3Ifug==", "dev": true, "requires": { - "chalk": "^1.0.0", - "debug": "^2.0.0", - "diff": "^2.1.2", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.3.1", "escape-string-regexp": "^1.0.2", - "globby": "^4.0.0", - "grouped-queue": "^0.3.0", - "inquirer": "^1.0.2", - "lodash": "^4.11.1", - "log-symbols": "^1.0.1", - "mem-fs": "^1.1.0", - "text-table": "^0.2.0", - "untildify": "^2.0.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^6.0.1", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^5.2.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.1.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.2" } }, "yeoman-generator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-1.1.1.tgz", - "integrity": "sha1-QMK09s374F4ZUv3XKTPw2JJdvfU=", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", + "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", "dev": true, "requires": { - "async": "^2.0.0", - "chalk": "^1.0.0", - "class-extend": "^0.1.0", + "async": "^2.6.0", + "chalk": "^2.3.0", "cli-table": "^0.3.1", - "cross-spawn": "^5.0.1", + "cross-spawn": "^6.0.5", "dargs": "^5.1.0", - "dateformat": "^2.0.0", - "debug": "^2.1.0", + "dateformat": "^3.0.3", + "debug": "^3.1.0", "detect-conflict": "^1.0.0", "error": "^7.0.2", "find-up": "^2.1.0", - "github-username": "^3.0.0", - "glob": "^7.0.3", - "istextorbinary": "^2.1.0", - "lodash": "^4.11.1", - "mem-fs-editor": "^3.0.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^4.0.0", "minimist": "^1.2.0", - "mkdirp": "^0.5.0", - "path-exists": "^3.0.0", - "path-is-absolute": "^1.0.0", "pretty-bytes": "^4.0.2", - "read-chunk": "^2.0.0", - "read-pkg-up": "^2.0.0", - "rimraf": "^2.2.0", + "read-chunk": "^2.1.0", + "read-pkg-up": "^3.0.0", + "rimraf": "^2.6.2", "run-async": "^2.0.0", - "shelljs": "^0.7.0", + "shelljs": "^0.8.0", "text-table": "^0.2.0", "through2": "^2.0.0", - "user-home": "^2.0.0", - "yeoman-environment": "^1.1.0" + "yeoman-environment": "^2.0.5" }, "dependencies": { - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "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": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "lodash": "^4.17.14" + }, + "dependencies": { + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + } } } } } } }, - "generator-jhipster-primeng-blueprint": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/generator-jhipster-primeng-blueprint/-/generator-jhipster-primeng-blueprint-0.0.0.tgz", - "integrity": "sha512-KhTm2lmYVJ+J49XkgFCMWp/ptbS7lfrwfqHRScW8IqE29hBld6fdQoadpZRZhaSltm8UztDDEL+Nvf6g8+xkpw==", + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "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 + }, + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "dev": true + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "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": { - "chalk": "2.4.1", - "ejs": "2.6.1", - "generator-jhipster": ">=5.4.0", - "glob": "7.1.2", - "gulp-filter": "5.1.0", - "insight": "0.10.1", - "jhipster-core": "3.0.2", - "js-yaml": "3.12.0", - "lodash": "4.17.10", - "meow": "5.0.0", - "mkdirp": "0.5.1", - "pluralize": "7.0.0", - "prettier": "1.13.5", - "randexp": "0.4.9", - "semver": "5.5.0", - "shelljs": "0.8.2", - "through2": "2.0.3", - "yeoman-environment": "2.3.0", - "yeoman-generator": "2.0.5" + "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" + } + }, + "gh-got": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", + "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", + "dev": true, + "requires": { + "got": "^7.0.0", + "is-plain-obj": "^1.1.0" + } + }, + "github-username": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", + "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", + "dev": true, + "requires": { + "gh-got": "^6.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "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": { - "async": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", - "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", - "dev": true - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "is-extglob": "^2.1.0" } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "dev": true - }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-agent": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-2.1.7.tgz", + "integrity": "sha512-ooK7eqGYZku+LgnbfH/Iv0RJ74XfhrBZDlke1QSzcBt0bw1PmJcnRADPAQuFE+R45pKKDTynAr25SBasY2kvow==", + "dev": true, + "requires": { + "boolean": "^3.0.0", + "core-js": "^3.4.1", + "es6-error": "^4.1.1", + "matcher": "^2.0.0", + "roarr": "^2.14.5", + "semver": "^6.3.0", + "serialize-error": "^5.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz", + "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", + "dev": true, + "requires": { + "ini": "^1.3.4" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, "requires": { - "ms": "^2.1.1" - } - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "jhipster-core": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-3.0.2.tgz", - "integrity": "sha512-b5wZgA/E3S547mDKg6g4bzGYC+fLBr4LUBcpcMtqZ4UubHrIFIOT9eqw/rF0yRzU/w8UeVgp/Sqi77PVKg9jag==", - "dev": true, - "requires": { - "lodash": "4.17.10", - "winston": "2.4.2" - } - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==", - "dev": true - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "mem-fs-editor": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz", - "integrity": "sha512-tgWmwI/+6vwu6POan82dTjxEpwAoaj0NAFnghtVo/FcLK2/7IhPUtFUUYlwou4MOY6OtjTUJtwpfH1h+eSUziw==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "deep-extend": "^0.6.0", - "ejs": "^2.5.9", - "glob": "^7.0.3", - "globby": "^7.1.1", - "isbinaryfile": "^3.0.2", - "mkdirp": "^0.5.0", - "multimatch": "^2.0.0", - "rimraf": "^2.2.8", - "through2": "^2.0.0", - "vinyl": "^2.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "prettier": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.5.tgz", - "integrity": "sha512-4M90mfvLz6yRf2Dhzd+xPIE6b4xkI8nHMJhsSm9IlfG17g6wujrrm7+H1X8x52tC4cSNm6HmuhCUSNe6Hd5wfw==", - "dev": true - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", - "dev": true - }, - "randexp": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.9.tgz", - "integrity": "sha512-maAX1cnBkzIZ89O4tSQUOF098xjGMC8N+9vuY/WfHwg87THw6odD2Br35donlj5e6KnB1SB0QBHhTQhhDHuTPQ==", - "dev": true, - "requires": { - "drange": "^1.0.0", - "ret": "^0.2.0" - } - }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", - "dev": true, - "requires": { - "pify": "^3.0.0", - "safe-buffer": "^5.1.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, - "ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "dev": true - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - }, - "shelljs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", - "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=", - "dev": true - }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "dev": true, - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "winston": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.2.tgz", - "integrity": "sha512-4S/Ad4ZfSNl8OccCLxnJmNISWcm2joa6Q0YGDxlxMzH0fgSwWsjMt+SmlNwCqdpaPg3ev1HKkMBsIiXeSUwpbA==", - "dev": true, - "requires": { - "async": "~1.0.0", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - } - }, - "yeoman-environment": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz", - "integrity": "sha512-PHSAkVOqYdcR+C+Uht1SGC4eVD/9OhygYFkYaI66xF8vKIeS1RNYay+umj2ZrQeJ50tF5Q/RSO6qGDz9y3Ifug==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "diff": "^3.3.1", - "escape-string-regexp": "^1.0.2", - "globby": "^8.0.1", - "grouped-queue": "^0.3.3", - "inquirer": "^5.2.0", - "is-scoped": "^1.0.0", - "lodash": "^4.17.10", - "log-symbols": "^2.1.0", - "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "untildify": "^3.0.2" - } - }, - "yeoman-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", - "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", - "dev": true, - "requires": { - "async": "^2.6.0", - "chalk": "^2.3.0", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^5.1.0", - "dateformat": "^3.0.3", - "debug": "^3.1.0", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^2.1.0", - "github-username": "^4.0.0", - "istextorbinary": "^2.2.1", - "lodash": "^4.17.10", - "make-dir": "^1.1.0", - "mem-fs-editor": "^4.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^4.0.2", - "read-chunk": "^2.1.0", - "read-pkg-up": "^3.0.0", - "rimraf": "^2.6.2", - "run-async": "^2.0.0", - "shelljs": "^0.8.0", - "text-table": "^0.2.0", - "through2": "^2.0.0", - "yeoman-environment": "^2.0.5" - }, - "dependencies": { - "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" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "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": "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 - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz", - "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==", - "dev": true - }, - "get-stdin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", - "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", - "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" - } - }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", - "dev": true, - "requires": { - "got": "^7.0.0", - "is-plain-obj": "^1.1.0" - } - }, - "github-username": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", - "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", - "dev": true, - "requires": { - "gh-got": "^6.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" + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" } } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", @@ -7866,11 +8604,35 @@ "which": "^1.2.14" } }, + "global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, "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 + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "globalthis": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.1.tgz", + "integrity": "sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } }, "globby": { "version": "7.1.1", @@ -7925,9 +8687,9 @@ } }, "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "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 }, "grouped-queue": { @@ -7968,26 +8730,6 @@ "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", "dev": true }, - "handlebars": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", - "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", - "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", @@ -8066,9 +8808,9 @@ "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=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", "dev": true }, "has-to-string-tag-x": { @@ -8177,9 +8919,9 @@ } }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "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": { @@ -8227,6 +8969,12 @@ "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", "dev": true }, + "html-escaper": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", + "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "dev": true + }, "html-loader": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", @@ -8238,6 +8986,40 @@ "html-minifier": "^3.5.8", "loader-utils": "^1.1.0", "object-assign": "^4.1.1" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "html-minifier": { @@ -8276,32 +9058,6 @@ "tapable": "^1.0.0", "toposort": "^1.0.0", "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } } }, "htmlparser2": { @@ -8318,6 +9074,12 @@ "readable-stream": "^3.1.1" }, "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, "readable-stream": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", @@ -8331,6 +9093,18 @@ } } }, + "http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "requires": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + } + }, "http-cache-semantics": { "version": "3.8.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", @@ -8420,24 +9194,41 @@ }, "dependencies": { "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", + "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==", "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", + "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } } } }, + "http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "requires": { + "@types/node": "^10.0.3" + }, + "dependencies": { + "@types/node": { + "version": "10.17.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.13.tgz", + "integrity": "sha512-pMCcqU2zT4TjqYFrWtYHKal7Sl30Ims6ulZ4UFXxI4xbtQqK/qqKwkDoBFCfooRqqmRu9vY3xaJRwxSh673aYg==", + "dev": true + } + } + }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -8456,9 +9247,9 @@ "dev": true }, "https-proxy-agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.2.tgz", - "integrity": "sha512-c8Ndjc9Bkpfx/vCJueCPy0jlP4ccCCSNDp8xwCZzPjKJUm+B+u9WX2x98Qx4n1PiMNTWo3D7KK5ifNV/yJyRzg==", + "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", @@ -8485,24 +9276,46 @@ "ms": "^2.0.0" } }, + "humanize-string": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/humanize-string/-/humanize-string-1.0.2.tgz", + "integrity": "sha512-PH5GBkXqFxw5+4eKaKRIkD23y6vRd/IXSl7IldyJxEXpDH9SEIXRORkBtkGni/ae2P7RVOw6Wxypd2tGXhha1w==", + "dev": true, + "requires": { + "decamelize": "^1.0.0" + } + }, "husky": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-2.4.1.tgz", - "integrity": "sha512-ZRwMWHr7QruR22dQ5l3rEGXQ7rAQYsJYqaeCd+NyOsIFczAtqaApZQP3P4HwLZjCtFbm3SUNYoKuoBXX3AYYfw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-3.1.0.tgz", + "integrity": "sha512-FJkPoHHB+6s4a+jwPqBudBDvYZsoQW5/HBuMSehC8qDiCe50kpcxeqFoDSlow+9I6wg47YxBoT3WxaURlrDIIQ==", "dev": true, "requires": { - "cosmiconfig": "^5.2.0", + "chalk": "^2.4.2", + "ci-info": "^2.0.0", + "cosmiconfig": "^5.2.1", "execa": "^1.0.0", - "find-up": "^3.0.0", "get-stdin": "^7.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^4.1.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^5.1.1", + "opencollective-postinstall": "^2.0.2", + "pkg-dir": "^4.2.0", + "please-upgrade-node": "^3.2.0", + "read-pkg": "^5.2.0", "run-node": "^1.0.0", "slash": "^3.0.0" }, "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "get-stdin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", + "dev": true + }, "parse-json": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", @@ -8532,6 +9345,12 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true } } }, @@ -8572,9 +9391,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", + "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" @@ -8602,13 +9421,13 @@ } }, "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "import-from": { @@ -8618,8 +9437,22 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } } }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", @@ -8665,6 +9498,12 @@ "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", @@ -8688,22 +9527,22 @@ "dev": true }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "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": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" } @@ -8725,6 +9564,18 @@ "uuid": "^3.0.0" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -8740,6 +9591,15 @@ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", "dev": true }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, "conf": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", @@ -8764,6 +9624,15 @@ "tmp": "^0.0.33" } }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, "inquirer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", @@ -8785,6 +9654,12 @@ "through": "^2.3.6" } }, + "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 + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -8794,12 +9669,43 @@ "pify": "^3.0.0" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, "rxjs": { "version": "5.5.12", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", @@ -8809,6 +9715,16 @@ "symbol-observable": "1.0.1" } }, + "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" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -8842,6 +9758,24 @@ "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", "dev": true }, + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "dev": true, + "requires": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "dependencies": { + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + } + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -8907,6 +9841,12 @@ } } }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -8923,23 +9863,23 @@ } }, "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", "dev": true }, "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^2.0.0" + "ci-info": "^1.5.0" } }, "is-color-stop": { @@ -8983,9 +9923,9 @@ } }, "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=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", "dev": true }, "is-descriptor": { @@ -9013,6 +9953,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-1.1.0.tgz", + "integrity": "sha1-8EN01O7lMQ6ajhE78UlUEeRhdqE=", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -9025,10 +9971,19 @@ "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=", + "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 }, "is-generator-fn": { @@ -9046,6 +10001,22 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz", + "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", + "dev": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", + "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -9154,12 +10125,12 @@ "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=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "dev": true, "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-regexp": { @@ -9175,9 +10146,15 @@ "dev": true }, "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-root": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", + "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=", "dev": true }, "is-scoped": { @@ -9195,6 +10172,12 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", + "dev": true + }, "is-svg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", @@ -9205,12 +10188,12 @@ } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", "dev": true, "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "^1.0.1" } }, "is-typedarray": { @@ -9319,9 +10302,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "supports-color": { @@ -9364,10 +10347,19 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "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" + } + }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "source-map": { @@ -9379,23 +10371,23 @@ } }, "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==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0" } }, "istextorbinary": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.5.1.tgz", - "integrity": "sha512-pv/JNPWnfpwGjPx7JrtWTwsWsxkrK3fNzcEVnt92YKEIErps4Fsk49+qzCe9iQF2hjqK8Naqf8P9kzoeCuQI1g==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.6.0.tgz", + "integrity": "sha512-+XRlFseT8B3L9KyjxxLjfXSLMuErKDsd8DBNrsaxoViABMEZlOSCstwmw0qpoFX3+U6yWU1yhLudAe6/lETGGA==", "dev": true, "requires": { "binaryextensions": "^2.1.2", - "editions": "^2.1.3", - "textextensions": "^2.4.0" + "editions": "^2.2.0", + "textextensions": "^2.5.0" } }, "isurl": { @@ -9432,354 +10424,420 @@ "dev": true }, "jest": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-24.8.0.tgz", - "integrity": "sha512-o0HM90RKFRNWmAWvlyV8i5jGZ97pFwkeVoGvPW1EtLTgJc2+jcuqcbbqcSZLE/3f2S5pt0y2ZBETuhpWNl1Reg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-24.9.0.tgz", + "integrity": "sha512-YvkBL1Zm7d2B1+h5fHEOdyjCG+sGMz4f8D86/0HiqJ6MB4MnDc8FgP5vdWsGnemOQro7lnYo8UakZ3+5A0jxGw==", "dev": true, "requires": { "import-local": "^2.0.0", - "jest-cli": "^24.8.0" + "jest-cli": "^24.9.0" }, "dependencies": { - "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==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "jest-cli": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.8.0.tgz", - "integrity": "sha512-+p6J00jSMPQ116ZLlHJJvdf8wbjNbZdeSX9ptfHX06/MSNaXmKihQzx5vQcw0q2G6JsdVkUIdWbOWtSnaYs3yA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-24.9.0.tgz", + "integrity": "sha512-+VLRKyitT3BWoMeSUIHRxV/2g8y9gw91Jh5z2UmXZzkZKpbC08CSehVxgHUwTpy+HwGcns/tqafQDJW7imYvGg==", "dev": true, "requires": { - "@jest/core": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/core": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "exit": "^0.1.2", "import-local": "^2.0.0", "is-ci": "^2.0.0", - "jest-config": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-config": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "prompts": "^2.0.1", "realpath-native": "^1.1.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" } }, - "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 + "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" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.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" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } } } }, "jest-changed-files": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.8.0.tgz", - "integrity": "sha512-qgANC1Yrivsq+UrLXsvJefBKVoCsKB0Hv+mBb6NMjjZ90wwxCDmU3hsCXBya30cH+LnPYjwgcU65i6yJ5Nfuug==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-24.9.0.tgz", + "integrity": "sha512-6aTWpe2mHF0DhL28WjdkO8LyGjs3zItPET4bMSeXU6T3ub4FPMw+mcOcbdGXQOAfmLcxofD23/5Bl9Z4AkFwqg==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "execa": "^1.0.0", "throat": "^4.0.0" } }, "jest-config": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.8.0.tgz", - "integrity": "sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-24.9.0.tgz", + "integrity": "sha512-RATtQJtVYQrp7fvWg6f5y3pEFj9I+H8sWw4aKxnDZ96mob5i5SD6ZEGWgMLXQ4LE8UurrjbdlLWdUeo+28QpfQ==", "dev": true, "requires": { "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^24.8.0", - "@jest/types": "^24.8.0", - "babel-jest": "^24.8.0", + "@jest/test-sequencer": "^24.9.0", + "@jest/types": "^24.9.0", + "babel-jest": "^24.9.0", "chalk": "^2.0.1", "glob": "^7.1.1", - "jest-environment-jsdom": "^24.8.0", - "jest-environment-node": "^24.8.0", - "jest-get-type": "^24.8.0", - "jest-jasmine2": "^24.8.0", + "jest-environment-jsdom": "^24.9.0", + "jest-environment-node": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-jasmine2": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "micromatch": "^3.1.10", - "pretty-format": "^24.8.0", + "pretty-format": "^24.9.0", "realpath-native": "^1.1.0" } }, + "jest-date-mock": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/jest-date-mock/-/jest-date-mock-1.0.7.tgz", + "integrity": "sha512-ZgbYlURRhVpf52Jho4tlyUgpJJ+nYvhxIWhIIEdarmsSuTxFZlC9DmKCyQXsuEljfxK+7HsqdBX/L6rxwWraYw==", + "dev": true + }, "jest-diff": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.8.0.tgz", - "integrity": "sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-24.9.0.tgz", + "integrity": "sha512-qMfrTs8AdJE2iqrTp0hzh7kTd2PQWrsFyj9tORoKmu32xjPjeE4NyjVRDz8ybYwqS2ik8N4hsIpiVTyFeo2lBQ==", "dev": true, "requires": { "chalk": "^2.0.1", - "diff-sequences": "^24.3.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "diff-sequences": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-docblock": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.3.0.tgz", - "integrity": "sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-24.9.0.tgz", + "integrity": "sha512-F1DjdpDMJMA1cN6He0FNYNZlo3yYmOtRUnktrT9Q37njYzC5WEaDdmbynIgy0L/IvXvvgsG8OsqhLPXTpfmZAA==", "dev": true, "requires": { "detect-newline": "^2.1.0" } }, "jest-each": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.8.0.tgz", - "integrity": "sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-24.9.0.tgz", + "integrity": "sha512-ONi0R4BvW45cw8s2Lrx8YgbeXL1oCQ/wIDwmsM3CqM/nlblNCPmnC3IPQlMbRFZu3wKdQ2U8BqM6lh3LJ5Bsog==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-environment-jsdom": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz", - "integrity": "sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-24.9.0.tgz", + "integrity": "sha512-Zv9FV9NBRzLuALXjvRijO2351DRQeLYXtpD4xNvfoVFw21IOKNhZAEUKcbiEtjTkm2GsJ3boMVgkaR7rN8qetA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0", "jsdom": "^11.5.1" } }, - "jest-environment-jsdom-thirteen": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom-thirteen/-/jest-environment-jsdom-thirteen-1.0.1.tgz", - "integrity": "sha512-Zi7OuKF7HMLlBvomitd5eKp5Ykc4Wvw0d+i+cpbCaE+7kmvL24SO4ssDmKrT++aANXR4T8+pmoJIlav5gr2peQ==", + "jest-environment-jsdom-fifteen": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom-fifteen/-/jest-environment-jsdom-fifteen-1.0.2.tgz", + "integrity": "sha512-nfrnAfwklE1872LIB31HcjM65cWTh1wzvMSp10IYtPJjLDUbTTvDpajZgIxUnhRmzGvogdHDayCIlerLK0OBBg==", "dev": true, "requires": { + "@jest/environment": "^24.3.0", + "@jest/fake-timers": "^24.3.0", + "@jest/types": "^24.3.0", "jest-mock": "^24.0.0", "jest-util": "^24.0.0", - "jsdom": "^13.0.0" + "jsdom": "^15.2.1" }, "dependencies": { - "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", "dev": true }, + "cssstyle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.0.0.tgz", + "integrity": "sha512-QXSAu2WBsSRXCPjvI43Y40m6fMevvyRm8JVAuF9ksQz5jha4pWP1wpaK7Yu5oLFc6+XAY+hj8YhefyXcBB53gg==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, "jsdom": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", - "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.2.1.tgz", + "integrity": "sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g==", "dev": true, "requires": { "abab": "^2.0.0", - "acorn": "^6.0.4", - "acorn-globals": "^4.3.0", + "acorn": "^7.1.0", + "acorn-globals": "^4.3.2", "array-equal": "^1.0.0", - "cssom": "^0.3.4", - "cssstyle": "^1.1.1", + "cssom": "^0.4.1", + "cssstyle": "^2.0.0", "data-urls": "^1.1.0", "domexception": "^1.0.1", - "escodegen": "^1.11.0", + "escodegen": "^1.11.1", "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.0.9", + "nwsapi": "^2.2.0", "parse5": "5.1.0", "pn": "^1.1.0", "request": "^2.88.0", - "request-promise-native": "^1.0.5", - "saxes": "^3.1.5", + "request-promise-native": "^1.0.7", + "saxes": "^3.1.9", "symbol-tree": "^3.2.2", - "tough-cookie": "^2.5.0", + "tough-cookie": "^3.0.1", "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.0.1", + "w3c-xmlserializer": "^1.1.2", "webidl-conversions": "^4.0.2", "whatwg-encoding": "^1.0.5", "whatwg-mimetype": "^2.3.0", "whatwg-url": "^7.0.0", - "ws": "^6.1.2", + "ws": "^7.0.0", "xml-name-validator": "^3.0.0" } }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "requires": { + "ip-regex": "^2.1.0", "psl": "^1.1.28", "punycode": "^2.1.1" } }, "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", "webidl-conversions": "^4.0.2" } + }, + "ws": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", + "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==", + "dev": true } } }, "jest-environment-node": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.8.0.tgz", - "integrity": "sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-24.9.0.tgz", + "integrity": "sha512-6d4V2f4nxzIzwendo27Tr0aFm+IXWa0XEUnaH6nU0FMaozxovt+sfRvh4J47wL1OvF83I3SSTu0XK+i4Bqe7uA==", "dev": true, "requires": { - "@jest/environment": "^24.8.0", - "@jest/fake-timers": "^24.8.0", - "@jest/types": "^24.8.0", - "jest-mock": "^24.8.0", - "jest-util": "^24.8.0" + "@jest/environment": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/types": "^24.9.0", + "jest-mock": "^24.9.0", + "jest-util": "^24.9.0" } }, "jest-get-type": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.8.0.tgz", - "integrity": "sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", + "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==", "dev": true }, "jest-haste-map": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.8.1.tgz", - "integrity": "sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-24.9.0.tgz", + "integrity": "sha512-kfVFmsuWui2Sj1Rp1AJ4D9HqJwE4uwTlS/vO+eRUaMmd54BFpli2XhMQnPC2k4cHFVbB2Q2C+jtI1AGLgEnCjQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "anymatch": "^2.0.0", "fb-watchman": "^2.0.0", "fsevents": "^1.2.7", "graceful-fs": "^4.1.15", "invariant": "^2.2.4", - "jest-serializer": "^24.4.0", - "jest-util": "^24.8.0", - "jest-worker": "^24.6.0", + "jest-serializer": "^24.9.0", + "jest-util": "^24.9.0", + "jest-worker": "^24.9.0", "micromatch": "^3.1.10", "sane": "^4.0.3", "walker": "^1.0.7" } }, "jest-jasmine2": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz", - "integrity": "sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-24.9.0.tgz", + "integrity": "sha512-Cq7vkAgaYKp+PsX+2/JbTarrk0DmNhsEtqBXNwUHkdlbrTBLtMJINADf2mf5FkowNsq8evbPc07/qFO0AdKTzw==", "dev": true, "requires": { "@babel/traverse": "^7.1.0", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", "co": "^4.6.0", - "expect": "^24.8.0", + "expect": "^24.9.0", "is-generator-fn": "^2.0.0", - "jest-each": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "pretty-format": "^24.8.0", + "jest-each": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "pretty-format": "^24.9.0", "throat": "^4.0.0" } }, "jest-junit": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-6.4.0.tgz", - "integrity": "sha512-GXEZA5WBeUich94BARoEUccJumhCgCerg7mXDFLxWwI2P7wL3Z7sGWk+53x343YdBLjiMR9aD/gYMVKO+0pE4Q==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/jest-junit/-/jest-junit-10.0.0.tgz", + "integrity": "sha512-dbOVRyxHprdSpwSAR9/YshLwmnwf+RSl5hf0kCGlhAcEeZY9aRqo4oNmaT0tLC16Zy9D0zekDjWkjHGjXlglaQ==", "dev": true, "requires": { - "jest-validate": "^24.0.0", + "jest-validate": "^24.9.0", "mkdirp": "^0.5.1", - "strip-ansi": "^4.0.0", + "strip-ansi": "^5.2.0", + "uuid": "^3.3.3", "xml": "^1.0.1" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "jest-leak-detector": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz", - "integrity": "sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-24.9.0.tgz", + "integrity": "sha512-tYkFIDsiKTGwb2FG1w8hX9V0aUb2ot8zY/2nFg087dUageonw1zrLMP4W6zsRO59dPkTSKie+D4rhMuP9nRmrA==", "dev": true, "requires": { - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-matcher-utils": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz", - "integrity": "sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-24.9.0.tgz", + "integrity": "sha512-OZz2IXsu6eaiMAwe67c1T+5tUAtQyQx27/EMEkbFAGiw52tB9em+uGbzpcgYVpA8wl0hlxKPZxrly4CXU/GjHA==", "dev": true, "requires": { "chalk": "^2.0.1", - "jest-diff": "^24.8.0", - "jest-get-type": "^24.8.0", - "pretty-format": "^24.8.0" + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "pretty-format": "^24.9.0" } }, "jest-message-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.8.0.tgz", - "integrity": "sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-24.9.0.tgz", + "integrity": "sha512-oCj8FiZ3U0hTP4aSui87P4L4jC37BtQwUMqk+zk/b11FR19BJDeZsZAvIHutWnmtw7r85UmR3CEWZ0HWU2mAlw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "@types/stack-utils": "^1.0.1", "chalk": "^2.0.1", "micromatch": "^3.1.10", @@ -9796,12 +10854,12 @@ } }, "jest-mock": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.8.0.tgz", - "integrity": "sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-24.9.0.tgz", + "integrity": "sha512-3BEYN5WbSq9wd+SyLDES7AHnjH9A/ROBwmz7l2y+ol+NtSFO8DYiEBzoO1CeFc9a8DYy10EO4dDFVv/wN3zl1w==", "dev": true, "requires": { - "@jest/types": "^24.8.0" + "@jest/types": "^24.9.0" } }, "jest-pnp-resolver": { @@ -9811,29 +10869,29 @@ "dev": true }, "jest-preset-angular": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-7.1.1.tgz", - "integrity": "sha512-/uJUi9IHoCxtB6aH6I+llpHjyfGfP2q32lcBCUKKk16v1uYKXvj1Nfdlvfvu/eqjZVoKEDLP+Ejup4bbsc0gAA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/jest-preset-angular/-/jest-preset-angular-8.0.0.tgz", + "integrity": "sha512-POQUTOdZwHJOFTr8lT+bR9da1L5ItRPQSjC1gyKf3wXO9ct2Ht08CO60dYDshivfewThdqzMeVYzgM9tEssw2A==", "dev": true, "requires": { - "jest-environment-jsdom-thirteen": "^1.0.0", + "jest-environment-jsdom-fifteen": "^1.0.0", "pretty-format": "^24.0.0", "ts-jest": "^24.0.0" } }, "jest-regex-util": { - "version": "24.3.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.3.0.tgz", - "integrity": "sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-24.9.0.tgz", + "integrity": "sha512-05Cmb6CuxaA+Ys6fjr3PhvV3bGQmO+2p2La4hFbU+W5uOc479f7FdLXUWXw4pYMAhhSZIuKHwSXSu6CsSBAXQA==", "dev": true }, "jest-resolve": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.8.0.tgz", - "integrity": "sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-24.9.0.tgz", + "integrity": "sha512-TaLeLVL1l08YFZAt3zaPtjiVvyy4oSA6CRe+0AFPPVX3Q/VI0giIWWoAvoS5L96vj9Dqxj4fB5p2qrHCmTU/MQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "browser-resolve": "^1.11.3", "chalk": "^2.0.1", "jest-pnp-resolver": "^1.2.1", @@ -9841,84 +10899,95 @@ } }, "jest-resolve-dependencies": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.8.0.tgz", - "integrity": "sha512-hyK1qfIf/krV+fSNyhyJeq3elVMhK9Eijlwy+j5jqmZ9QsxwKBiP6qukQxaHtK8k6zql/KYWwCTQ+fDGTIJauw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-24.9.0.tgz", + "integrity": "sha512-Fm7b6AlWnYhT0BXy4hXpactHIqER7erNgIsIozDXWl5dVm+k8XdGVe1oTg1JyaFnOxarMEbax3wyRJqGP2Pq+g==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-snapshot": "^24.8.0" + "jest-snapshot": "^24.9.0" } }, "jest-runner": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.8.0.tgz", - "integrity": "sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-24.9.0.tgz", + "integrity": "sha512-KksJQyI3/0mhcfspnxxEOBueGrd5E4vV7ADQLT9ESaCzz02WnbdbKWIf5Mkaucoaj7obQckYPVX6JJhgUcoWWg==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/environment": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", + "jest-config": "^24.9.0", "jest-docblock": "^24.3.0", - "jest-haste-map": "^24.8.0", - "jest-jasmine2": "^24.8.0", - "jest-leak-detector": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", - "jest-runtime": "^24.8.0", - "jest-util": "^24.8.0", + "jest-haste-map": "^24.9.0", + "jest-jasmine2": "^24.9.0", + "jest-leak-detector": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", + "jest-runtime": "^24.9.0", + "jest-util": "^24.9.0", "jest-worker": "^24.6.0", "source-map-support": "^0.5.6", "throat": "^4.0.0" } }, "jest-runtime": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.8.0.tgz", - "integrity": "sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-24.9.0.tgz", + "integrity": "sha512-8oNqgnmF3v2J6PVRM2Jfuj8oX3syKmaynlDMMKQ4iyzbQzIG6th5ub/lM2bCMTmoTKM3ykcUYI2Pw9xwNtjMnw==", "dev": true, "requires": { "@jest/console": "^24.7.1", - "@jest/environment": "^24.8.0", + "@jest/environment": "^24.9.0", "@jest/source-map": "^24.3.0", - "@jest/transform": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.2", + "@jest/transform": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "chalk": "^2.0.1", "exit": "^0.1.2", "glob": "^7.1.3", "graceful-fs": "^4.1.15", - "jest-config": "^24.8.0", - "jest-haste-map": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-mock": "^24.8.0", + "jest-config": "^24.9.0", + "jest-haste-map": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-mock": "^24.9.0", "jest-regex-util": "^24.3.0", - "jest-resolve": "^24.8.0", - "jest-snapshot": "^24.8.0", - "jest-util": "^24.8.0", - "jest-validate": "^24.8.0", + "jest-resolve": "^24.9.0", + "jest-snapshot": "^24.9.0", + "jest-util": "^24.9.0", + "jest-validate": "^24.9.0", "realpath-native": "^1.1.0", "slash": "^2.0.0", "strip-bom": "^3.0.0", - "yargs": "^12.0.2" + "yargs": "^13.3.0" }, "dependencies": { - "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==", + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "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 }, - "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=", + "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 }, "slash": { @@ -9927,76 +10996,79 @@ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "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-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.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" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" } } } }, "jest-serializer": { - "version": "24.4.0", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.4.0.tgz", - "integrity": "sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-24.9.0.tgz", + "integrity": "sha512-DxYipDr8OvfrKH3Kel6NdED3OXxjvxXZ1uIY2I9OFbGg+vUkkg7AGvi65qbhbWNPvDckXmzMPbK3u3HaDO49bQ==", "dev": true }, "jest-snapshot": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.8.0.tgz", - "integrity": "sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-24.9.0.tgz", + "integrity": "sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew==", "dev": true, "requires": { "@babel/types": "^7.0.0", - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "chalk": "^2.0.1", - "expect": "^24.8.0", - "jest-diff": "^24.8.0", - "jest-matcher-utils": "^24.8.0", - "jest-message-util": "^24.8.0", - "jest-resolve": "^24.8.0", + "expect": "^24.9.0", + "jest-diff": "^24.9.0", + "jest-get-type": "^24.9.0", + "jest-matcher-utils": "^24.9.0", + "jest-message-util": "^24.9.0", + "jest-resolve": "^24.9.0", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "pretty-format": "^24.8.0", - "semver": "^5.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "pretty-format": "^24.9.0", + "semver": "^6.2.0" } }, "jest-sonar-reporter": { @@ -10009,16 +11081,16 @@ } }, "jest-util": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.8.0.tgz", - "integrity": "sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-24.9.0.tgz", + "integrity": "sha512-x+cZU8VRmOJxbA1K5oDBdxQmdq0OIdADarLxk0Mq+3XS4jgvhG/oKGWcIDCtPG0HgjxOYvF+ilPJQsAyXfbNOg==", "dev": true, "requires": { - "@jest/console": "^24.7.1", - "@jest/fake-timers": "^24.8.0", - "@jest/source-map": "^24.3.0", - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", + "@jest/console": "^24.9.0", + "@jest/fake-timers": "^24.9.0", + "@jest/source-map": "^24.9.0", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", "callsites": "^3.0.0", "chalk": "^2.0.1", "graceful-fs": "^4.1.15", @@ -10028,12 +11100,21 @@ "source-map": "^0.6.0" }, "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", "dev": true }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -10049,41 +11130,49 @@ } }, "jest-validate": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.8.0.tgz", - "integrity": "sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-24.9.0.tgz", + "integrity": "sha512-HPIt6C5ACwiqSiwi+OfSSHbK8sG7akG8eATl+IPKaeIjtPOeBUd/g3J7DghugzxrGjI93qS/+RPKe1H6PqvhRQ==", "dev": true, "requires": { - "@jest/types": "^24.8.0", - "camelcase": "^5.0.0", + "@jest/types": "^24.9.0", + "camelcase": "^5.3.1", "chalk": "^2.0.1", - "jest-get-type": "^24.8.0", - "leven": "^2.1.0", - "pretty-format": "^24.8.0" + "jest-get-type": "^24.9.0", + "leven": "^3.1.0", + "pretty-format": "^24.9.0" } }, "jest-watcher": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.8.0.tgz", - "integrity": "sha512-SBjwHt5NedQoVu54M5GEx7cl7IGEFFznvd/HNT8ier7cCAx/Qgu9ZMlaTQkvK22G1YOpcWBLQPFSImmxdn3DAw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-24.9.0.tgz", + "integrity": "sha512-+/fLOfKPXXYJDYlks62/4R4GoT+GU1tYZed99JSCOsmzkkF7727RqKrjNAxtfO4YpGv11wybgRvCjR73lK2GZw==", "dev": true, "requires": { - "@jest/test-result": "^24.8.0", - "@jest/types": "^24.8.0", - "@types/yargs": "^12.0.9", + "@jest/test-result": "^24.9.0", + "@jest/types": "^24.9.0", + "@types/yargs": "^13.0.0", "ansi-escapes": "^3.0.0", "chalk": "^2.0.1", - "jest-util": "^24.8.0", + "jest-util": "^24.9.0", "string-length": "^2.0.0" + }, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + } } }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "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": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -10099,24 +11188,24 @@ } }, "jhipster-core": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-4.0.2.tgz", - "integrity": "sha512-E7TEK/Jgql2f1G9SHDR2tTng4r4oo8uX1YtZ9C2VWWaYHB3YrEist2F9XTLEg0mO6jPyokLvcXKSH51WGzYTYw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/jhipster-core/-/jhipster-core-6.0.5.tgz", + "integrity": "sha512-wajVDw31QbqqnVHryqh3EEnmNskKvm7ddGavRx9FcX1Kb+pMIv48y2KbNeYWDyG9HJeZKsrttMWAF7ma+BFTxA==", "dev": true, "requires": { - "chevrotain": "4.4.0", - "fs-extra": "8.0.1", - "lodash": "4.17.11", + "chevrotain": "6.5.0", + "fs-extra": "8.1.0", + "lodash": "4.17.15", "winston": "3.2.1" }, "dependencies": { "fs-extra": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.0.1.tgz", - "integrity": "sha512-W+XLrggcDzlle47X/XnS7FXrXu9sDo+Ze9zpndeBxdgv88FHLm1HtmkhEwavruS6koanBjp098rUpHs65EmG7A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", + "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" } @@ -10129,15 +11218,15 @@ "requires": { "graceful-fs": "^4.1.6" } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", - "dev": true } } }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", + "dev": true + }, "js-object-pretty-print": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/js-object-pretty-print/-/js-object-pretty-print-0.3.0.tgz", @@ -10145,9 +11234,9 @@ "dev": true }, "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, "js-yaml": { @@ -10200,12 +11289,24 @@ "xml-name-validator": "^3.0.0" }, "dependencies": { + "acorn": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", + "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "dev": true + }, "parse5": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "ws": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", @@ -10223,6 +11324,12 @@ "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "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", @@ -10250,6 +11357,12 @@ "jsonify": "~0.0.0" } }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -10263,21 +11376,10 @@ "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" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true }, "jsonfile": { "version": "3.0.1", @@ -10360,6 +11462,15 @@ "set-immediate-shim": "~1.0.1" } }, + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, "killable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", @@ -10372,15 +11483,6 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -10406,6 +11508,60 @@ "webpack-sources": "^1.1.0" } }, + "latest-version": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", + "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", + "dev": true, + "requires": { + "package-json": "^4.0.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "package-json": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", + "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", + "dev": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "lcid": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", @@ -10422,9 +11578,9 @@ "dev": true }, "leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, "levn": { @@ -10447,9 +11603,9 @@ } }, "limiter": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.4.tgz", - "integrity": "sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", "dev": true }, "lines-and-columns": { @@ -10459,9 +11615,9 @@ "dev": true }, "lint-staged": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.0.tgz", - "integrity": "sha512-DxguyxGOIfb67wZ6EOrqzjAbw6ZH9XK3YS74HO+erJf6+SAQeJJPN//GBOG5xhdt2THeuXjVPaHcCYOWGZwRbA==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", "dev": true, "requires": { "chalk": "^2.3.1", @@ -10625,6 +11781,51 @@ "cli-cursor": "^2.1.0", "date-fns": "^1.27.2", "figures": "^2.0.0" + }, + "dependencies": { + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + } } }, "load-json-file": { @@ -10640,6 +11841,57 @@ "strip-bom": "^2.0.0" } }, + "loader-fs-cache": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", + "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -10647,14 +11899,15 @@ "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==", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "^5.2.2", + "big.js": "^3.1.3", "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "json5": "^0.5.0", + "object-assign": "^4.0.1" } }, "localtunnel": { @@ -10811,6 +12064,15 @@ "path-exists": "^3.0.0" } }, + "locutus": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/locutus/-/locutus-2.0.11.tgz", + "integrity": "sha512-C0q1L38lK5q1t+wE0KY21/9szrBHxye6o2z5EJzU+5B79tubNOC+nLAEzTTn1vPUGoUuehKh8kYKqiVUTWRyaQ==", + "dev": true, + "requires": { + "es6-promise": "^4.2.5" + } + }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", @@ -10871,12 +12133,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -10896,6 +12152,12 @@ "lodash._reinterpolate": "^3.0.0" } }, + "lodash.unescape": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.unescape/-/lodash.unescape-4.0.1.tgz", + "integrity": "sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw=", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -10922,6 +12184,68 @@ "wrap-ansi": "^3.0.1" }, "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -10957,9 +12281,9 @@ } }, "loglevel": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz", - "integrity": "sha512-LoEDv5pgpvWgPF4kNYuIp0qqSJVWak/dML0RY74xlzMZiT9w77teNAwKYKWBTYjlokMirg+o3jBwp+vlLrcfAA==", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", + "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", "dev": true }, "loose-envify": { @@ -11009,9 +12333,9 @@ "dev": true }, "magic-string": { - "version": "0.25.2", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.2.tgz", - "integrity": "sha512-iLs9mPjh9IuTtRsqqhNGYcZXGei0Nh/A4xirrsqW7c+QhKVFL2vm7U09ru6cHRD22azaP/wMDgI+HCqbETMTtg==", + "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" @@ -11033,16 +12357,16 @@ "dev": true }, "make-fetch-happen": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.2.tgz", - "integrity": "sha512-YMJrAjHSb/BordlsDEcVcPyTbiJKkzqMf48N8dAJZT9Zjctrkb6Yg4TY9Sq2AwSIQJFn5qBBKVTYt3vP5FMIHA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", "dev": true, "requires": { "agentkeepalive": "^3.4.1", - "cacache": "^11.3.3", + "cacache": "^12.0.0", "http-cache-semantics": "^3.8.1", "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", + "https-proxy-agent": "^2.2.3", "lru-cache": "^5.1.1", "mississippi": "^3.0.0", "node-fetch-npm": "^2.0.2", @@ -11097,12 +12421,20 @@ } }, "matcher": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz", - "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-2.1.0.tgz", + "integrity": "sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.4" + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } } }, "md5.js": { @@ -11137,14 +12469,6 @@ "map-age-cleaner": "^0.1.1", "mimic-fn": "^2.0.0", "p-is-promise": "^2.0.0" - }, - "dependencies": { - "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 - } } }, "mem-fs": { @@ -11235,6 +12559,15 @@ "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "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" + } + }, "vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", @@ -11409,9 +12742,9 @@ "dev": true }, "merge-jsons-webpack-plugin": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/merge-jsons-webpack-plugin/-/merge-jsons-webpack-plugin-1.0.19.tgz", - "integrity": "sha512-D4i5TpsNfu9dCERF2k2k0yT7FkgkHeCeaGph7NRuDaTaZv3QYgwC6rQMyaBfCR78oYShe2pdtbfdlix3NfYBVg==", + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/merge-jsons-webpack-plugin/-/merge-jsons-webpack-plugin-1.0.20.tgz", + "integrity": "sha512-snMNz/6ltX1zIFgkgSlGeuSN6DCM0CFEo4f2A3OB618k4EDQvj1QjpQhzsYSN5XMKK+B3mrojQAWFMegljKC6Q==", "dev": true, "requires": { "es6-promise": "4.0.5", @@ -11441,18 +12774,15 @@ } }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "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 }, "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.3.0.tgz", + "integrity": "sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw==", "dev": true }, "methods": { @@ -11505,24 +12835,24 @@ "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==", + "version": "1.43.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz", + "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==", "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.26", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz", + "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.43.0" } }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, "mimic-response": { @@ -11532,15 +12862,91 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz", - "integrity": "sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ==", + "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" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + } } }, "minimalistic-assert": { @@ -11581,22 +12987,100 @@ } }, "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "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" } }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "minipass-pipeline": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", + "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "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.2.1" + "minipass": "^2.9.0" } }, "mississippi": { @@ -11618,9 +13102,9 @@ } }, "mitt": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.1.3.tgz", - "integrity": "sha512-mUDCnVNsAi+eD6qA0HkRkwYczbLHJ49z17BGe2PYRhZL4wpZUFZGJHU7/5tmvohoma+Hdn0Vh/oJTiPEmgSruA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", "dev": true }, "mixin-deep": { @@ -11644,24 +13128,6 @@ } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -11672,9 +13138,9 @@ } }, "mocha": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz", - "integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz", + "integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==", "dev": true, "requires": { "ansi-colors": "3.2.3", @@ -11697,9 +13163,9 @@ "supports-color": "6.0.0", "which": "1.3.1", "wide-align": "1.1.3", - "yargs": "13.2.2", - "yargs-parser": "13.0.0", - "yargs-unparser": "1.5.0" + "yargs": "13.3.0", + "yargs-parser": "13.1.1", + "yargs-unparser": "1.6.0" }, "dependencies": { "ansi-colors": { @@ -11708,6 +13174,17 @@ "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -11717,6 +13194,12 @@ "ms": "^2.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 + }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -11731,6 +13214,12 @@ "path-is-absolute": "^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 + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -11748,6 +13237,12 @@ "strip-ansi": "^5.1.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 + }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -11757,33 +13252,33 @@ "has-flag": "^3.0.0" } }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, "yargs": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz", - "integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^5.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.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz", - "integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "yargs-parser": "^13.1.1" } } } @@ -11794,9 +13289,9 @@ "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, "moment-locales-webpack-plugin": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.0.7.tgz", - "integrity": "sha512-KjYpaAhmuzGFZl6534FlZoK7QtW3vqlxd+A17W9DlgHJ5yhXANy7AZJl7iYtZpWjAfMTAWiVrQ7YDZdkFO6uRw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/moment-locales-webpack-plugin/-/moment-locales-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-s+JE7lADQjUyeQvqB3sVcfxXncg1o+t5hrRl2GBY66vXuLO2tXIjD+4mNUXQMS10qCGoeK3R3skBrW34gHobBQ==", "dev": true, "requires": { "lodash.difference": "^4.5.0" @@ -11814,6 +13309,17 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" + }, + "dependencies": { + "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" + } + } } }, "ms": { @@ -11851,9 +13357,9 @@ } }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nan": { @@ -11901,9 +13407,9 @@ "dev": true }, "ng-jhipster": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ng-jhipster/-/ng-jhipster-0.10.1.tgz", - "integrity": "sha512-V0SHd0P5DzCnwNPdxoholnkIJ7uy8IP+eQksE9hRkBtxAm0qNtZlScxMRvgKeY9s3pzwvNZeOuLFuU7/4XoikQ==", + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/ng-jhipster/-/ng-jhipster-0.11.5.tgz", + "integrity": "sha512-lf5QyimRalusHRxz4V92tIENvqki1iJMPUqf1tf7qX41MWjsq0c7zRrhEOOyvbJbyZOyxHj4+oePLORQ/B+oBg==", "requires": { "tslib": "^1.9.0" } @@ -11917,9 +13423,9 @@ } }, "ngx-infinite-scroll": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-7.2.0.tgz", - "integrity": "sha512-EcqjKpU1ukRV3YXOW8cTVtbzPpa9UPaRtYBCg0ZQH3ceCDm+xzLbd4pXy6oKAIN4zN1r/pyGuf5XOJkA8vr6yg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ngx-infinite-scroll/-/ngx-infinite-scroll-8.0.1.tgz", + "integrity": "sha512-YpgkTPDNT7UCEp0GRX178V1nF+M2slCPJ2TX3CpvPZb5AR99JYwj/fNivcue5lN51oUaTySEG27qjVU73vKhjw==", "requires": { "opencollective-postinstall": "^2.0.2" } @@ -11958,9 +13464,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -11977,9 +13483,9 @@ } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-int64": { @@ -12019,11 +13525,35 @@ "vm-browserify": "^1.0.1" }, "dependencies": { + "events": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "dev": true + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "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 + } + } } } }, @@ -12034,9 +13564,9 @@ "dev": true }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", "dev": true, "requires": { "growly": "^1.3.0", @@ -12047,28 +13577,20 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, "node-releases": { - "version": "1.1.26", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.26.tgz", - "integrity": "sha512-fZPsuhhUHMTlfkhDLGtfY80DSJTjOcx+qD1j5pqPkuhUHVS7xHZIg9EE4DHK8O3f0zTxXHX5VIkDG8pu98/wfQ==", + "version": "1.1.45", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.45.tgz", + "integrity": "sha512-cXvGSfhITKI8qsV116u2FTzH5EWZJfgG7d4cpqwF8I8+1tWpD6AsvvGRKq2onR0DNj1jfqsjkXZsm14JMS7Cyg==", "dev": true, "requires": { - "semver": "^5.3.0" - }, - "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - } + "semver": "^6.3.0" } }, "normalize-package-data": { @@ -12084,9 +13606,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -12104,21 +13626,65 @@ "dev": true }, "normalize-url": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", - "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, "requires": { - "object-assign": "^4.0.1", - "prepend-http": "^1.0.0", - "query-string": "^4.1.0", - "sort-keys": "^1.0.0" + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + } } }, "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==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "requires": { + "config-chain": "^1.1.11", + "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 + } + } + }, + "npm-keyword": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-keyword/-/npm-keyword-5.0.0.tgz", + "integrity": "sha1-mbha7Cn8s4jS3TUfABO/Umh4fmc=", + "dev": true, + "requires": { + "got": "^7.1.0", + "registry-url": "^3.0.3" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", "dev": true }, "npm-package-arg": { @@ -12134,17 +13700,17 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.4.tgz", - "integrity": "sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.7.tgz", + "integrity": "sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ==", "dev": true, "requires": { "ignore-walk": "^3.0.1", @@ -12161,9 +13727,9 @@ } }, "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==", + "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", @@ -12172,25 +13738,26 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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": "3.9.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.9.1.tgz", - "integrity": "sha512-VQCEZlydXw4AwLROAXWUR7QDfe2Y8Id/vpAgp6TI1/H78a4SiQ1kQrKZALm5/zxM5n4HIi+aYb+idUAV/RuY0Q==", + "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": "^4.0.2", - "npm-package-arg": "^6.1.0" + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" } }, "npm-run-path": { @@ -12246,9 +13813,9 @@ "dev": true }, "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, "oauth-sign": { @@ -12306,6 +13873,24 @@ } } }, + "object-hash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.1.tgz", + "integrity": "sha512-HgcGMooY4JC2PBt9sdUdJ6PMzpin+YtY3r/7wg0uTifP+HJWW8rammseSEHuyt0UeShI183UGssCJqm1bJR7QA==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, + "object-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz", + "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -12340,13 +13925,13 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -12359,13 +13944,13 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -12407,18 +13992,18 @@ "dev": true }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "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": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "open": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.2.0.tgz", - "integrity": "sha512-Vxf6HJkwrqmvh9UAID3MnMYXntbTxKLOSfOnO7LJdzPf3NE3KQYFNV0/Lcz2VAndbRFil58XVCyh8tiX11fiYw==", + "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" @@ -12455,34 +14040,76 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", "dev": true, "requires": { - "cssnano": "^4.1.0", + "cssnano": "^4.1.10", "last-call-webpack-plugin": "^3.0.0" } }, "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", "dev": true, "requires": { "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", + "fast-levenshtein": "~2.0.6", "levn": "~0.3.0", "prelude-ls": "~1.1.2", "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" }, "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } } } }, @@ -12550,6 +14177,15 @@ "os-tmpdir": "^1.0.0" } }, + "p-any": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-any/-/p-any-1.1.0.tgz", + "integrity": "sha512-Ef0tVa4CZ5pTAmKn+Cg3w8ABBXh+hHO1aV8281dKOoUHfX+3tjG2EaFcC+aZyagg9b4EYGsHEjz21DnEE8Og2g==", + "dev": true, + "requires": { + "p-some": "^2.0.0" + } + }, "p-cancelable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", @@ -12584,9 +14220,9 @@ "dev": true }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -12630,6 +14266,15 @@ } } }, + "p-some": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-some/-/p-some-2.0.1.tgz", + "integrity": "sha1-Zdh8ixVO289SIdFnd4ttLhUPbwY=", + "dev": true, + "requires": { + "aggregate-error": "^1.0.0" + } + }, "p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", @@ -12645,19 +14290,107 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "package-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-5.0.0.tgz", + "integrity": "sha512-EeHQFFTlEmLrkIQoxbE9w0FuAWHoc1XpthDqnZ/i9keOt701cteyXwAxQFLpVqVjj3feh2TodkihjLaRUtIgLg==", + "dev": true, + "requires": { + "got": "^8.3.1", + "registry-auth-token": "^3.3.2", + "registry-url": "^3.1.0", + "semver": "^5.5.0" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + } + }, + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + } + } + }, "pacote": { - "version": "9.5.0", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.0.tgz", - "integrity": "sha512-aUplXozRbzhaJO48FaaeClmN+2Mwt741MC6M3bevIGZwdCaP7frXzbUOfOWa91FPHoLITzG0hYaKY363lxO3bg==", + "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": "^11.3.2", + "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": "^4.0.1", + "make-fetch-happen": "^5.0.0", "minimatch": "^3.0.4", "minipass": "^2.3.5", "mississippi": "^3.0.0", @@ -12666,7 +14399,7 @@ "npm-package-arg": "^6.1.0", "npm-packlist": "^1.1.12", "npm-pick-manifest": "^2.2.3", - "npm-registry-fetch": "^3.8.0", + "npm-registry-fetch": "^4.0.0", "osenv": "^0.1.5", "promise-inflight": "^1.0.1", "promise-retry": "^1.1.1", @@ -12680,14 +14413,40 @@ "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" + } + }, + "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" + } + }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } }, + "pad-component": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", + "integrity": "sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw=", + "dev": true + }, "pako": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", @@ -12695,12 +14454,12 @@ "dev": true }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "~0.2.2", + "cyclist": "^1.0.1", "inherits": "^2.0.3", "readable-stream": "^2.1.5" } @@ -12714,10 +14473,19 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "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", @@ -12728,12 +14496,27 @@ "safe-buffer": "^5.1.1" } }, + "parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "dev": true + }, "parse-gitignore": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-1.0.1.tgz", "integrity": "sha512-UGyowyjtx26n65kdAMWhm6/3uy5uSrpcuH7tt+QEVudiBoVS+eqHxD5kbi9oWVRwj7sCzXqwuM+rUGw7earl6A==", "dev": true }, + "parse-help": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-help/-/parse-help-1.0.0.tgz", + "integrity": "sha512-dlOrbBba6Rrw/nrJ+V7/vkGZdiimWJQzMHZZrYsUq03JE8AV3fAv6kOYX7dP/w2h67lIdmRf8ES8mU44xAgE/Q==", + "dev": true, + "requires": { + "execall": "^1.0.0" + } + }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -12750,9 +14533,10 @@ "dev": true }, "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true }, "parseqs": { "version": "0.0.5", @@ -12784,6 +14568,47 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, + "passwd-user": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/passwd-user/-/passwd-user-2.1.0.tgz", + "integrity": "sha1-+tnbauJS+LCI4MXezSCn2gxdnx4=", + "dev": true, + "requires": { + "execa": "^0.4.0", + "pify": "^2.3.0" + }, + "dependencies": { + "execa": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.4.0.tgz", + "integrity": "sha1-TrZGejaglfq7KXD/nV4/t7zm68M=", + "dev": true, + "requires": { + "cross-spawn-async": "^2.1.1", + "is-stream": "^1.1.0", + "npm-run-path": "^1.0.0", + "object-assign": "^4.0.1", + "path-key": "^1.0.0", + "strip-eof": "^1.0.0" + } + }, + "npm-run-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", + "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", + "dev": true, + "requires": { + "path-key": "^1.0.0" + } + }, + "path-key": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", + "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", + "dev": true + } + } + }, "path-browserify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", @@ -12869,9 +14694,9 @@ "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==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz", + "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==", "dev": true }, "pify": { @@ -13004,9 +14829,9 @@ } }, "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", "dev": true, "requires": { "semver-compare": "^1.0.0" @@ -13071,30 +14896,33 @@ "dev": true }, "portfinder": { - "version": "1.0.21", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.21.tgz", - "integrity": "sha512-ESabpDCzmBS3ekHbmpAIiESq3udRsCBGiBZLsC+HgBKv2ezb0R4oG+7RnYEVZ/ZCfhel5Tx3UzdNWA0Lox2QCA==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", + "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", "dev": true, "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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": { - "ms": "2.0.0" + "lodash": "^4.17.14" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "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" + } } } }, @@ -13115,9 +14943,9 @@ "dev": true }, "postcss": { - "version": "7.0.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.17.tgz", - "integrity": "sha512-546ZowA+KZ3OasvQZHsbuEpysvwTZNGJv9EfyCQdsIDltPSWHAeTQ5fQy/Npi2ZDtLI3zs7Ps/p6wThErhm9fQ==", + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -13170,6 +14998,12 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "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 } } }, @@ -13184,6 +15018,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-convert-values": { @@ -13194,6 +15036,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-discard-comments": { @@ -13252,6 +15102,51 @@ "postcss": "^7.0.0", "postcss-load-config": "^2.0.0", "schema-utils": "^1.0.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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" + } + } } }, "postcss-merge-longhand": { @@ -13264,6 +15159,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "stylehacks": "^4.0.0" + }, + "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-merge-rules": { @@ -13301,6 +15204,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-minify-gradients": { @@ -13313,6 +15224,14 @@ "is-color-stop": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-minify-params": { @@ -13327,6 +15246,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "uniqs": "^2.0.0" + }, + "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-minify-selectors": { @@ -13373,20 +15300,12 @@ "postcss": "^7.0.16", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.0.tgz", - "integrity": "sha512-ESPktioptiSUchCKgggAkzdmkgzKfmp0EU8jXH+5kbIUB+unr0Y4CY9SRMvibuvYUBjNh1ACLbxqYNpdTQOteQ==", - "dev": true - } } }, "postcss-modules-scope": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz", - "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz", + "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==", "dev": true, "requires": { "postcss": "^7.0.6", @@ -13421,6 +15340,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-positions": { @@ -13433,6 +15360,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-repeat-style": { @@ -13445,6 +15380,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-string": { @@ -13456,6 +15399,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-timing-functions": { @@ -13467,6 +15418,14 @@ "cssnano-util-get-match": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-unicode": { @@ -13478,6 +15437,14 @@ "browserslist": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-normalize-url": { @@ -13497,6 +15464,12 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", "dev": true + }, + "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 } } }, @@ -13508,6 +15481,14 @@ "requires": { "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-ordered-values": { @@ -13519,6 +15500,14 @@ "cssnano-util-get-arguments": "^4.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-reduce-initial": { @@ -13543,6 +15532,14 @@ "has": "^1.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0" + }, + "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-selector-parser": { @@ -13574,6 +15571,14 @@ "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" + }, + "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-unique-selectors": { @@ -13588,9 +15593,9 @@ } }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", + "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==", "dev": true }, "prelude-ls": { @@ -13606,15 +15611,15 @@ "dev": true }, "prettier": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", - "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "pretty-bytes": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.2.0.tgz", - "integrity": "sha512-ujANBhiUsl9AhREUDUEY1GPOharMGm8x8juS7qOHybcLi7XsKfrYQ88hSly1l2i0klXHTDYrlL8ihMCG55Dc3w==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.3.0.tgz", + "integrity": "sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg==", "dev": true }, "pretty-error": { @@ -13628,12 +15633,12 @@ } }, "pretty-format": { - "version": "24.8.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.8.0.tgz", - "integrity": "sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", + "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", "dev": true, "requires": { - "@jest/types": "^24.8.0", + "@jest/types": "^24.9.0", "ansi-regex": "^4.0.0", "ansi-styles": "^3.2.0", "react-is": "^16.8.4" @@ -13648,9 +15653,9 @@ } }, "primeflex": { - "version": "1.0.0-rc.1", - "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-1.0.0-rc.1.tgz", - "integrity": "sha512-JVrQE0ulyP0UJ3Rn8UI1RjmpHU/f4CIm7BI18xoMLlUriAViiykFMmtDTvUC0AZWHl4YhgEvHJIZ7EERxER2cg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-1.0.0.tgz", + "integrity": "sha512-/K9iHXm5wu6gZycQDP/gsfX7BpJKSNVhxTOZAJBLH88idPtC2lMgUXm28qfXFqsbxaTI49oBuMYBFlg/DBmUMg==" }, "primeicons": { "version": "1.0.0", @@ -13679,13 +15684,19 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", + "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", "dev": true, "requires": { - "asap": "~2.0.3" + "asap": "~2.0.6" } }, "promise-inflight": { @@ -13705,13 +15716,13 @@ } }, "prompts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.1.0.tgz", - "integrity": "sha512-+x5TozgqYdOwWsQFZizE/Tra3fKvAoy037kOyU6cgz84n8f6zxngLOV4O32kTwt9FcLCxAqw0P/c8rOr9y+Gfg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.0.tgz", + "integrity": "sha512-NfbbPPg/74fT7wk2XYQ7hAIp9zJyZp5Fu19iRbORqqy1BhtrkZ0fPafBU+7bmn8ie69DpT0R6QpJIN2oisYjJg==", "dev": true, "requires": { - "kleur": "^3.0.2", - "sisteransi": "^1.0.0" + "kleur": "^3.0.3", + "sisteransi": "^1.0.3" } }, "property-expr": { @@ -13720,6 +15731,12 @@ "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", "dev": true }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", + "dev": true + }, "protoduck": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", @@ -13850,9 +15867,9 @@ "dev": true }, "psl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", - "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz", + "integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ==", "dev": true }, "public-encrypt": { @@ -13921,11 +15938,12 @@ "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=", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { + "decode-uri-component": "^0.2.0", "object-assign": "^4.1.0", "strict-uri-encode": "^1.0.0" } @@ -14009,6 +16027,32 @@ "unpipe": "1.0.0" } }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": 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 + }, + "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 + } + } + }, "react": { "version": "0.14.9", "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz", @@ -14026,9 +16070,9 @@ "dev": true }, "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==", + "version": "16.12.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.12.0.tgz", + "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", "dev": true }, "read-chunk": { @@ -14050,29 +16094,27 @@ } }, "read-package-json": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", - "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.1.1.tgz", + "integrity": "sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+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" + "npm-normalize-package-bin": "^1.0.0" } }, "read-package-tree": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.2.tgz", - "integrity": "sha512-rW3XWUUkhdKmN2JKB4FL563YAgtINifso5KShykufR03nJ5loGFlkUMe1g/yxmqX073SoYYTsgXu7XdDinKZuA==", + "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": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" } }, "read-pkg": { @@ -14118,9 +16160,9 @@ } }, "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==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -14251,6 +16293,22 @@ "integrity": "sha512-4qf/7IsIKfSNHQXSwial1IFmfM1Cc/whNBQqRwe0V2stPe7KmN1U0tWQiIx6JiirgSrisjE0eECdNf7Tav1Ntw==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + }, "regexpu-core": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", @@ -14262,6 +16320,25 @@ "regjsparser": "^0.1.4" } }, + "registry-auth-token": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz", + "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", + "dev": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", + "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", + "dev": true, + "requires": { + "rc": "^1.0.1" + } + }, "regjsgen": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", @@ -14331,6 +16408,15 @@ "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" + } + }, "replace-ext": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", @@ -14366,21 +16452,21 @@ } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz", + "integrity": "sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ==", "dev": true, "requires": { - "lodash": "^4.17.11" + "lodash": "^4.17.15" } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.8.tgz", + "integrity": "sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ==", "dev": true, "requires": { - "request-promise-core": "1.1.2", + "request-promise-core": "1.1.3", "stealthy-require": "^1.1.1", "tough-cookie": "^2.3.3" } @@ -14404,9 +16490,9 @@ "dev": true }, "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.2.tgz", + "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -14419,6 +16505,14 @@ "dev": true, "requires": { "resolve-from": "^3.0.0" + }, + "dependencies": { + "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-dir": { @@ -14429,12 +16523,25 @@ "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-url": { @@ -14470,13 +16577,22 @@ } } }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "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": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -14505,9 +16621,9 @@ "dev": true }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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" @@ -14523,6 +16639,30 @@ "inherits": "^2.0.1" } }, + "roarr": { + "version": "2.14.6", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.14.6.tgz", + "integrity": "sha512-qjbw0BEesKA+3XFBPt+KVe1PC/Z6ShfJ4wPlx2XifqH5h2Lj8/KQT5XJTsy3n1Es5kai+BwKALaECW3F70B1cg==", + "dev": true, + "requires": { + "boolean": "^3.0.0", + "detect-node": "^2.0.4", + "globalthis": "^1.0.0", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + } + }, + "root-check": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/root-check/-/root-check-1.0.0.tgz", + "integrity": "sha1-xSp5S/Dbn61WdTbkGJjwyeCoZpc=", + "dev": true, + "requires": { + "downgrade-root": "^1.0.0", + "sudo-block": "^1.1.0" + } + }, "rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -14560,9 +16700,9 @@ "dev": true }, "rxjs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", - "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "requires": { "tslib": "^1.9.0" } @@ -14614,38 +16754,57 @@ } }, "sass": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.21.0.tgz", - "integrity": "sha512-67hIIOZZtarbhI2aSgKBPDUgn+VqetduKoD+ZSYeIWg+ksNioTzeX+R2gUdebDoolvKNsQ/GY9NDxctbXluTNA==", + "version": "1.23.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.23.7.tgz", + "integrity": "sha512-cYgc0fanwIpi0rXisGxl+/wadVQ/HX3RhpdRcjLdj2o2ye/sxUTpAxIhbmJy3PLQgRFbf6Pn8Jsrta2vdXcoOQ==", "dev": true, "requires": { - "chokidar": "^2.0.0" + "chokidar": ">=2.0.0 <4.0.0" } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz", + "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==", "dev": true, "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.1.0", + "semver": "^6.3.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "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 }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } @@ -14660,9 +16819,9 @@ } }, "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=", "dev": true }, "saxes": { @@ -14675,14 +16834,13 @@ } }, "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==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", + "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1" } }, "scoped-regex": { @@ -14709,6 +16867,15 @@ "xml2js": "^0.4.17" }, "dependencies": { + "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" + } + }, "tmp": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", @@ -14721,18 +16888,18 @@ } }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "0.9.0" } }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, "semver-compare": { @@ -14741,6 +16908,23 @@ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", "dev": true }, + "semver-diff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", + "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", + "dev": true, + "requires": { + "semver": "^5.0.3" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, "semver-dsl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", @@ -14751,9 +16935,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -14768,9 +16952,32 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "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 } } @@ -14843,10 +17050,19 @@ } } }, + "serialize-error": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-5.0.0.tgz", + "integrity": "sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA==", + "dev": true, + "requires": { + "type-fest": "^0.8.0" + } + }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "serve-index": { @@ -14987,22 +17203,12 @@ } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -15044,9 +17250,9 @@ "dev": true }, "simple-git": { - "version": "1.122.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.122.0.tgz", - "integrity": "sha512-plTwhnkIHrw2TFMJbJH/mKwWGgFbj03V9wcfBKa4FsuvgJbpwdlSJnlvkIQWDV1CVLaf2Gl6zSNeRRnxBRhX1g==", + "version": "1.129.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.129.0.tgz", + "integrity": "sha512-XbzNmugMTeV2crZnPl+b1ZJn+nqXCUNyrZxDXpLM0kHL3B85sbPlpd8q9I4qtAHI9D2FxTB6w4BuiAGKYtyzKw==", "dev": true, "requires": { "debug": "^4.0.1" @@ -15073,6 +17279,15 @@ "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } } } }, @@ -15094,9 +17309,9 @@ } }, "sisteransi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.2.tgz", - "integrity": "sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.4.tgz", + "integrity": "sha512-/ekMoM4NJ59ivGSfKapeG+FWtrmWvA1p6FBZwXrqojw90vJu8lBmrTxCMuBCydKtkaUe2zt4PlxeTKpjwMbyig==", "dev": true }, "slash": { @@ -15106,15 +17321,28 @@ "dev": true }, "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + } + } }, "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==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", "dev": true }, "snapdragon": { @@ -15299,6 +17527,19 @@ "yeast": "0.1.2" } }, + "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" + } + }, "isarray": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", @@ -15364,52 +17605,37 @@ } }, "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=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", "dev": true }, "socket.io-client": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", - "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", "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.3.1", - "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.3.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=", + "debug": "~4.1.0", + "engine.io-client": "~3.4.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.3.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 } } @@ -15465,9 +17691,9 @@ } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "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", @@ -15499,13 +17725,13 @@ } }, "socks": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.2.tgz", - "integrity": "sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", "dev": true, "requires": { - "ip": "^1.1.5", - "smart-buffer": "4.0.2" + "ip": "1.1.5", + "smart-buffer": "^4.1.0" } }, "socks-proxy-agent": { @@ -15530,14 +17756,24 @@ } }, "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", "dev": true, "requires": { "is-plain-obj": "^1.0.0" } }, + "sort-on": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sort-on/-/sort-on-3.0.0.tgz", + "integrity": "sha512-e2RHeY1iM6dT9od3RoqeJSyz3O7naNFsGy34+EFEcwghjAncuOXC2/Xwq87S4FbypqLVp6PcizYEsGEGsGIDXA==", + "dev": true, + "requires": { + "arrify": "^1.0.0", + "dot-prop": "^4.1.1" + } + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -15551,12 +17787,12 @@ "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -15564,9 +17800,9 @@ } }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -15588,9 +17824,9 @@ "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==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.7.tgz", + "integrity": "sha512-RuN23NzhAOuUtaivhcrjXx1OPXsFeH9m5sI373/U7+tGLKihjUyboZAzOadytMjnqHp1f45RGk1IzDKCpDpSYA==", "dev": true }, "spawn-sync": { @@ -15636,9 +17872,9 @@ "dev": true }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "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", @@ -15735,9 +17971,9 @@ "dev": true }, "stackframe": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", - "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.1.tgz", + "integrity": "sha512-0PlYhdKh6AfFxRyK/v+6/k+/mMfyiEBbTM5L94D0ZytQnJ166wuwoTYLHFWGbs2dpA8Rgq763KGWmN1EQEYHRQ==", "dev": true }, "staged-git-files": { @@ -15813,9 +18049,9 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "stream-throttle": { @@ -15859,6 +18095,12 @@ "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", @@ -15877,26 +18119,47 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } } } }, + "string.prototype.trimleft": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", + "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", + "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", + "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", @@ -15984,19 +18247,53 @@ "dev": true }, "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=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", "dev": true }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.1.tgz", + "integrity": "sha512-CnpEkSR1C+REjudiTWCv4+ssP7SCiuaQZJTZDWBRwTJoS90mdqkB8uOGMHKgVeUzpaU7IfLWoyQbvvs5Joj3Xw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "^1.2.3", + "schema-utils": "^2.0.1" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "stylehacks": { @@ -16023,6 +18320,59 @@ } } }, + "sudo-block": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sudo-block/-/sudo-block-1.2.0.tgz", + "integrity": "sha1-zFOb+BkWJNT1B9g+60W0zqJ/NGM=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "is-docker": "^1.0.0", + "is-root": "^1.0.0" + }, + "dependencies": { + "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": "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" + } + }, + "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" + } + }, + "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 + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16033,17 +18383,17 @@ } }, "svgo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.0.tgz", - "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", "css-select": "^2.0.0", "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.33", - "csso": "^3.5.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", "js-yaml": "^3.13.1", "mkdirp": "~0.5.1", "object.values": "^1.1.0", @@ -16054,17 +18404,23 @@ }, "dependencies": { "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^2.1.2", + "css-what": "^3.2.1", "domutils": "^1.7.0", "nth-check": "^1.0.2" } }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "dev": true + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -16074,13 +18430,19 @@ "dom-serializer": "0", "domelementtype": "1" } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true } } }, - "swagger-ui": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/swagger-ui/-/swagger-ui-2.2.10.tgz", - "integrity": "sha1-sl56IWZOXZC/OR2zDbCN5B6FLXs=" + "swagger-ui-dist": { + "version": "3.24.3", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-3.24.3.tgz", + "integrity": "sha512-kB8qobP42Xazaym7sD9g5mZuRL4416VIIYZMqPEIskkzKqbPLQGEiHA3ga31bdzyzFLgr6Z797+6X1Am6zYpbg==" }, "symbol-observable": { "version": "1.2.0", @@ -16094,12 +18456,69 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "sync-request": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.0.0.tgz", + "integrity": "sha512-jGNIAlCi9iU4X3Dm4oQnNQshDD3h0/1A7r79LyqjbjUnj69sX6mShAXlhRXgImsfVKtTcnra1jfzabdZvp+Lmw==", + "dev": true, + "requires": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + } + }, + "sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "requires": { + "get-port": "^3.1.0" + } + }, "synchronous-promise": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.9.tgz", - "integrity": "sha512-LO95GIW16x69LuND1nuuwM4pjgFGupg7pZ/4lU86AmchPKrhk0o2tpMU2unXRrqo81iAFe1YJ0nAGEVwsrZAgg==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.10.tgz", + "integrity": "sha512-6PC+JRGmNjiG3kJ56ZMNWDPL8hjyghF5cMXIFOKg+NiwwEZZIvxTWd0pinWKyD227odg9ygF8xVhhz7gb8Uq7A==", "dev": true }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-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 + }, + "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" + } + } + } + }, "tabtab": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-2.2.2.tgz", @@ -16283,36 +18702,119 @@ "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", "dev": true, "requires": { - "os-tmpdir": "~1.0.1" + "os-tmpdir": "~1.0.1" + } + } + } + }, + "taketalk": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/taketalk/-/taketalk-1.0.0.tgz", + "integrity": "sha1-tNTw3u0gauffd1sSnqLKbeUvJt0=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1", + "minimist": "^1.1.0" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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" + } + }, + "term-size": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", + "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", + "dev": true, + "requires": { + "execa": "^0.7.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "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 } } }, - "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.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, "terser": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.1.2.tgz", - "integrity": "sha512-jvNoEQSPXJdssFwqPSgWjsOrb+ELoE+ILpHPKXC83tIxOlh2U75F1KuB2luLD/3a6/7K3Vw5pDn+hvu0C4AzSw==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.2.tgz", + "integrity": "sha512-6FUjJdY2i3WZAtYBtnV06OOcOfzl+4hSKYE9wgac8rkLRBToPDDrBB2AcHwQD/OKDxbnvhVy2YgOPWO2SsKWqg==", "dev": true, "requires": { "commander": "^2.20.0", @@ -16329,70 +18831,126 @@ } }, "terser-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-yez0HdpDf/iQVYGf+e/o8ZYWLb1g9d1nRRi5FIOZ4KfXbfSPT259UoqxPiSLhCnr0mlDoh+bucpYQSFbU0cEsQ==", "dev": true, "requires": { - "cacache": "^11.3.2", - "find-cache-dir": "^2.0.0", - "is-wsl": "^1.1.0", - "loader-utils": "^1.2.3", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.7.0", + "cacache": "^13.0.1", + "find-cache-dir": "^3.1.0", + "jest-worker": "^24.9.0", + "schema-utils": "^2.6.1", + "serialize-javascript": "^2.1.2", "source-map": "^0.6.1", - "terser": "^4.0.0", - "webpack-sources": "^1.3.0", - "worker-farm": "^1.7.0" + "terser": "^4.4.2", + "webpack-sources": "^1.4.3" }, "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==", + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "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==", + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" } }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "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==", + "fs-minipass": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", + "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", "dev": true, "requires": { - "find-up": "^3.0.0" + "minipass": "^3.0.0" } }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true }, + "minipass": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "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" + } + }, "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 + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -16487,9 +19045,9 @@ "dev": true }, "textextensions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.4.0.tgz", - "integrity": "sha512-qftQXnX1DzpSV8EddtHIT0eDDEiBF8ywhFYR2lI9xrGtxqKN+CvLXhACeCIGbCpQfxxERbrkZEFb8cZcDKbVZA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.6.0.tgz", + "integrity": "sha512-49WtAWS+tcsy93dRt6P0P3AMD2m5PvXRhuEA0kaXos5ZLlujtYmpmFsB+QvWUSxE1ZsstmYXfQ7L40+EcQgpAQ==", "dev": true }, "tfunk": { @@ -16544,15 +19102,76 @@ } } }, + "then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "requires": { + "@types/concat-stream": "^1.6.0", + "@types/form-data": "0.0.33", + "@types/node": "^8.0.0", + "@types/qs": "^6.2.31", + "caseless": "~0.12.0", + "concat-stream": "^1.6.0", + "form-data": "^2.2.0", + "http-basic": "^8.1.1", + "http-response-object": "^3.0.1", + "promise": "^8.0.0", + "qs": "^6.4.0" + }, + "dependencies": { + "@types/node": { + "version": "8.10.59", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", + "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", + "dev": true + } + } + }, "thread-loader": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.2.tgz", - "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", "dev": true, "requires": { "loader-runner": "^2.3.1", "loader-utils": "^1.1.0", "neo-async": "^2.6.0" + }, + "dependencies": { + "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 + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } } }, "throat": { @@ -16578,9 +19197,9 @@ } }, "thunky": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", - "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "timed-out": { @@ -16590,9 +19209,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -16604,6 +19223,12 @@ "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, + "titleize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/titleize/-/titleize-1.0.1.tgz", + "integrity": "sha512-rUwGDruKq1gX+FFHbTl5qjI7teVO7eOe+C8IcQ7QT+1BK3eEUXJqbZcBOeaRP4FwSC/C1A5jDoIVta0nIQ9yew==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -16686,37 +19311,45 @@ } }, "to-string-loader": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.5.tgz", - "integrity": "sha1-e3qheJG3u0lHp6Eb+wO1/enG5pU=", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/to-string-loader/-/to-string-loader-1.1.6.tgz", + "integrity": "sha512-VNg62//PS1WfNwrK3n7t6wtK5Vdtx/qeYLLEioW46VMlYUwAYT6wnfB+OwS2FMTCalIHu0tk79D3RXX8ttmZTQ==", "dev": true, "requires": { - "loader-utils": "^0.2.16" + "loader-utils": "^1.0.0" }, "dependencies": { "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true + "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" + } }, "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "requires": { - "big.js": "^3.1.3", + "big.js": "^5.2.2", "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" + "json5": "^1.0.1" } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true } } }, @@ -16771,12 +19404,6 @@ "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", "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 - }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -16784,15 +19411,16 @@ "dev": true }, "ts-jest": { - "version": "24.0.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz", - "integrity": "sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-24.3.0.tgz", + "integrity": "sha512-Hb94C/+QRIgjVZlJyiWwouYUF+siNJHJHknyspaOcZ+OQAIdFG/UrdQVXw/0B8Z3No34xkUXZJpOTy9alOWdVQ==", "dev": true, "requires": { "bs-logger": "0.x", "buffer-from": "1.x", "fast-json-stable-stringify": "2.x", "json5": "2.x", + "lodash.memoize": "4.x", "make-error": "1.x", "mkdirp": "0.x", "resolve": "1.x", @@ -16807,9 +19435,9 @@ "dev": true }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "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" @@ -16822,9 +19450,9 @@ "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "yargs-parser": { @@ -16839,9 +19467,9 @@ } }, "ts-loader": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.0.2.tgz", - "integrity": "sha512-kkF3sGf3oBUehlvXI9fkbItbFTnNgGkYAz91vtWnsKAU4m+LAmQjuby7uTZNo3As+/zHLuyB052SkQDY6vLXtg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-6.2.1.tgz", + "integrity": "sha512-Dd9FekWuABGgjE1g0TlQJ+4dFUfYGbYcs52/HQObE0ZmUNjQlmLAS7xXsSzy23AMaMwipsx5sNHvoEpT2CZq1g==", "dev": true, "requires": { "chalk": "^2.3.0", @@ -16851,6 +19479,12 @@ "semver": "^6.0.0" }, "dependencies": { + "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 + }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", @@ -16875,6 +19509,26 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "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" + } + }, + "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" + } + }, "micromatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", @@ -16885,6 +19539,12 @@ "picomatch": "^2.0.5" } }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -16897,9 +19557,9 @@ } }, "ts-node": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.2.0.tgz", - "integrity": "sha512-m8XQwUurkbYqXrKqr3WHCW310utRNvV5OnRVeISeea7LoCWVcdfeB/Ntl8JYWFh+WRoUAdBgESrzKochQt7sMw==", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.5.4.tgz", + "integrity": "sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw==", "dev": true, "requires": { "arg": "^4.1.0", @@ -16923,16 +19583,16 @@ "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tslint": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz", - "integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==", + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", + "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", @@ -16943,45 +19603,33 @@ "tsutils": "^2.29.0" }, "dependencies": { - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "diff": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", + "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", "dev": true - } - } - }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", - "dev": true - }, - "tslint-loader": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/tslint-loader/-/tslint-loader-3.5.4.tgz", - "integrity": "sha512-jBHNNppXut6SgZ7CsTBh+6oMwVum9n8azbmcYSeMlsABhWWoHwjq631vIFXef3VSd75cCdX3rc6kstsB7rSVVw==", - "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "object-assign": "^4.1.1", - "rimraf": "^2.4.4", - "semver": "^5.3.0" - }, - "dependencies": { + }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "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" + } } } }, "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -16993,6 +19641,12 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -17008,6 +19662,18 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "twig": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/twig/-/twig-1.14.0.tgz", + "integrity": "sha512-ut1LslUKAeF56TYQglabJaATUqbNuGO3EcXDhUspAdNbxez5VwTk2n8H00V0VfNy9Scet+VGQP8oPxt4v6mykQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.6.3", + "locutus": "^2.0.5", + "minimatch": "3.0.x", + "walk": "2.3.x" + } + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -17024,9 +19690,9 @@ "dev": true }, "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, "type-is": { @@ -17129,6 +19795,15 @@ "imurmurhash": "^0.1.4" } }, + "unique-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", + "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", + "dev": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, "universal-analytics": { "version": "0.4.20", "resolved": "https://registry.npmjs.org/universal-analytics/-/universal-analytics-0.4.20.tgz", @@ -17222,11 +19897,29 @@ "dev": true }, "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, + "update-notifier": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz", + "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", + "dev": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -17249,9 +19942,9 @@ "dev": true }, "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=", "dev": true, "requires": { "punycode": "1.3.2", @@ -17329,6 +20022,15 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha1-PCI2R2xNMsX/PEcAKt18E7moKlM=", + "dev": true, + "requires": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, "util.promisify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", @@ -17352,15 +20054,15 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", "dev": true }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, "validate-npm-package-license": { @@ -17431,9 +20133,9 @@ } }, "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==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, "w3c-hr-time": { @@ -17456,6 +20158,15 @@ "xml-name-validator": "^3.0.0" } }, + "walk": { + "version": "2.3.14", + "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", + "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", + "dev": true, + "requires": { + "foreachasync": "^3.0.0" + } + }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -17485,6 +20196,15 @@ "minimalistic-assert": "^1.0.0" } }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, "webdriver-js-extender": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz", @@ -17504,9 +20224,9 @@ } }, "webdriver-manager": { - "version": "12.1.5", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.5.tgz", - "integrity": "sha512-f1apDjMpZ8SHlXtXGzqBxOjV+WQcDRz5PN7pWScgjXS7vhUIFcM3V89Shetf4A04n8DDR2MxiVQq6JproFcRZw==", + "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", @@ -17582,10 +20302,19 @@ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "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" + } + }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "strip-ansi": { @@ -17612,117 +20341,303 @@ "dev": true }, "webpack": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.34.0.tgz", - "integrity": "sha512-ry2IQy1wJjOefLe1uJLzn5tG/DdIKzQqNlIAd2L84kcaADqNvQDTBlo8UcCNyDaT5FiaB+16jhAkb63YeG3H8Q==", + "version": "4.41.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.2.tgz", + "integrity": "sha512-Zhw69edTGfbz9/8JJoyRQ/pq8FYUoY0diOXqW0T6yhgdhCv6wr0hra5DwwWexNRns2Z2+gsnrNcbe9hbGBgk/A==", "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.0.5", - "acorn-dynamic-import": "^4.0.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", + "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.0", + "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", + "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.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.1", + "watchpack": "^1.6.0", + "webpack-sources": "^1.4.1" }, "dependencies": { "acorn": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz", - "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", + "dev": true + }, + "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 + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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 + }, + "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" + } + }, + "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" + } + }, + "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.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.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", + "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "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": "^2.1.2", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } } } }, "webpack-cli": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.4.tgz", - "integrity": "sha512-ubJGQEKMtBSpT+LiL5hXvn2GIOWiRWItR1DGUqJRhwRBeGhpRXjvF5f0erqdRJLErkfqS5/Ldkkedh4AL5Q1ZQ==", + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz", + "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==", "dev": true, "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.0", - "findup-sync": "^2.0.0", - "global-modules": "^1.0.0", - "import-local": "^2.0.0", - "interpret": "^1.1.0", - "loader-utils": "^1.1.0", - "prettier": "^1.17.0", - "supports-color": "^5.5.0", - "v8-compile-cache": "^2.0.2", - "yargs": "^12.0.5" + "chalk": "2.4.2", + "cross-spawn": "6.0.5", + "enhanced-resolve": "4.1.0", + "findup-sync": "3.0.0", + "global-modules": "2.0.0", + "import-local": "2.0.0", + "interpret": "1.2.0", + "loader-utils": "1.2.3", + "supports-color": "6.1.0", + "v8-compile-cache": "2.0.3", + "yargs": "13.2.4" }, "dependencies": { - "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==", + "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 }, - "require-main-filename": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-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 + }, + "json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "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" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "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" + } + }, + "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" + } + }, + "v8-compile-cache": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", + "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", "dev": true }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.2.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", + "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", + "cliui": "^5.0.0", "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "get-caller-file": "^2.0.1", + "os-locale": "^3.1.0", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^3.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" + "y18n": "^4.0.0", + "yargs-parser": "^13.1.0" } } } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "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.2", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", "range-parser": "^1.2.1", "webpack-log": "^2.0.0" }, @@ -17736,41 +20651,43 @@ } }, "webpack-dev-server": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.7.1.tgz", - "integrity": "sha512-GSBjjDMQ+uJI/Rcw/NfXDq5QpfE4HviafCy2SdbJ8Q22MwsnyoHd5TbWRfxgkbklsMx+ZNgWIKK+cB28ynjiDQ==", + "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.6", + "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", + "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.2", + "loglevel": "^1.6.4", "opn": "^5.5.0", "p-retry": "^3.0.1", - "portfinder": "^1.0.20", + "portfinder": "^1.0.25", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.4", - "semver": "^6.1.1", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "^4.0.0", + "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.0", + "webpack-dev-middleware": "^3.7.2", "webpack-log": "^2.0.0", + "ws": "^6.2.1", "yargs": "12.0.5" }, "dependencies": { @@ -17822,6 +20739,18 @@ } } }, + "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-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-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -17867,17 +20796,64 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "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 }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "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" + } + }, + "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" + } + }, + "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" + } + } + } }, "strip-ansi": { "version": "3.0.1", @@ -17897,6 +20873,25 @@ "has-flag": "^3.0.0" } }, + "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" + } + }, + "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" + } + }, "yargs": { "version": "12.0.5", "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", @@ -17937,21 +20932,29 @@ "requires": { "ansi-colors": "^3.0.0", "uuid": "^3.3.2" + }, + "dependencies": { + "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 + } } }, "webpack-merge": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", - "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "lodash": "^4.17.5" + "lodash": "^4.17.15" } }, "webpack-notifier": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.7.0.tgz", - "integrity": "sha512-L3UKrl500xk0VDYKkwQxy5/BPhBWsZ2xHsAx2Qe3dVKYUEk9+y690RcNTMIUcVOK2fRgK7KK3PA4ccOq1h+fTg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", + "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", "dev": true, "requires": { "node-notifier": "^5.1.2", @@ -17977,9 +20980,9 @@ } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "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", @@ -18077,6 +21080,81 @@ "dev": true, "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "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 + }, + "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" + } + }, + "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" + } + } + } + }, + "widest-line": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", + "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", + "dev": true, + "requires": { + "string-width": "^2.1.1" + }, + "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 + }, + "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 + }, + "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" + } + }, + "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" + } + } } }, "win-release": { @@ -18089,9 +21167,9 @@ }, "dependencies": { "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true } } @@ -18102,6 +21180,15 @@ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", "dev": true }, + "windows-release": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.2.0.tgz", + "integrity": "sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA==", + "dev": true, + "requires": { + "execa": "^1.0.0" + } + }, "winston": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", @@ -18152,9 +21239,9 @@ } }, "with-open-file": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.6.tgz", - "integrity": "sha512-SQS05JekbtwQSgCYlBsZn/+m2gpn4zWsqpCYIrCHva0+ojXcnmUEPsBN6Ipoz3vmY/81k5PvYEWSxER2g4BTqA==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz", + "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==", "dev": true, "requires": { "p-finally": "^1.0.0", @@ -18170,6 +21257,12 @@ } } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", @@ -18191,486 +21284,903 @@ "integrity": "sha512-MTSfgzIljpKLTBPROo4IpKjESD86pPFlZwlvVG32Kb70hW+aob4Jxpblud8EhNb1/L5m43DUM4q7C+W6eQMMbA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "workbox-core": "^4.3.1" + } + }, + "workbox-build": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", + "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.3.4", + "@hapi/joi": "^15.0.0", + "common-tags": "^1.8.0", + "fs-extra": "^4.0.2", + "glob": "^7.1.3", + "lodash.template": "^4.4.0", + "pretty-bytes": "^5.1.0", + "stringify-object": "^3.3.0", + "strip-comments": "^1.0.2", + "workbox-background-sync": "^4.3.1", + "workbox-broadcast-update": "^4.3.1", + "workbox-cacheable-response": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-expiration": "^4.3.1", + "workbox-google-analytics": "^4.3.1", + "workbox-navigation-preload": "^4.3.1", + "workbox-precaching": "^4.3.1", + "workbox-range-requests": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1", + "workbox-streams": "^4.3.1", + "workbox-sw": "^4.3.1", + "workbox-window": "^4.3.1" + }, + "dependencies": { + "fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.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" + } + } + } + }, + "workbox-cacheable-response": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", + "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-core": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", + "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==", + "dev": true + }, + "workbox-expiration": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", + "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-google-analytics": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", + "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "dev": true, + "requires": { + "workbox-background-sync": "^4.3.1", + "workbox-core": "^4.3.1", + "workbox-routing": "^4.3.1", + "workbox-strategies": "^4.3.1" + } + }, + "workbox-navigation-preload": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", + "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-precaching": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", + "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-range-requests": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", + "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-routing": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", + "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-strategies": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", + "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-streams": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", + "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "workbox-sw": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", + "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==", + "dev": true + }, + "workbox-webpack-plugin": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", + "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", + "dev": true, + "requires": { + "@babel/runtime": "^7.0.0", + "json-stable-stringify": "^1.0.1", + "workbox-build": "^4.3.1" + } + }, + "workbox-window": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", + "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "dev": true, + "requires": { + "workbox-core": "^4.3.1" + } + }, + "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-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dev": true, + "requires": { + "microevent.ts": "~0.1.1" } }, - "workbox-build": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-4.3.1.tgz", - "integrity": "sha512-UHdwrN3FrDvicM3AqJS/J07X0KXj67R8Cg0waq1MKEOqzo89ap6zh6LmaLnRAjpB+bDIz+7OlPye9iii9KBnxw==", + "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": { - "@babel/runtime": "^7.3.4", - "@hapi/joi": "^15.0.0", - "common-tags": "^1.8.0", - "fs-extra": "^4.0.2", - "glob": "^7.1.3", - "lodash.template": "^4.4.0", - "pretty-bytes": "^5.1.0", - "stringify-object": "^3.3.0", - "strip-comments": "^1.0.2", - "workbox-background-sync": "^4.3.1", - "workbox-broadcast-update": "^4.3.1", - "workbox-cacheable-response": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-expiration": "^4.3.1", - "workbox-google-analytics": "^4.3.1", - "workbox-navigation-preload": "^4.3.1", - "workbox-precaching": "^4.3.1", - "workbox-range-requests": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1", - "workbox-streams": "^4.3.1", - "workbox-sw": "^4.3.1", - "workbox-window": "^4.3.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": 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": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "number-is-nan": "^1.0.0" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "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": { - "graceful-fs": "^4.1.6" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.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" } } } }, - "workbox-cacheable-response": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-4.3.1.tgz", - "integrity": "sha512-Rp5qlzm6z8IOvnQNkCdO9qrDgDpoPNguovs0H8C+wswLuPgSzSp9p2afb5maUt9R1uTIwOXrVQMmPfPypv+npw==", - "dev": true, - "requires": { - "workbox-core": "^4.3.1" - } - }, - "workbox-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-4.3.1.tgz", - "integrity": "sha512-I3C9jlLmMKPxAC1t0ExCq+QoAMd0vAAHULEgRZ7kieCdUd919n53WC0AfvokHNwqRhGn+tIIj7vcb5duCjs2Kg==", + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "workbox-expiration": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-4.3.1.tgz", - "integrity": "sha512-vsJLhgQsQouv9m0rpbXubT5jw0jMQdjpkum0uT+d9tTwhXcEZks7qLfQ9dGSaufTD2eimxbUOJfWLbNQpIDMPw==", + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "mkdirp": "^0.5.1" } }, - "workbox-google-analytics": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-4.3.1.tgz", - "integrity": "sha512-xzCjAoKuOb55CBSwQrbyWBKqp35yg1vw9ohIlU2wTy06ZrYfJ8rKochb1MSGlnoBfXGWss3UPzxR5QL5guIFdg==", + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { - "workbox-background-sync": "^4.3.1", - "workbox-core": "^4.3.1", - "workbox-routing": "^4.3.1", - "workbox-strategies": "^4.3.1" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, - "workbox-navigation-preload": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-4.3.1.tgz", - "integrity": "sha512-K076n3oFHYp16/C+F8CwrRqD25GitA6Rkd6+qAmLmMv1QHPI2jfDwYqrytOfKfYq42bYtW8Pr21ejZX7GvALOw==", + "write-file-webpack-plugin": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.1.tgz", + "integrity": "sha512-AZ7qJUvhTCBiOtG21aFJUcNuLVo2FFM6JMGKvaUGAH+QDqQAp2iG0nq3GcuXmJOFQR2JjpjhyYkyPrbFKhdjNQ==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "chalk": "^2.4.0", + "debug": "^3.1.0", + "filesize": "^3.6.1", + "lodash": "^4.17.13", + "mkdirp": "^0.5.1", + "moment": "^2.22.1", + "write-file-atomic": "^2.3.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" + } + } } }, - "workbox-precaching": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-4.3.1.tgz", - "integrity": "sha512-piSg/2csPoIi/vPpp48t1q5JLYjMkmg5gsXBQkh/QYapCdVwwmKlU9mHdmy52KsDGIjVaqEUMFvEzn2LRaigqQ==", + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "async-limiter": "~1.0.0" } }, - "workbox-range-requests": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-4.3.1.tgz", - "integrity": "sha512-S+HhL9+iTFypJZ/yQSl/x2Bf5pWnbXdd3j57xnb0V60FW1LVn9LRZkPtneODklzYuFZv7qK6riZ5BNyc0R0jZA==", + "xdg-basedir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", + "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", + "dev": true + }, + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xml2js": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "sax": ">=0.6.0", + "xmlbuilder": "~9.0.1" } }, - "workbox-routing": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-4.3.1.tgz", - "integrity": "sha512-FkbtrODA4Imsi0p7TW9u9MXuQ5P4pVs1sWHK4dJMMChVROsbEltuE79fBoIk/BCztvOJ7yUpErMKa4z3uQLX+g==", + "xmlbuilder": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", + "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "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": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "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" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-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 + }, + "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" + } + } } }, - "workbox-strategies": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-4.3.1.tgz", - "integrity": "sha512-F/+E57BmVG8dX6dCCopBlkDvvhg/zj6VDs0PigYwSN23L8hseSRwljrceU2WzTvk/+BSYICsWmRq5qHS2UYzhw==", + "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": { - "workbox-core": "^4.3.1" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "workbox-streams": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-4.3.1.tgz", - "integrity": "sha512-4Kisis1f/y0ihf4l3u/+ndMkJkIT4/6UOacU3A4BwZSAC9pQ9vSvJpIi/WFGQRH/uPXvuVjF5c2RfIPQFSS2uA==", + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "dependencies": { + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-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 + }, + "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" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "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.1.1" + } + } } }, - "workbox-sw": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-4.3.1.tgz", - "integrity": "sha512-0jXdusCL2uC5gM3yYFT6QMBzKfBr2XTk0g5TPAV4y8IZDyVNDyj1a8uSXy3/XrvkVTmQvLN4O5k3JawGReXr9w==", + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", "dev": true }, - "workbox-webpack-plugin": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-4.3.1.tgz", - "integrity": "sha512-gJ9jd8Mb8wHLbRz9ZvGN57IAmknOipD3W4XNE/Lk/4lqs5Htw4WOQgakQy/o/4CoXQlMCYldaqUg+EJ35l9MEQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "json-stable-stringify": "^1.0.1", - "workbox-build": "^4.3.1" - } - }, - "workbox-window": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-4.3.1.tgz", - "integrity": "sha512-C5gWKh6I58w3GeSc0wp2Ne+rqVw8qwcmZnQGpjiek8A2wpbxSJb1FdCoQVO+jDJs35bFgo/WETgl1fqgsxN0Hg==", + "yeoman-character": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/yeoman-character/-/yeoman-character-1.1.0.tgz", + "integrity": "sha1-kNS1vq+SdZCGF3AVsv36LgaE18c=", "dev": true, "requires": { - "workbox-core": "^4.3.1" + "supports-color": "^3.1.2" + }, + "dependencies": { + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } } }, - "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==", + "yeoman-doctor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yeoman-doctor/-/yeoman-doctor-4.0.0.tgz", + "integrity": "sha512-CP0fwGk5Y+jel+A0AQbyqnIFZRRpkKOeYUibiTSmlgV9PcgNFFVwn86VcUIpDLOqVjF+9v+O9FWQMo+IUcV2mA==", "dev": true, "requires": { - "errno": "~0.1.7" + "ansi-styles": "^3.2.0", + "bin-version-check": "^3.0.0", + "chalk": "^2.3.0", + "global-agent": "^2.0.0", + "global-tunnel-ng": "^2.5.3", + "latest-version": "^3.1.0", + "log-symbols": "^2.1.0", + "semver": "^5.0.3", + "twig": "^1.10.5", + "user-home": "^2.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 + } } }, - "worker-rpc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", - "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "yeoman-environment": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.4.tgz", + "integrity": "sha512-KLxE5ft/74Qj7h3AsQZv8G6MEEHYJwmD5F99nfOVaep3rBzCtbrJKkdqWc7bDV141Nr8UZZsIXmzc3IcCm6E2w==", "dev": true, "requires": { - "microevent.ts": "~0.1.1" + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.5.0", + "escape-string-regexp": "^1.0.2", + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^6.0.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.2.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.3" + }, + "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 + }, + "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" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "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" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "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" + } + } } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "yeoman-generator": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-3.2.0.tgz", + "integrity": "sha512-iR/qb2je3GdXtSfxgvOXxUW0Cp8+C6LaZaNlK2BAICzFNzwHtM10t/QBwz5Ea9nk6xVDQNj4Q889TjCXGuIv8w==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "async": "^2.6.0", + "chalk": "^2.3.0", + "cli-table": "^0.3.1", + "cross-spawn": "^6.0.5", + "dargs": "^6.0.0", + "dateformat": "^3.0.3", + "debug": "^4.1.0", + "detect-conflict": "^1.0.0", + "error": "^7.0.2", + "find-up": "^3.0.0", + "github-username": "^4.0.0", + "istextorbinary": "^2.2.1", + "lodash": "^4.17.10", + "make-dir": "^1.1.0", + "mem-fs-editor": "^5.0.0", + "minimist": "^1.2.0", + "pretty-bytes": "^5.1.0", + "read-chunk": "^3.0.0", + "read-pkg-up": "^4.0.0", + "rimraf": "^2.6.2", + "run-async": "^2.0.0", + "shelljs": "^0.8.0", + "text-table": "^0.2.0", + "through2": "^3.0.0", + "yeoman-environment": "^2.0.5" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": 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=", + "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": { - "number-is-nan": "^1.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "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": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "pify": "^3.0.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-file-webpack-plugin": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/write-file-webpack-plugin/-/write-file-webpack-plugin-4.5.0.tgz", - "integrity": "sha512-k46VeERtaezbmjpDcMWATjKUWBrVe/ZEEm0cyvUm8FFP8A/r+dw5x3psRvkUOhqh9bqBLUlGYYbtr6luI+HeAg==", - "dev": true, - "requires": { - "chalk": "^2.4.0", - "debug": "^3.1.0", - "filesize": "^3.6.1", - "lodash": "^4.17.5", - "mkdirp": "^0.5.1", - "moment": "^2.22.1", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "dev": true, "requires": { - "ms": "^2.1.1" + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" } - } - } - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", - "dev": true - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - } - }, - "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "dev": true - }, - "xmlchars": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", - "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==", - "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.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - }, - "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" - }, - "dependencies": { - "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==", + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "glob": "^7.1.3" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "through2": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", + "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "dev": true, + "requires": { + "readable-stream": "2 || 3" } } } }, - "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" - } + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true }, - "yargs-unparser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz", - "integrity": "sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==", + "yo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yo/-/yo-3.1.0.tgz", + "integrity": "sha512-boSESRRyvfyns3DfzxF2F0LVV97wSEFbKUi1oC7RwnZTA66KZ7Bo3JjOLe7mM6IjjeI0vEZcr4BbFjrSHh8d0Q==", "dev": true, "requires": { - "flat": "^4.1.0", + "async": "^2.6.1", + "chalk": "^2.4.1", + "cli-list": "^0.2.0", + "configstore": "^3.1.2", + "cross-spawn": "^6.0.5", + "figures": "^2.0.0", + "fullname": "^3.2.0", + "global-agent": "^2.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^8.3.2", + "humanize-string": "^1.0.2", + "inquirer": "^6.0.0", + "insight": "^0.10.3", "lodash": "^4.17.11", - "yargs": "^12.0.5" + "meow": "^3.0.0", + "npm-keyword": "^5.0.0", + "open": "^6.3.0", + "package-json": "^5.0.0", + "parse-help": "^1.0.0", + "read-pkg-up": "^4.0.0", + "root-check": "^1.0.0", + "sort-on": "^3.0.0", + "string-length": "^2.0.0", + "tabtab": "^1.3.2", + "titleize": "^1.0.1", + "update-notifier": "^2.5.0", + "user-home": "^2.0.0", + "yeoman-character": "^1.0.0", + "yeoman-doctor": "^4.0.0", + "yeoman-environment": "^2.4.0", + "yosay": "^2.0.2" }, "dependencies": { - "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==", + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", + "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": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "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=", + "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" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", "dev": true }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "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" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "restore-cursor": "^1.0.1" } - } - } - }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "yeoman-environment": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.4.tgz", - "integrity": "sha512-KLxE5ft/74Qj7h3AsQZv8G6MEEHYJwmD5F99nfOVaep3rBzCtbrJKkdqWc7bDV141Nr8UZZsIXmzc3IcCm6E2w==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "diff": "^3.5.0", - "escape-string-regexp": "^1.0.2", - "globby": "^8.0.1", - "grouped-queue": "^0.3.3", - "inquirer": "^6.0.0", - "is-scoped": "^1.0.0", - "lodash": "^4.17.10", - "log-symbols": "^2.2.0", - "mem-fs": "^1.1.0", - "strip-ansi": "^4.0.0", - "text-table": "^0.2.0", - "untildify": "^3.0.3" - }, - "dependencies": { + }, + "conf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-1.4.0.tgz", + "integrity": "sha512-bzlVWS2THbMetHqXKB8ypsXN4DQ/1qopGwNJi1eYbpwesJcd86FBjFciCQX/YwAhp9bM7NVnPFqZ5LpV7gP0Dg==", + "dev": true, + "requires": { + "dot-prop": "^4.1.0", + "env-paths": "^1.0.0", + "make-dir": "^1.0.0", + "pkg-up": "^2.0.0", + "write-file-atomic": "^2.3.0" + } + }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "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.1.1" + "ms": "2.0.0" } }, "dir-glob": { @@ -18683,6 +22193,48 @@ "path-type": "^3.0.0" } }, + "external-editor": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", + "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "spawn-sync": "^1.0.15", + "tmp": "^0.0.29" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "globby": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", @@ -18698,101 +22250,178 @@ "slash": "^1.0.0" } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { - "pify": "^3.0.0" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" } }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } }, - "strip-ansi": { + "insight": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/insight/-/insight-0.10.3.tgz", + "integrity": "sha512-YOncxSN6Omh+1Oqxt+OJAvJVMDKw7l6IEG0wT2cTMGxjsTcroOGW4IR926QDzxg/uZHcFZ2cZbckDWdZhc2pZw==", + "dev": true, + "requires": { + "async": "^2.6.2", + "chalk": "^2.4.2", + "conf": "^1.4.0", + "inquirer": "^6.3.1", + "lodash.debounce": "^4.0.8", + "os-name": "^3.1.0", + "request": "^2.88.0", + "tough-cookie": "^3.0.1", + "uuid": "^3.3.2" + } + }, + "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" + } + }, + "load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } - } - } - }, - "yeoman-generator": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-3.2.0.tgz", - "integrity": "sha512-iR/qb2je3GdXtSfxgvOXxUW0Cp8+C6LaZaNlK2BAICzFNzwHtM10t/QBwz5Ea9nk6xVDQNj4Q889TjCXGuIv8w==", - "dev": true, - "requires": { - "async": "^2.6.0", - "chalk": "^2.3.0", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^6.0.0", - "dateformat": "^3.0.3", - "debug": "^4.1.0", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^3.0.0", - "github-username": "^4.0.0", - "istextorbinary": "^2.2.1", - "lodash": "^4.17.10", - "make-dir": "^1.1.0", - "mem-fs-editor": "^5.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^5.1.0", - "read-chunk": "^3.0.0", - "read-pkg-up": "^4.0.0", - "rimraf": "^2.6.2", - "run-async": "^2.0.0", - "shelljs": "^0.8.0", - "text-table": "^0.2.0", - "through2": "^3.0.0", - "yeoman-environment": "^2.0.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + }, + "macos-release": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz", + "integrity": "sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==", + "dev": true + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "lodash": "^4.17.14" + "pify": "^3.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + } } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stream": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", + "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", + "dev": true + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true + }, + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", "dev": true, "requires": { - "pify": "^3.0.0" + "p-finally": "^1.0.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -18803,6 +22432,15 @@ "json-parse-better-errors": "^1.0.1" } }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, "path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -18818,16 +22456,11 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true }, "read-pkg-up": { "version": "4.0.0", @@ -18837,6 +22470,68 @@ "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "dev": true, + "requires": { + "exit-hook": "^1.0.0", + "onetime": "^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" + } + }, + "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": { @@ -18845,22 +22540,267 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "through2": { + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "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 + }, + "tabtab": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/tabtab/-/tabtab-1.3.2.tgz", + "integrity": "sha1-u5wspjJPZZ/edjTCyvPAluEYfKc=", + "dev": true, + "requires": { + "debug": "^2.2.0", + "inquirer": "^1.0.2", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "npmlog": "^2.0.3", + "object-assign": "^4.1.0" + }, + "dependencies": { + "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" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + } + }, + "inquirer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", + "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", + "dev": true, + "requires": { + "ansi-escapes": "^1.1.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "external-editor": "^1.1.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "mute-stream": "0.0.6", + "pinkie-promise": "^2.0.0", + "run-async": "^2.2.0", + "rx": "^4.1.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + } + } + }, + "tmp": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", + "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + }, + "tough-cookie": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz", - "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", + "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", "dev": true, "requires": { - "readable-stream": "2 || 3" + "ip-regex": "^2.1.0", + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "yeoman-environment": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.7.0.tgz", + "integrity": "sha512-YNzSUWgJVSgnm0qgLON4Gb2nTm+kywBiWjK4MbvosjUP2YJJ30lNhEx7ukyzKRPUlsavd5IsuALtF6QaVrq81A==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "diff": "^3.5.0", + "escape-string-regexp": "^1.0.2", + "globby": "^8.0.1", + "grouped-queue": "^0.3.3", + "inquirer": "^6.0.0", + "is-scoped": "^1.0.0", + "lodash": "^4.17.10", + "log-symbols": "^2.2.0", + "mem-fs": "^1.1.0", + "strip-ansi": "^4.0.0", + "text-table": "^0.2.0", + "untildify": "^3.0.3" + }, + "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 + }, + "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" + } + }, + "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 + }, + "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" + } + } } } } }, - "yn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", - "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", - "dev": true + "yosay": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/yosay/-/yosay-2.0.2.tgz", + "integrity": "sha512-avX6nz2esp7IMXGag4gu6OyQBsMh/SEn+ZybGu3yKPlOTE6z9qJrzG/0X5vCq/e0rPFy0CUYCze0G5hL310ibA==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0", + "ansi-styles": "^3.0.0", + "chalk": "^1.0.0", + "cli-boxes": "^1.0.0", + "pad-component": "0.0.1", + "string-width": "^2.0.0", + "strip-ansi": "^3.0.0", + "taketalk": "^1.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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" + }, + "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 + } + } + }, + "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 + }, + "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" + } + } + } + }, + "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" + } + }, + "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 + } + } }, "yup": { "version": "0.27.0", @@ -18885,9 +22825,9 @@ } }, "zone.js": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.9.1.tgz", - "integrity": "sha512-GkPiJL8jifSrKReKaTZ5jkhrMEgXbXYC+IPo1iquBjayRa0q86w3Dipjn8b415jpitMExe9lV8iTsv8tk3DGag==" + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.2.tgz", + "integrity": "sha512-UAYfiuvxLN4oyuqhJwd21Uxb4CNawrq6fPS/05Su5L4G+1TN+HVDJMUHNMobVQDFJRir2cLAODXwluaOKB7HFg==" } } } diff --git a/test/samples/primeng-blueprint-test/package.json b/test/samples/primeng-blueprint-test/package.json index dcb3bbcb..8ee5ce69 100644 --- a/test/samples/primeng-blueprint-test/package.json +++ b/test/samples/primeng-blueprint-test/package.json @@ -1,6 +1,6 @@ { "name": "primengtest", - "version": "0.0.0", + "version": "0.0.1-SNAPSHOT", "description": "Description for primengtest", "private": true, "license": "UNLICENSED", @@ -8,120 +8,119 @@ "node_modules" ], "dependencies": { - "@angular/animations": "8.0.0", - "@angular/cdk": "8.0.0", - "@angular/common": "8.0.0", - "@angular/compiler": "8.0.0", - "@angular/core": "8.0.0", - "@angular/forms": "8.0.0", - "@angular/platform-browser": "8.0.0", - "@angular/platform-browser-dynamic": "8.0.0", - "@angular/router": "8.0.0", - "@fortawesome/angular-fontawesome": "0.4.0", - "@fortawesome/fontawesome-svg-core": "1.2.19", - "@fortawesome/free-solid-svg-icons": "5.9.0", - "@ng-bootstrap/ng-bootstrap": "4.2.1", + "@angular/animations": "8.2.14", + "@angular/cdk": "8.2.3", + "@angular/common": "8.2.14", + "@angular/compiler": "8.2.14", + "@angular/core": "8.2.14", + "@angular/forms": "8.2.14", + "@angular/platform-browser": "8.2.14", + "@angular/platform-browser-dynamic": "8.2.14", + "@angular/router": "8.2.14", + "@fortawesome/angular-fontawesome": "0.5.0", + "@fortawesome/fontawesome-svg-core": "1.2.26", + "@fortawesome/free-solid-svg-icons": "5.12.0", + "@ng-bootstrap/ng-bootstrap": "5.1.4", "@ngx-translate/core": "11.0.1", "@ngx-translate/http-loader": "4.0.0", - "bootstrap": "4.3.1", - "core-js": "3.1.3", + "bootstrap": "4.4.1", + "core-js": "3.5.0", "flat": "^4.1.0", "moment": "2.24.0", - "ng-jhipster": "0.10.1", + "ng-jhipster": "0.11.5", "ngx-cookie": "4.0.2", - "ngx-infinite-scroll": "7.2.0", + "ngx-infinite-scroll": "8.0.1", "ngx-webstorage": "4.0.1", "primeflex": "^1.0.0-rc.1", "primeicons": "^1.0.0", "primeng": "https://github.com/yelhouti/primeng/releases/download/8.0.0-rc2/primeng-8.0.0-rc.2-SNAPSHOT.tgz", - "rxjs": "6.5.2", - "swagger-ui": "2.2.10", + "rxjs": "6.5.3", + "swagger-ui-dist": "3.24.3", "tslib": "1.10.0", - "zone.js": "0.9.1" + "zone.js": "0.10.2" }, "devDependencies": { - "@angular/cli": "8.0.2", - "@angular/compiler-cli": "8.0.0", - "@ngtools/webpack": "8.0.2", - "@types/chai": "4.1.7", - "@types/chai-string": "1.4.1", + "@angular/cli": "8.3.20", + "@angular/compiler-cli": "8.2.14", + "@ngtools/webpack": "8.3.20", + "@types/chai": "4.2.7", + "@types/chai-string": "1.4.2", "@types/flat": "0.0.28", - "@types/jest": "24.0.14", + "@types/jest": "24.0.23", "@types/mocha": "5.2.7", - "@types/node": "10.12.27", - "@types/selenium-webdriver": "4.0.0", - "angular-router-loader": "0.8.5", + "@types/node": "12.12.17", + "@typescript-eslint/eslint-plugin": "2.11.0", + "@typescript-eslint/eslint-plugin-tslint": "2.11.0", + "@typescript-eslint/parser": "2.11.0", + "@types/selenium-webdriver": "4.0.5", "angular2-template-loader": "0.6.2", - "autoprefixer": "9.6.0", + "autoprefixer": "9.7.3", "base-href-webpack-plugin": "2.0.0", "browser-sync": "2.26.7", "browser-sync-webpack-plugin": "2.2.2", - "cache-loader": "4.0.0", + "cache-loader": "4.1.0", "chai": "4.2.0", "chai-as-promised": "7.1.1", "chai-string": "1.5.0", - "codelyzer": "5.1.0", - "copy-webpack-plugin": "5.0.3", - "css-loader": "3.0.0", - "file-loader": "4.0.0", - "fork-ts-checker-webpack-plugin": "1.3.6", + "codelyzer": "5.2.0", + "copy-webpack-plugin": "5.1.1", + "css-loader": "3.3.2", + "eslint": "6.7.2", + "eslint-config-jhipster": "0.0.1", + "eslint-config-prettier": "6.7.0", + "eslint-loader": "3.0.3", + "file-loader": "5.0.2", + "fork-ts-checker-webpack-plugin": "3.1.1", "friendly-errors-webpack-plugin": "1.7.0", - "generator-jhipster": "6.1.2", + "generator-jhipster": "6.6.0", "html-loader": "0.5.5", "html-webpack-plugin": "3.2.0", - "husky": "2.4.1", - "jest": "24.8.0", - "jest-junit": "6.4.0", - "jest-preset-angular": "7.1.1", + "husky": "3.1.0", + "jest": "24.9.0", + "jest-date-mock": "1.0.7", + "jest-junit": "10.0.0", + "jest-preset-angular": "8.0.0", "jest-sonar-reporter": "2.0.0", - "lint-staged": "8.2.0", - "merge-jsons-webpack-plugin": "1.0.19", - "mini-css-extract-plugin": "0.7.0", - "mocha": "6.1.4", - "moment-locales-webpack-plugin": "1.0.7", - "optimize-css-assets-webpack-plugin": "5.0.1", + "lint-staged": "8.2.1", + "merge-jsons-webpack-plugin": "1.0.20", + "mini-css-extract-plugin": "0.8.0", + "mocha": "6.2.2", + "moment-locales-webpack-plugin": "1.1.2", + "optimize-css-assets-webpack-plugin": "5.0.3", "postcss-loader": "3.0.0", - "prettier": "1.18.2", + "prettier": "1.19.1", "protractor": "5.4.2", "reflect-metadata": "0.1.13", - "rimraf": "2.6.3", - "sass": "1.21.0", - "sass-loader": "7.1.0", + "rimraf": "3.0.0", + "sass": "1.23.7", + "sass-loader": "8.0.0", "simple-progress-webpack-plugin": "1.1.2", - "style-loader": "0.23.1", - "terser-webpack-plugin": "1.3.0", - "thread-loader": "2.1.2", - "to-string-loader": "1.1.5", - "ts-loader": "6.0.2", - "ts-node": "8.2.0", - "tslint": "5.17.0", - "tslint-config-prettier": "1.18.0", - "tslint-loader": "3.5.4", + "style-loader": "1.0.1", + "terser-webpack-plugin": "2.3.0", + "thread-loader": "2.1.3", + "to-string-loader": "1.1.6", + "ts-loader": "6.2.1", + "ts-node": "8.5.4", + "tslint": "5.20.1", "typescript": "3.4.5", - "generator-jhipster-primeng": "0.0.0", - "generator-jhipster-primeng-blueprint": "0.0.0", - "webdriver-manager": "12.1.5", - "webpack": "4.34.0", - "webpack-cli": "3.3.4", - "webpack-dev-server": "3.7.1", - "webpack-merge": "4.2.1", - "webpack-notifier": "1.7.0", + "generator-jhipster-primeng-blueprint": "latest", + "webdriver-manager": "12.1.7", + "@openapitools/openapi-generator-cli": "0.0.14-4.0.2", + "webpack": "4.41.2", + "webpack-cli": "3.3.10", + "webpack-dev-server": "3.9.0", + "webpack-merge": "4.2.2", + "webpack-notifier": "1.8.0", "webpack-visualizer-plugin": "0.1.11", "workbox-webpack-plugin": "4.3.1", - "write-file-webpack-plugin": "4.5.0" + "write-file-webpack-plugin": "4.5.1" }, "engines": { "node": ">=8.9.0" }, - "lint-staged": { - "{,src/**/}*.{md,json,ts,css,scss,yml}": [ - "prettier --write", - "git add" - ] - }, "scripts": { "prettier:format": "prettier --write \"{,src/**/}*.{md,json,ts,css,scss,yml}\"", - "lint": "tslint --project tsconfig.json -e 'node_modules/**'", + "lint": "eslint . --ext .js,.ts", "lint:fix": "npm run lint -- --fix", "ngc": "ngc -p tsconfig-aot.json", "cleanup": "rimraf build/resources/main/static/ build/resources/main/aot", diff --git a/test/samples/primeng-blueprint-test/settings.gradle b/test/samples/primeng-blueprint-test/settings.gradle deleted file mode 100644 index 2eebc46c..00000000 --- a/test/samples/primeng-blueprint-test/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name = "primengtest" diff --git a/test/samples/primeng-blueprint-test/sonar-project.properties b/test/samples/primeng-blueprint-test/sonar-project.properties deleted file mode 100644 index d6561050..00000000 --- a/test/samples/primeng-blueprint-test/sonar-project.properties +++ /dev/null @@ -1,33 +0,0 @@ -sonar.projectKey=compositekey -sonar.projectName=compositekey generated by jhipster -sonar.projectVersion=1.0 - -sonar.sources=src/main/ -sonar.host.url=http://localhost:9001 - -sonar.tests=src/test/ -sonar.jacoco.reportPaths=build/jacoco/test.exec,build/jacoco/integrationTest.exec -sonar.java.codeCoveragePlugin=jacoco -sonar.junit.reportPaths=build/test-results/test,build/test-results/integrationTest -sonar.testExecutionReportPaths=build/test-results/jest/TESTS-results-sonar.xml -sonar.typescript.lcov.reportPaths=build/test-results/lcov.info - -sonar.sourceEncoding=UTF-8 -sonar.exclusions=src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, build/resources/main/static/**/*.* - -sonar.issue.ignore.multicriteria=S3437,S4502,S4684,UndocumentedApi,BoldAndItalicTagsCheck -# Rule https://sonarcloud.io/coding_rules?open=squid%3AS3437&rule_key=squid%3AS3437 is ignored, as a JPA-managed field cannot be transient -sonar.issue.ignore.multicriteria.S3437.resourceKey=src/main/java/**/* -sonar.issue.ignore.multicriteria.S3437.ruleKey=squid:S3437 -# Rule https://sonarcloud.io/coding_rules?open=squid%3AUndocumentedApi&rule_key=squid%3AUndocumentedApi is ignored, as we want to follow "clean code" guidelines and classes, methods and arguments names should be self-explanatory -sonar.issue.ignore.multicriteria.UndocumentedApi.resourceKey=src/main/java/**/* -sonar.issue.ignore.multicriteria.UndocumentedApi.ruleKey=squid:UndocumentedApi -# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4502&rule_key=squid%3AS4502 is ignored, as for JWT tokens we are not subject to CSRF attack -sonar.issue.ignore.multicriteria.S4502.resourceKey=src/main/java/**/* -sonar.issue.ignore.multicriteria.S4502.ruleKey=squid:S4502 -# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4684&rule_key=squid%3AS4684 -sonar.issue.ignore.multicriteria.S4684.resourceKey=src/main/java/**/* -sonar.issue.ignore.multicriteria.S4684.ruleKey=squid:S4684 -# Rule https://sonarcloud.io/coding_rules?open=Web%3ABoldAndItalicTagsCheck&rule_key=Web%3ABoldAndItalicTagsCheck is ignored. Even if we agree that using the "i" tag is an awful practice, this is what is recommended by http://fontawesome.io/examples/ -sonar.issue.ignore.multicriteria.BoldAndItalicTagsCheck.resourceKey=src/main/webapp/app/**/*.* -sonar.issue.ignore.multicriteria.BoldAndItalicTagsCheck.ruleKey=Web:BoldAndItalicTagsCheck diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.module.ts index 1e008e69..053e61bf 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.module.ts @@ -1,18 +1,16 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { PrimengtestSharedModule } from 'app/shared'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; -import { - PasswordStrengthBarComponent, - RegisterComponent, - ActivateComponent, - PasswordComponent, - PasswordResetInitComponent, - PasswordResetFinishComponent, - SettingsComponent, - accountState -} from './'; +import { PasswordStrengthBarComponent } from './password/password-strength-bar.component'; +import { RegisterComponent } from './register/register.component'; +import { ActivateComponent } from './activate/activate.component'; +import { PasswordComponent } from './password/password.component'; +import { PasswordResetInitComponent } from './password-reset/init/password-reset-init.component'; +import { PasswordResetFinishComponent } from './password-reset/finish/password-reset-finish.component'; +import { SettingsComponent } from './settings/settings.component'; +import { accountState } from './account.route'; @NgModule({ imports: [PrimengtestSharedModule, RouterModule.forChild(accountState)], @@ -24,7 +22,6 @@ import { PasswordResetInitComponent, PasswordResetFinishComponent, SettingsComponent - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + ] }) -export class PrimengtestAccountModule {} +export class AccountModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.route.ts index f8ab7ecc..3c15bb74 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/account.route.ts @@ -1,6 +1,11 @@ import { Routes } from '@angular/router'; -import { activateRoute, passwordRoute, passwordResetFinishRoute, passwordResetInitRoute, registerRoute, settingsRoute } from './'; +import { activateRoute } from './activate/activate.route'; +import { passwordRoute } from './password/password.route'; +import { passwordResetFinishRoute } from './password-reset/finish/password-reset-finish.route'; +import { passwordResetInitRoute } from './password-reset/init/password-reset-init.route'; +import { registerRoute } from './register/register.route'; +import { settingsRoute } from './settings/settings.route'; const ACCOUNT_ROUTES = [activateRoute, passwordRoute, passwordResetFinishRoute, passwordResetInitRoute, registerRoute, settingsRoute]; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.component.ts index ef5276b7..8020af1d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.component.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; import { ActivatedRoute } from '@angular/router'; +import { flatMap } from 'rxjs/operators'; -import { LoginModalService } from 'app/core'; +import { LoginModalService } from 'app/core/login/login-modal.service'; import { ActivateService } from './activate.service'; @Component({ @@ -10,28 +10,19 @@ import { ActivateService } from './activate.service'; templateUrl: './activate.component.html' }) export class ActivateComponent implements OnInit { - error: string; - success: string; - modalRef: NgbModalRef; + error = false; + success = false; constructor(private activateService: ActivateService, private loginModalService: LoginModalService, private route: ActivatedRoute) {} - ngOnInit() { - this.route.queryParams.subscribe(params => { - this.activateService.get(params['key']).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } - ); - }); + ngOnInit(): void { + this.route.queryParams.pipe(flatMap(params => this.activateService.get(params.key))).subscribe( + () => (this.success = true), + () => (this.error = true) + ); } - login() { - this.modalRef = this.loginModalService.open(); + login(): void { + this.loginModalService.open(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.service.ts index aefb50d2..9cac51ef 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/activate/activate.service.ts @@ -8,7 +8,7 @@ import { SERVER_API_URL } from 'app/app.constants'; export class ActivateService { constructor(private http: HttpClient) {} - get(key: string): Observable { + get(key: string): Observable<{}> { return this.http.get(SERVER_API_URL + 'api/activate', { params: new HttpParams().set('key', key) }); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/index.ts deleted file mode 100644 index aeada055..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -export * from './activate/activate.component'; -export * from './activate/activate.service'; -export * from './activate/activate.route'; -export * from './password/password.component'; -export * from './password/password-strength-bar.component'; -export * from './password/password.service'; -export * from './password/password.route'; -export * from './password-reset/finish/password-reset-finish.component'; -export * from './password-reset/finish/password-reset-finish.service'; -export * from './password-reset/finish/password-reset-finish.route'; -export * from './password-reset/init/password-reset-init.component'; -export * from './password-reset/init/password-reset-init.service'; -export * from './password-reset/init/password-reset-init.route'; -export * from './register/register.component'; -export * from './register/register.service'; -export * from './register/register.route'; -export * from './settings/settings.component'; -export * from './settings/settings.route'; -export * from './account.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html index 4849bf26..d4112f06 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.html @@ -3,11 +3,11 @@

Reset password

-
+
The password reset key is missing.
-
+

Choose a new password

@@ -24,28 +24,28 @@

Reset password

The password and its confirmation do not match!
-
-
+
+
- - New password + -
+ formControlName="newPassword" #newPassword> +
+ *ngIf="passwordForm.get('newPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required. + *ngIf="passwordForm.get('newPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.newpassword.minlength"> Your password is required to be at least 4 characters. + *ngIf="passwordForm.get('newPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.newpassword.maxlength"> Your password cannot be longer than 50 characters.
- +
@@ -53,17 +53,17 @@

Reset password

-
+
+ *ngIf="passwordForm.get('confirmPassword')?.errors?.required" jhiTranslate="global.messages.validate.confirmpassword.required"> Your password confirmation is required. + *ngIf="passwordForm.get('confirmPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.confirmpassword.minlength"> Your password confirmation is required to be at least 4 characters. + *ngIf="passwordForm.get('confirmPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.confirmpassword.maxlength"> Your password confirmation cannot be longer than 50 characters.
diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts index 1677fb11..37d0a86a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.component.ts @@ -1,10 +1,8 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Component, OnInit, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; +import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; - -import { LoginModalService } from 'app/core'; +import { LoginModalService } from 'app/core/login/login-modal.service'; import { PasswordResetFinishService } from './password-reset-finish.service'; @Component({ @@ -12,12 +10,14 @@ import { PasswordResetFinishService } from './password-reset-finish.service'; templateUrl: './password-reset-finish.component.html' }) export class PasswordResetFinishComponent implements OnInit, AfterViewInit { - doNotMatch: string; - error: string; - keyMissing: boolean; - success: string; - modalRef: NgbModalRef; - key: string; + @ViewChild('newPassword', { static: false }) + newPassword?: ElementRef; + + initialized = false; + doNotMatch = false; + error = false; + success = false; + key = ''; passwordForm = this.fb.group({ newPassword: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(50)]], @@ -28,45 +28,43 @@ export class PasswordResetFinishComponent implements OnInit, AfterViewInit { private passwordResetFinishService: PasswordResetFinishService, private loginModalService: LoginModalService, private route: ActivatedRoute, - private elementRef: ElementRef, private renderer: Renderer, private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.route.queryParams.subscribe(params => { - this.key = params['key']; + if (params['key']) { + this.key = params['key']; + } + this.initialized = true; }); - this.keyMissing = !this.key; } - ngAfterViewInit() { - if (this.elementRef.nativeElement.querySelector('#password') != null) { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#password'), 'focus', []); + ngAfterViewInit(): void { + if (this.newPassword) { + this.renderer.invokeElementMethod(this.newPassword.nativeElement, 'focus', []); } } - finishReset() { - this.doNotMatch = null; - this.error = null; - const password = this.passwordForm.get(['newPassword']).value; - const confirmPassword = this.passwordForm.get(['confirmPassword']).value; - if (password !== confirmPassword) { - this.doNotMatch = 'ERROR'; + finishReset(): void { + this.doNotMatch = false; + this.error = false; + + const newPassword = this.passwordForm.get(['newPassword'])!.value; + const confirmPassword = this.passwordForm.get(['confirmPassword'])!.value; + + if (newPassword !== confirmPassword) { + this.doNotMatch = true; } else { - this.passwordResetFinishService.save({ key: this.key, newPassword: password }).subscribe( - () => { - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } + this.passwordResetFinishService.save(this.key, newPassword).subscribe( + () => (this.success = true), + () => (this.error = true) ); } } - login() { - this.modalRef = this.loginModalService.open(); + login(): void { + this.loginModalService.open(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts index 4fad1310..24736292 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/finish/password-reset-finish.service.ts @@ -8,7 +8,7 @@ import { SERVER_API_URL } from 'app/app.constants'; export class PasswordResetFinishService { constructor(private http: HttpClient) {} - save(keyAndPassword: any): Observable { - return this.http.post(SERVER_API_URL + 'api/account/reset-password/finish', keyAndPassword); + save(key: string, newPassword: string): Observable<{}> { + return this.http.post(SERVER_API_URL + 'api/account/reset-password/finish', { key, newPassword }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html index 0aa9dd80..32287090 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.html @@ -11,7 +11,7 @@

Reset your password

Enter the email address you used to register.

-
+

Check your emails for details on how to reset your password.

@@ -19,22 +19,22 @@

Reset your password

-
+ formControlName="email" #email> +
+ *ngIf="resetRequestForm.get('email')?.errors?.required" jhiTranslate="global.messages.validate.email.required"> Your email is required. + *ngIf="resetRequestForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid. + *ngIf="resetRequestForm.get('email')?.errors?.minlength" jhiTranslate="global.messages.validate.email.minlength"> Your email is required to be at least 5 characters. + *ngIf="resetRequestForm.get('email')?.errors?.maxlength" jhiTranslate="global.messages.validate.email.maxlength"> Your email cannot be longer than 100 characters.
diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts index ab832b11..c1b9803a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.component.ts @@ -1,7 +1,8 @@ -import { Component, AfterViewInit, Renderer, ElementRef } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { Component, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; +import { HttpErrorResponse } from '@angular/common/http'; +import { FormBuilder, Validators } from '@angular/forms'; -import { EMAIL_NOT_FOUND_TYPE } from 'app/shared'; +import { EMAIL_NOT_FOUND_TYPE } from 'app/shared/constants/error.constants'; import { PasswordResetInitService } from './password-reset-init.service'; @Component({ @@ -9,38 +10,35 @@ import { PasswordResetInitService } from './password-reset-init.service'; templateUrl: './password-reset-init.component.html' }) export class PasswordResetInitComponent implements AfterViewInit { - error: string; - errorEmailNotExists: string; - success: string; + @ViewChild('email', { static: false }) + email?: ElementRef; + + error = false; + errorEmailNotExists = false; + success = false; resetRequestForm = this.fb.group({ email: ['', [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]] }); - constructor( - private passwordResetInitService: PasswordResetInitService, - private elementRef: ElementRef, - private renderer: Renderer, - private fb: FormBuilder - ) {} + constructor(private passwordResetInitService: PasswordResetInitService, private renderer: Renderer, private fb: FormBuilder) {} - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#email'), 'focus', []); + ngAfterViewInit(): void { + if (this.email) { + this.renderer.invokeElementMethod(this.email.nativeElement, 'focus', []); + } } - requestReset() { - this.error = null; - this.errorEmailNotExists = null; + requestReset(): void { + this.error = false; + this.errorEmailNotExists = false; - this.passwordResetInitService.save(this.resetRequestForm.get(['email']).value).subscribe( - () => { - this.success = 'OK'; - }, - response => { - this.success = null; + this.passwordResetInitService.save(this.resetRequestForm.get(['email'])!.value).subscribe( + () => (this.success = true), + (response: HttpErrorResponse) => { if (response.status === 400 && response.error.type === EMAIL_NOT_FOUND_TYPE) { - this.errorEmailNotExists = 'ERROR'; + this.errorEmailNotExists = true; } else { - this.error = 'ERROR'; + this.error = true; } } ); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts index 39079369..368500c3 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password-reset/init/password-reset-init.service.ts @@ -8,7 +8,7 @@ import { SERVER_API_URL } from 'app/app.constants'; export class PasswordResetInitService { constructor(private http: HttpClient) {} - save(mail: string): Observable { + save(mail: string): Observable<{}> { return this.http.post(SERVER_API_URL + 'api/account/reset-password/init', mail); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password-strength-bar.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password-strength-bar.component.ts index 0c6f6a88..fc5993d5 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password-strength-bar.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password-strength-bar.component.ts @@ -23,7 +23,7 @@ export class PasswordStrengthBarComponent { measureStrength(p: string): number { let force = 0; - const regex = /[$-/:-?{-~!"^_`\[\]]/g; // " + const regex = /[$-/:-?{-~!"^_`[\]]/g; // " const lowerLetters = /[a-z]+/.test(p); const upperLetters = /[A-Z]+/.test(p); const numbers = /[0-9]+/.test(p); @@ -48,7 +48,7 @@ export class PasswordStrengthBarComponent { return force; } - getColor(s: number): any { + getColor(s: number): { idx: number; color: string } { let idx = 0; if (s <= 10) { idx = 0; @@ -61,7 +61,7 @@ export class PasswordStrengthBarComponent { } else { idx = 4; } - return { idx: idx + 1, col: this.colors[idx] }; + return { idx: idx + 1, color: this.colors[idx] }; } @Input() @@ -75,7 +75,7 @@ export class PasswordStrengthBarComponent { const lis = element.getElementsByTagName('li'); for (let i = 0; i < lis.length; i++) { if (i < c.idx) { - this.renderer.setElementStyle(lis[i], 'backgroundColor', c.col); + this.renderer.setElementStyle(lis[i], 'backgroundColor', c.color); } else { this.renderer.setElementStyle(lis[i], 'backgroundColor', '#DDD'); } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.html index 87106454..fcc1cdcb 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.html @@ -1,7 +1,7 @@
-
-

Password for [{{account.login}}]

+
+

Password for [{{account.login}}]

Password changed! @@ -21,9 +21,9 @@

-
+
+ *ngIf="passwordForm.get('currentPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required.
@@ -33,38 +33,38 @@

-
+
+ *ngIf="passwordForm.get('newPassword')?.errors?.required" jhiTranslate="global.messages.validate.newpassword.required"> Your password is required. + *ngIf="passwordForm.get('newPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.newpassword.minlength"> Your password is required to be at least 4 characters. + *ngIf="passwordForm.get('newPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.newpassword.maxlength"> Your password cannot be longer than 50 characters.
- +
-
+
+ *ngIf="passwordForm.get('confirmPassword')?.errors?.required" jhiTranslate="global.messages.validate.confirmpassword.required"> Your confirmation password is required. + *ngIf="passwordForm.get('confirmPassword')?.errors?.minlength" jhiTranslate="global.messages.validate.confirmpassword.minlength"> Your confirmation password is required to be at least 4 characters. + *ngIf="passwordForm.get('confirmPassword')?.errors?.maxlength" jhiTranslate="global.messages.validate.confirmpassword.maxlength"> Your confirmation password cannot be longer than 50 characters.
diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.ts index 0f167e35..5ceca303 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.component.ts @@ -1,7 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, Validators } from '@angular/forms'; +import { Observable } from 'rxjs'; -import { AccountService } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; import { PasswordService } from './password.service'; @Component({ @@ -9,10 +11,10 @@ import { PasswordService } from './password.service'; templateUrl: './password.component.html' }) export class PasswordComponent implements OnInit { - doNotMatch: string; - error: string; - success: string; - account: any; + doNotMatch = false; + error = false; + success = false; + account$?: Observable; passwordForm = this.fb.group({ currentPassword: ['', [Validators.required]], newPassword: ['', [Validators.required, Validators.minLength(4), Validators.maxLength(50)]], @@ -21,29 +23,22 @@ export class PasswordComponent implements OnInit { constructor(private passwordService: PasswordService, private accountService: AccountService, private fb: FormBuilder) {} - ngOnInit() { - this.accountService.identity().then(account => { - this.account = account; - }); + ngOnInit(): void { + this.account$ = this.accountService.identity(); } - changePassword() { - const newPassword = this.passwordForm.get(['newPassword']).value; - if (newPassword !== this.passwordForm.get(['confirmPassword']).value) { - this.error = null; - this.success = null; - this.doNotMatch = 'ERROR'; + changePassword(): void { + this.error = false; + this.success = false; + this.doNotMatch = false; + + const newPassword = this.passwordForm.get(['newPassword'])!.value; + if (newPassword !== this.passwordForm.get(['confirmPassword'])!.value) { + this.doNotMatch = true; } else { - this.doNotMatch = null; - this.passwordService.save(newPassword, this.passwordForm.get(['currentPassword']).value).subscribe( - () => { - this.error = null; - this.success = 'OK'; - }, - () => { - this.success = null; - this.error = 'ERROR'; - } + this.passwordService.save(newPassword, this.passwordForm.get(['currentPassword'])!.value).subscribe( + () => (this.success = true), + () => (this.error = true) ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.route.ts index a15efcfe..a740bd72 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.route.ts @@ -1,6 +1,6 @@ import { Route } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; import { PasswordComponent } from './password.component'; export const passwordRoute: Route = { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.service.ts index 134ced52..13017f8c 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/password/password.service.ts @@ -8,7 +8,7 @@ import { SERVER_API_URL } from 'app/app.constants'; export class PasswordService { constructor(private http: HttpClient) {} - save(newPassword: string, currentPassword: string): Observable { + save(newPassword: string, currentPassword: string): Observable<{}> { return this.http.post(SERVER_API_URL + 'api/account/change-password', { currentPassword, newPassword }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.html index a2a4a282..6732f857 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.html @@ -31,20 +31,20 @@

Registration

-
- + formControlName="login" #login> +
+ Your username is required. - Your username is required to be at least 1 character. - Your username cannot be longer than 50 characters. - Your username can only contain letters and digits. @@ -54,20 +54,20 @@

Registration

-
- + Your email is required. - Your email is invalid. - Your email is required to be at least 5 characters. - Your email cannot be longer than 100 characters. @@ -77,36 +77,36 @@

Registration

-
- + Your password is required. - Your password is required to be at least 4 characters. - Your password cannot be longer than 50 characters.
- +
-
- + Your confirmation password is required. - Your confirmation password is required to be at least 4 characters. - Your confirmation password cannot be longer than 50 characters. diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.ts index ae2b5f47..4f6dd2cd 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.component.ts @@ -1,24 +1,25 @@ -import { Component, OnInit, AfterViewInit, Renderer, ElementRef } from '@angular/core'; +import { Component, AfterViewInit, Renderer, ElementRef, ViewChild } from '@angular/core'; import { HttpErrorResponse } from '@angular/common/http'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { FormBuilder, Validators } from '@angular/forms'; import { JhiLanguageService } from 'ng-jhipster'; -import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared'; -import { LoginModalService } from 'app/core'; -import { Register } from './register.service'; +import { EMAIL_ALREADY_USED_TYPE, LOGIN_ALREADY_USED_TYPE } from 'app/shared/constants/error.constants'; +import { LoginModalService } from 'app/core/login/login-modal.service'; +import { RegisterService } from './register.service'; @Component({ selector: 'jhi-register', templateUrl: './register.component.html' }) -export class RegisterComponent implements OnInit, AfterViewInit { - doNotMatch: string; - error: string; - errorEmailExists: string; - errorUserExists: string; - success: boolean; - modalRef: NgbModalRef; +export class RegisterComponent implements AfterViewInit { + @ViewChild('login', { static: false }) + login?: ElementRef; + + doNotMatch = false; + error = false; + errorEmailExists = false; + errorUserExists = false; + success = false; registerForm = this.fb.group({ login: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(50), Validators.pattern('^[_.@A-Za-z0-9-]*$')]], @@ -30,57 +31,47 @@ export class RegisterComponent implements OnInit, AfterViewInit { constructor( private languageService: JhiLanguageService, private loginModalService: LoginModalService, - private registerService: Register, - private elementRef: ElementRef, + private registerService: RegisterService, private renderer: Renderer, private fb: FormBuilder ) {} - ngOnInit() { - this.success = false; + ngAfterViewInit(): void { + if (this.login) { + this.renderer.invokeElementMethod(this.login.nativeElement, 'focus', []); + } } - ngAfterViewInit() { - this.renderer.invokeElementMethod(this.elementRef.nativeElement.querySelector('#login'), 'focus', []); - } + register(): void { + this.doNotMatch = false; + this.error = false; + this.errorEmailExists = false; + this.errorUserExists = false; - register() { - let registerAccount = {}; - const login = this.registerForm.get(['login']).value; - const email = this.registerForm.get(['email']).value; - const password = this.registerForm.get(['password']).value; - if (password !== this.registerForm.get(['confirmPassword']).value) { - this.doNotMatch = 'ERROR'; + const password = this.registerForm.get(['password'])!.value; + if (password !== this.registerForm.get(['confirmPassword'])!.value) { + this.doNotMatch = true; } else { - registerAccount = { ...registerAccount, login, email, password }; - this.doNotMatch = null; - this.error = null; - this.errorUserExists = null; - this.errorEmailExists = null; - this.languageService.getCurrent().then(langKey => { - registerAccount = { ...registerAccount, langKey }; - this.registerService.save(registerAccount).subscribe( - () => { - this.success = true; - }, - response => this.processError(response) - ); - }); + const login = this.registerForm.get(['login'])!.value; + const email = this.registerForm.get(['email'])!.value; + this.registerService.save({ login, email, password, langKey: this.languageService.getCurrentLanguage() }).subscribe( + () => (this.success = true), + response => this.processError(response) + ); } } - openLogin() { - this.modalRef = this.loginModalService.open(); + openLogin(): void { + this.loginModalService.open(); } - private processError(response: HttpErrorResponse) { - this.success = null; + private processError(response: HttpErrorResponse): void { if (response.status === 400 && response.error.type === LOGIN_ALREADY_USED_TYPE) { - this.errorUserExists = 'ERROR'; + this.errorUserExists = true; } else if (response.status === 400 && response.error.type === EMAIL_ALREADY_USED_TYPE) { - this.errorEmailExists = 'ERROR'; + this.errorEmailExists = true; } else { - this.error = 'ERROR'; + this.error = true; } } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.service.ts index 5f58ae87..9a519152 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/register/register.service.ts @@ -3,12 +3,13 @@ import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +import { IUser } from 'app/core/user/user.model'; @Injectable({ providedIn: 'root' }) -export class Register { +export class RegisterService { constructor(private http: HttpClient) {} - save(account: any): Observable { + save(account: IUser): Observable<{}> { return this.http.post(SERVER_API_URL + 'api/register', account); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.html index 009bc016..c3038326 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.html @@ -1,29 +1,29 @@
-

User settings for [{{settingsForm.get('login').value}}]

+

User settings for [{{ account.login }}]

Settings saved!
- +
-
+
+ *ngIf="settingsForm.get('firstName')?.errors?.required" jhiTranslate="settings.messages.validate.firstname.required"> Your first name is required. + *ngIf="settingsForm.get('firstName')?.errors?.minlength" jhiTranslate="settings.messages.validate.firstname.minlength"> Your first name is required to be at least 1 character. + *ngIf="settingsForm.get('firstName')?.errors?.maxlength" jhiTranslate="settings.messages.validate.firstname.maxlength"> Your first name cannot be longer than 50 characters.
@@ -32,17 +32,17 @@

Last Name -
+
+ *ngIf="settingsForm.get('lastName')?.errors?.required" jhiTranslate="settings.messages.validate.lastname.required"> Your last name is required. + *ngIf="settingsForm.get('lastName')?.errors?.minlength" jhiTranslate="settings.messages.validate.lastname.minlength"> Your last name is required to be at least 1 character. + *ngIf="settingsForm.get('lastName')?.errors?.maxlength" jhiTranslate="settings.messages.validate.lastname.maxlength"> Your last name cannot be longer than 50 characters.
@@ -51,21 +51,21 @@

Email -
+
+ *ngIf="settingsForm.get('email')?.errors?.required" jhiTranslate="global.messages.validate.email.required"> Your email is required. + *ngIf="settingsForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid. + *ngIf="settingsForm.get('email')?.errors?.minlength" jhiTranslate="global.messages.validate.email.minlength"> Your email is required to be at least 5 characters. + *ngIf="settingsForm.get('email')?.errors?.maxlength" jhiTranslate="global.messages.validate.email.maxlength"> Your email cannot be longer than 100 characters.
diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.ts index fe8ac267..b40197f6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.component.ts @@ -1,92 +1,59 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; +import { FormBuilder, Validators } from '@angular/forms'; import { JhiLanguageService } from 'ng-jhipster'; -import { AccountService, JhiLanguageHelper } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; import { Account } from 'app/core/user/account.model'; +import { LANGUAGES } from 'app/core/language/language.constants'; @Component({ selector: 'jhi-settings', templateUrl: './settings.component.html' }) export class SettingsComponent implements OnInit { - error: string; - success: string; - languages: any[]; + account!: Account; + success = false; + languages = LANGUAGES; settingsForm = this.fb.group({ firstName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], lastName: [undefined, [Validators.required, Validators.minLength(1), Validators.maxLength(50)]], email: [undefined, [Validators.required, Validators.minLength(5), Validators.maxLength(254), Validators.email]], - activated: [false], - authorities: [[]], - langKey: ['en'], - login: [], - imageUrl: [] + langKey: [undefined] }); - constructor( - private accountService: AccountService, - private fb: FormBuilder, - private languageService: JhiLanguageService, - private languageHelper: JhiLanguageHelper - ) {} + constructor(private accountService: AccountService, private fb: FormBuilder, private languageService: JhiLanguageService) {} - ngOnInit() { - this.accountService.identity().then(account => { - this.updateForm(account); - }); - this.languageHelper.getAll().then(languages => { - this.languages = languages; - }); - } - - save() { - const settingsAccount = this.accountFromForm(); - this.accountService.save(settingsAccount).subscribe( - () => { - this.error = null; - this.success = 'OK'; - this.accountService.identity(true).then(account => { - this.updateForm(account); - }); - this.languageService.getCurrent().then(current => { - if (settingsAccount.langKey !== current) { - this.languageService.changeLanguage(settingsAccount.langKey); - } + ngOnInit(): void { + this.accountService.identity().subscribe(account => { + if (account) { + this.settingsForm.patchValue({ + firstName: account.firstName, + lastName: account.lastName, + email: account.email, + langKey: account.langKey }); - }, - () => { - this.success = null; - this.error = 'ERROR'; + + this.account = account; } - ); + }); } - private accountFromForm(): any { - const account = {}; - return { - ...account, - firstName: this.settingsForm.get('firstName').value, - lastName: this.settingsForm.get('lastName').value, - email: this.settingsForm.get('email').value, - activated: this.settingsForm.get('activated').value, - authorities: this.settingsForm.get('authorities').value, - langKey: this.settingsForm.get('langKey').value, - login: this.settingsForm.get('login').value, - imageUrl: this.settingsForm.get('imageUrl').value - }; - } + save(): void { + this.success = false; + + this.account.firstName = this.settingsForm.get('firstName')!.value; + this.account.lastName = this.settingsForm.get('lastName')!.value; + this.account.email = this.settingsForm.get('email')!.value; + this.account.langKey = this.settingsForm.get('langKey')!.value; - updateForm(account: any): void { - this.settingsForm.patchValue({ - firstName: account.firstName, - lastName: account.lastName, - email: account.email, - activated: account.activated, - authorities: account.authorities, - langKey: account.langKey, - login: account.login, - imageUrl: account.imageUrl + this.accountService.save(this.account).subscribe(() => { + this.success = true; + + this.accountService.authenticate(this.account); + + if (this.account.langKey !== this.languageService.getCurrentLanguage()) { + this.languageService.changeLanguage(this.account.langKey); + } }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.route.ts index 21f22485..3b8d9214 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/account/settings/settings.route.ts @@ -1,6 +1,6 @@ import { Route } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; import { SettingsComponent } from './settings.component'; export const settingsRoute: Route = { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin-routing.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin-routing.module.ts new file mode 100644 index 00000000..f10ae684 --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin-routing.module.ts @@ -0,0 +1,44 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ + +@NgModule({ + imports: [ + /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ + RouterModule.forChild([ + { + path: 'user-management', + loadChildren: () => import('./user-management/user-management.module').then(m => m.UserManagementModule), + data: { + pageTitle: 'userManagement.home.title' + } + }, + { + path: 'audits', + loadChildren: () => import('./audits/audits.module').then(m => m.AuditsModule) + }, + { + path: 'configuration', + loadChildren: () => import('./configuration/configuration.module').then(m => m.ConfigurationModule) + }, + { + path: 'docs', + loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule) + }, + { + path: 'health', + loadChildren: () => import('./health/health.module').then(m => m.HealthModule) + }, + { + path: 'logs', + loadChildren: () => import('./logs/logs.module').then(m => m.LogsModule) + }, + { + path: 'metrics', + loadChildren: () => import('./metrics/metrics.module').then(m => m.MetricsModule) + } + /* jhipster-needle-add-admin-route - JHipster will add admin routes here */ + ]) + ] +}) +export class AdminRoutingModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.module.ts deleted file mode 100644 index be05d5ee..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.module.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; -import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -/* jhipster-needle-add-admin-module-import - JHipster will add admin modules imports here */ - -import { - adminState, - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - LogsComponent, - JhiMetricsMonitoringComponent, - JhiHealthModalComponent, - JhiHealthCheckComponent, - JhiConfigurationComponent, - JhiDocsComponent -} from './'; -import { ButtonModule } from 'primeng/button'; - -@NgModule({ - imports: [ - PrimengtestSharedModule, - /* jhipster-needle-add-admin-module - JHipster will add admin modules here */ - RouterModule.forChild(adminState), - ButtonModule - ], - declarations: [ - AuditsComponent, - UserMgmtComponent, - UserMgmtDetailComponent, - UserMgmtUpdateComponent, - LogsComponent, - JhiConfigurationComponent, - JhiHealthCheckComponent, - JhiHealthModalComponent, - JhiDocsComponent, - JhiMetricsMonitoringComponent - ], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - entryComponents: [JhiHealthModalComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] -}) -export class PrimengtestAdminModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.route.ts deleted file mode 100644 index 54768bed..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/admin.route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Routes } from '@angular/router'; - -import { auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, metricsRoute, userMgmtRoute } from './'; - -import { UserRouteAccessService } from 'app/core'; - -const ADMIN_ROUTES = [auditsRoute, configurationRoute, docsRoute, healthRoute, logsRoute, ...userMgmtRoute, metricsRoute]; - -export const adminState: Routes = [ - { - path: '', - data: { - authorities: ['ROLE_ADMIN'] - }, - canActivate: [UserRouteAccessService], - children: ADMIN_ROUTES - } -]; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.html index c1014b26..9e34283a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.html @@ -1,4 +1,4 @@ -
+

Audits

@@ -21,14 +21,21 @@

Filter by date

No audit found
+
-

UserIP AddressCurrent pageTimeUserIP AddressCurrent pageTime
pSortableColumn="langKey"<% } %>> Lang Key<% if (databaseType !== 'cassandra') { %><% } %>ProfilesProfilesCreated Date Last Modified By Last Modified Date
{{user.langKey}} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.ts.ejs index c5904a17..51d3c8d0 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.component.ts.ejs @@ -17,13 +17,14 @@ limitations under the License. -%> import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; - +import { HttpResponse, HttpHeaders, HttpErrorResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; <%_ if (prodDatabaseType !== 'cassandra') { _%> +import { switchMap, tap, filter } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { JhiEventManager } from 'ng-jhipster' import { ConfirmationService, LazyLoadEvent, MessageService } from 'primeng/api'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, @@ -34,30 +35,30 @@ import { import { JhiEventManager } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; <%_ } _%> -import { UserService, AccountService, IUser } from 'app/core'; -import { Subscription } from 'rxjs'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; +import { UserService } from 'app/core/user/user.service'; +import { IUser } from 'app/core/user/user.model'; import { Table } from 'primeng/table'; import { TranslateService } from '@ngx-translate/core'; -import { switchMap, tap, filter } from 'rxjs/operators'; @Component({ selector: '<%= jhiPrefixDashed %>-user-mgmt', templateUrl: './user-management.component.html' }) -export class UserMgmtComponent implements OnInit, OnDestroy { - - currentAccount: any; - users: IUser[]; - eventSubscriber: Subscription; +export class UserManagementComponent implements OnInit, OnDestroy { + currentAccount: Account | null = null; + users: IUser[] | null = null; + eventSubscriber?: Subscription; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = {}; @ViewChild('userTable', { static: true }) - userTable: Table; + userTable!: Table; constructor( protected userService: UserService, @@ -73,8 +74,8 @@ export class UserMgmtComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { - this.accountService.identity().then(account => { + ngOnInit(): void { + this.accountService.identity().subscribe((account: Account | null) => { this.currentAccount = account; }); this.registerChangeInUsers(); @@ -91,7 +92,7 @@ export class UserMgmtComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateUsers(res.body, res.headers); + this.paginateUsers(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -101,21 +102,23 @@ export class UserMgmtComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/admin/user-management'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.userTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(login: string) { + delete(login: string): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('userManagement.delete.question', { login }), @@ -130,25 +133,25 @@ export class UserMgmtComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: IUser) { - return item.login; + trackId(index: number, item: IUser): string { + return item.login!; } - registerChangeInUsers() { + registerChangeInUsers(): void { this.eventSubscriber = this.eventManager.subscribe('userListModification', () => {}); } - setActive(user, isActivated) { + setActive(user: IUser, isActivated: boolean): void { user.activated = isActivated; this.userService.update(user).subscribe(); } - protected paginateUsers(data: IUser[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateUsers(data: IUser[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.users = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.module.ts.ejs new file mode 100644 index 00000000..1b57ea9b --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.module.ts.ejs @@ -0,0 +1,39 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { <%= angularXAppName %>SharedModule } from 'app/shared/shared.module'; +import { UserManagementComponent } from './user-management.component'; +import { UserManagementDetailComponent } from './user-management-detail.component'; +import { UserManagementUpdateComponent } from './user-management-update.component'; +import { userManagementRoute } from './user-management.route'; + +@NgModule({ + imports: [ + <%= angularXAppName %>SharedModule, + RouterModule.forChild(userManagementRoute) + ], + declarations: [ + UserManagementComponent, + UserManagementDetailComponent, + UserManagementUpdateComponent + ] +}) +export class UserManagementModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs index b9f63812..bf20b218 100644 --- a/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/admin/user-management/user-management.route.ts.ejs @@ -17,73 +17,56 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, CanActivate } from '@angular/router'; -import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, Routes } from '@angular/router'; import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { AccountService, User, UserService } from 'app/core'; -import { UserMgmtComponent } from './user-management.component'; -import { UserMgmtDetailComponent } from './user-management-detail.component'; -import { UserMgmtUpdateComponent } from './user-management-update.component'; +import { User, IUser } from 'app/core/user/user.model'; +import { UserService } from 'app/core/user/user.service'; +import { UserManagementComponent } from './user-management.component'; +import { UserManagementDetailComponent } from './user-management-detail.component'; +import { UserManagementUpdateComponent } from './user-management-update.component'; @Injectable({providedIn: 'root'}) -export class UserResolve implements CanActivate { - - constructor(private accountService: AccountService) { } - - canActivate() { - return this.accountService.identity().then((account) => this.accountService.hasAnyAuthority(['ROLE_ADMIN'])); - } -} - -@Injectable({providedIn: 'root'}) -export class UserMgmtResolve implements Resolve { +export class UserManagementResolve implements Resolve { constructor(private service: UserService) { } - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.params['login'] ? route.params['login'] : null; if (id) { - return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((response: HttpResponse) => response.body) - ); + return this.service.find(id); } return of(null); } } -export const userMgmtRoute: Routes = [ +export const userManagementRoute: Routes = [ { - path: 'user-management', - component: UserMgmtComponent, + path: '', + component: UserManagementComponent, data: { pageTitle: 'userManagement.home.title' } }, { - path: 'user-management/:login/view', - component: UserMgmtDetailComponent, + path: ':login/view', + component: UserManagementDetailComponent, resolve: { - user: UserMgmtResolve - }, - data: { - pageTitle: 'userManagement.home.title' + user: UserManagementResolve } }, { - path: 'user-management/new', - component: UserMgmtUpdateComponent, + path: 'new', + component: UserManagementUpdateComponent, resolve: { - user: UserMgmtResolve + user: UserManagementResolve } }, { - path: 'user-management/:login/edit', - component: UserMgmtUpdateComponent, + path: ':login/edit', + component: UserManagementUpdateComponent, resolve: { - user: UserMgmtResolve + user: UserManagementResolve } } ]; diff --git a/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs index 2c51e042..fe275b66 100644 --- a/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs @@ -18,9 +18,12 @@ -%> import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { errorRoute, navbarRoute } from './layouts'; +import { errorRoute } from './layouts/error/error.route'; +import { navbarRoute } from './layouts/navbar/navbar.route'; import { DEBUG_INFO_ENABLED } from 'app/app.constants'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; + const LAYOUT_ROUTES = [ navbarRoute, ...errorRoute @@ -32,8 +35,18 @@ const LAYOUT_ROUTES = [ [ { path: 'admin', - loadChildren: './admin/admin.module#<%=angularXAppName%>AdminModule' + data: { + authorities: ['ROLE_ADMIN'] + }, + canActivate: [UserRouteAccessService], + loadChildren: () => import('./admin/admin-routing.module').then(m => m.AdminRoutingModule) + }, + <%_ if (!skipUserManagement) { _%> + { + path: 'account', + loadChildren: () => import('./account/account.module').then(m => m.AccountModule) }, + <%_ } _%> ...LAYOUT_ROUTES ], { enableTracing: DEBUG_INFO_ENABLED } diff --git a/generators/client/templates/angular/src/main/webapp/app/app.constants.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/app.constants.ts.ejs index 72da45ee..43b30ed0 100644 --- a/generators/client/templates/angular/src/main/webapp/app/app.constants.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/app.constants.ts.ejs @@ -21,6 +21,6 @@ // If you change the values in the webpack config files, you need to re run webpack to update the application export const VERSION = process.env.VERSION; -export const DEBUG_INFO_ENABLED: boolean = !!process.env.DEBUG_INFO_ENABLED; +export const DEBUG_INFO_ENABLED = Boolean(process.env.DEBUG_INFO_ENABLED); export const SERVER_API_URL = process.env.SERVER_API_URL; export const BUILD_TIMESTAMP = process.env.BUILD_TIMESTAMP; diff --git a/generators/client/templates/angular/src/main/webapp/app/app.main.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/app.main.ts.ejs index cda5ff87..3bd89355 100644 --- a/generators/client/templates/angular/src/main/webapp/app/app.main.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/app.main.ts.ejs @@ -27,5 +27,6 @@ if (module['hot']) { } platformBrowserDynamic().bootstrapModule(<%=angularXAppName%>AppModule, { preserveWhitespaces: true }) - .then((success) => console.log(`Application started`)) + // eslint-disable-next-line no-console + .then(() => console.log('Application started')) .catch((err) => console.error(err)); diff --git a/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs index 63b91b79..6588c6a0 100644 --- a/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/app.module.ts.ejs @@ -16,69 +16,39 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import './vendor.ts'; - import { NgModule } from '@angular/core'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { NgxWebstorageModule } from 'ngx-webstorage'; -import { NgJhipsterModule } from 'ng-jhipster'; -<%_ if (authenticationType === 'jwt') { _%> -import { AuthInterceptor } from './blocks/interceptor/auth.interceptor'; -<%_ } _%> -import { AuthExpiredInterceptor } from './blocks/interceptor/auth-expired.interceptor'; -import { ErrorHandlerInterceptor } from './blocks/interceptor/errorhandler.interceptor'; -import { NotificationInterceptor } from './blocks/interceptor/notification.interceptor'; -import { <%=angularXAppName%>SharedModule, PrimeNGCommonModule } from 'app/shared'; -import { <%=angularXAppName%>CoreModule } from 'app/core'; +import './vendor'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; +import { <%=angularXAppName%>CoreModule } from 'app/core/core.module'; import { <%=angularXAppName%>AppRoutingModule} from './app-routing.module'; import { <%=angularXAppName%>HomeModule } from './home/home.module'; -<%_ if (!skipUserManagement) { _%> -import { <%=angularXAppName%>AccountModule } from './account/account.module'; -<%_ } _%> import { <%=angularXAppName%>EntityModule } from './entities/entity.module'; -import { ConfirmationService, MessageService } from 'primeng/api'; // jhipster-needle-angular-add-module-import JHipster will add new module here -import { - <%=jhiPrefixCapitalized%>MainComponent, - NavbarComponent, - FooterComponent, - PageRibbonComponent, - <%_ if (enableTranslation) { _%> - ActiveMenuDirective, - <%_ } _%> - ErrorComponent -} from './layouts'; +import { MainComponent } from './layouts/main/main.component'; +import { NavbarComponent } from './layouts/navbar/navbar.component'; +import { FooterComponent } from './layouts/footer/footer.component'; +import { PageRibbonComponent } from './layouts/profiles/page-ribbon.component'; +<%_ if (enableTranslation) { _%> +import { ActiveMenuDirective } from './layouts/navbar/active-menu.directive'; +<%_ } _%> +import { ErrorComponent } from './layouts/error/error.component'; @NgModule({ imports: [ BrowserAnimationsModule, BrowserModule, - NgxWebstorageModule.forRoot({ prefix: '<%=jhiPrefixDashed %>', separator: '-'}), - NgJhipsterModule.forRoot({ - // set below to true to make alerts look like toast - alertAsToast: false, - alertTimeout: 5000, - <%_ if (enableTranslation) { _%> - i18nEnabled: true, - defaultI18nLang: '<%= nativeLanguage %>' - <%_ } _%> - }), - <%=angularXAppName%>SharedModule.forRoot(), - PrimeNGCommonModule, + <%=angularXAppName%>SharedModule, <%=angularXAppName%>CoreModule, <%=angularXAppName%>HomeModule, - <%_ if (!skipUserManagement) { _%> - <%=angularXAppName%>AccountModule, - <%_ } _%> // jhipster-needle-angular-add-module JHipster will add new module here <%=angularXAppName%>EntityModule, <%=angularXAppName%>AppRoutingModule ], declarations: [ - <%=jhiPrefixCapitalized%>MainComponent, + MainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, @@ -87,34 +57,6 @@ import { <%_ } _%> FooterComponent ], - providers: [ - <%_ if (authenticationType === 'jwt') { _%> - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true - }, - <%_ } _%> - { - provide: HTTP_INTERCEPTORS, - useClass: AuthExpiredInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: ErrorHandlerInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: NotificationInterceptor, - multi: true - }, - ConfirmationService, - MessageService, - ], - bootstrap: [ <%=jhiPrefixCapitalized%>MainComponent ] + bootstrap: [ MainComponent ] }) -export class <%=angularXAppName%>AppModule { - constructor() {} -} +export class <%=angularXAppName%>AppModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/blocks/config/prod.config.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/blocks/config/prod.config.ts.ejs index 8b557754..7fd56e03 100644 --- a/generators/client/templates/angular/src/main/webapp/app/blocks/config/prod.config.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/blocks/config/prod.config.ts.ejs @@ -19,7 +19,7 @@ import { enableProdMode } from '@angular/core'; import { DEBUG_INFO_ENABLED } from 'app/app.constants'; -export function ProdConfig() { +export function ProdConfig(): void { // disable debug data on prod profile to improve performance if (!DEBUG_INFO_ENABLED) { enableProdMode(); diff --git a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts.ejs index f01de35a..f96782cc 100644 --- a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts.ejs @@ -20,87 +20,43 @@ import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; -<%_ if (['oauth2', 'jwt', 'uaa'].includes(authenticationType)) { _%> - <%_ if (authenticationType === 'uaa') { _%> import { Router } from '@angular/router'; -import { LoginModalService } from 'app/core/login/login-modal.service'; - <%_ } _%> import { LoginService } from 'app/core/login/login.service'; -<%_ } _%> -<%_ if (['session', 'oauth2'].includes(authenticationType)) { _%> - <%_ if (authenticationType === 'session') { _%> -import { AuthServerProvider } from 'app/core/auth/auth-session.service'; +<%_ if (['session', 'jwt', 'uaa'].includes(authenticationType)) { _%> import { LoginModalService } from 'app/core/login/login-modal.service'; - <%_ } _%> -import { StateStorageService } from 'app/core/auth/state-storage.service'; <%_ } _%> +import { StateStorageService } from 'app/core/auth/state-storage.service'; @Injectable() export class AuthExpiredInterceptor implements HttpInterceptor { - constructor( - <%_ if (authenticationType === 'session') { _%> + private loginService: LoginService, + <%_ if (['session', 'jwt', 'uaa'].includes(authenticationType)) { _%> private loginModalService: LoginModalService, - private authServerProvider: AuthServerProvider, - private stateStorageService: StateStorageService <%_ } _%> - <%_ if (['oauth2', 'jwt', 'uaa'].includes(authenticationType)) { _%> - <%_ if (authenticationType === 'uaa') { _%> - private loginModalService: LoginModalService, - private router: Router, - <%_ } _%> - <%_ if (authenticationType === 'oauth2') { _%> private stateStorageService: StateStorageService, - <%_ } _%> - private loginService: LoginService - <%_ } _%> + private router: Router ) {} -<%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe(tap((event: HttpEvent) => {}, (err: any) => { - if (err instanceof HttpErrorResponse) { - if (err.status === 401) { -<%_ if (authenticationType === 'jwt') { _%> - this.loginService.logout(); -<% } if (authenticationType === 'uaa') { %> - if (this.loginService.isAuthenticated()) { - this.loginService.logoutDirectly(); - this.loginModalService.open(); - } else { - this.loginService.logout(); - this.router.navigate(['/']); - } -<%_ } _%> - } - } - })); - } -<%_ } else if (authenticationType === 'session' || authenticationType === 'oauth2') { _%> - intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe(tap((event: HttpEvent) => {}, (err: any) => { - if (err instanceof HttpErrorResponse) { - if (err.status === 401 && err.url && !err.url.includes('api/account')) { - const destination = this.stateStorageService.getDestinationState(); - if (destination !== null) { - const to = destination.destination; - const toParams = destination.params; - if (to.name === 'accessdenied') { - this.stateStorageService.storePreviousState(to.name, toParams); - } - } else { - this.stateStorageService.storeUrl('/'); - } -<% if (authenticationType === 'session') { %> - this.authServerProvider.logout(); - this.loginModalService.open(); -<% } else { %> - this.loginService.login(); -<% } %> + return next.handle(request).pipe(tap(null, (err: HttpErrorResponse) => { + if (err.status === 401 && err.url && !err.url.includes('api/account')) { + <%_ if (authenticationType === 'session' || authenticationType === 'uaa') { _%> + if (err.url.includes(this.loginService.logoutUrl())) { + this.loginService.logoutInClient(); + return; } + <%_ } _%> + this.stateStorageService.storeUrl(this.router.routerState.snapshot.url); +<%_ if (['session', 'jwt', 'uaa'].includes(authenticationType)) { _%> + this.loginService.logout(); + this.router.navigate(['']); + this.loginModalService.open(); +<%_ } else { _%> + this.loginService.login(); +<%_ } _%> } })); } -<%_ } _%> } diff --git a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts.ejs index 83f18950..9adf9a81 100644 --- a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts.ejs @@ -33,12 +33,12 @@ export class AuthInterceptor implements HttpInterceptor { } intercept(request: HttpRequest, next: HttpHandler): Observable> { - if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { + if (!request || !request.url || (request.url.startsWith('http') && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { return next.handle(request); } const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken'); - if (!!token) { + if (token) { request = request.clone({ setHeaders: { Authorization: 'Bearer ' + token diff --git a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts.ejs index f1ec78a1..30d80183 100644 --- a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts.ejs @@ -17,23 +17,19 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { <%=jhiPrefixCapitalized%>AlertErrorService } from 'app/shared/alert/alert-error.service'; +import { AlertErrorService } from 'app/shared/alert/alert-error.service'; import { HttpInterceptor, HttpRequest, HttpErrorResponse, HttpHandler, HttpEvent } from '@angular/common/http'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @Injectable() export class ErrorHandlerInterceptor implements HttpInterceptor { - - constructor(private alertErrorService: <%=jhiPrefixCapitalized%>AlertErrorService) { - } + constructor(private alertErrorService: AlertErrorService) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { - return next.handle(request).pipe(tap((event: HttpEvent) => {}, (err: any) => { - if (err instanceof HttpErrorResponse) { - if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('api/account'))))) { - this.alertErrorService.displayError(err); - } + return next.handle(request).pipe(tap(null, (err: HttpErrorResponse) => { + if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('api/account'))))) { + this.alertErrorService.displayError(err); } })); } diff --git a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts.ejs index fa915529..96626165 100644 --- a/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts.ejs @@ -34,15 +34,15 @@ export class NotificationInterceptor implements HttpInterceptor { return next.handle(request).pipe(tap((event: HttpEvent) => { if (event instanceof HttpResponse) { const arr = event.headers.keys(); - let alert = null; + let alert: string | null = null; <%_ if (enableTranslation) { _%> - let alertParams = null; + let alertParams: string | null = null; <%_ } _%> arr.forEach((entry) => { if (entry.toLowerCase().endsWith('app-alert')) { alert = event.headers.get(entry); }<% if (enableTranslation) { %> else if (entry.toLowerCase().endsWith('app-params')) { - alertParams = event.headers.get(entry); + alertParams = decodeURIComponent(event.headers.get(entry)!.replace(/\+/g, ' ')); }<% } %> }); if (alert) { @@ -55,6 +55,6 @@ export class NotificationInterceptor implements HttpInterceptor { } } } - }, (err: any) => {})); + })); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.ts.ejs index 4a3de8a2..7ae4f443 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/account.service.ts.ejs @@ -17,134 +17,120 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { HttpClient } from '@angular/common/http'; <%_ if (enableTranslation) { _%> import { JhiLanguageService } from 'ng-jhipster'; import { SessionStorageService } from 'ngx-webstorage'; <%_ } _%> -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable, Subject } from 'rxjs'; +import { Observable, ReplaySubject, of } from 'rxjs'; +import { shareReplay, tap, catchError } from 'rxjs/operators'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; import { SERVER_API_URL } from 'app/app.constants'; import { Account } from 'app/core/user/account.model'; <%_ if (websocket === 'spring-websocket') { _%> -import { <%=jhiPrefixCapitalized%>TrackerService } from '../tracker/tracker.service'; +import { TrackerService } from '../tracker/tracker.service'; <%_ } _%> @Injectable({providedIn: 'root'}) export class AccountService { - private userIdentity: any; - private authenticated = false; - private authenticationState = new Subject(); - + private userIdentity: Account | null = null; + private authenticationState = new ReplaySubject(1); + private accountCache$?: Observable; constructor( <%_ if (enableTranslation) { _%> private languageService: JhiLanguageService, private sessionStorage: SessionStorageService, <%_ } _%> - private http: HttpClient<% if (websocket === 'spring-websocket') { %>, - private trackerService: <%=jhiPrefixCapitalized%>TrackerService<% } %>) { } - - fetch(): Observable> { - return this.http.get(SERVER_API_URL + '<%- apiUaaPath %>api/account', {observe : 'response'}); - } + private http: HttpClient, + <%_ if (websocket === 'spring-websocket') { _%> + private trackerService: TrackerService, + <%_ } _%> + private stateStorageService: StateStorageService, + private router: Router + ) {} + <%_ if (!skipUserManagement) { _%> - save(account: any): Observable> { - return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account', account, {observe: 'response'}); + save(account: Account): Observable<{}> { + return this.http.post(SERVER_API_URL + '<%- apiUaaPath %>api/account', account); } + <%_ } _%> - authenticate(identity) { + authenticate(identity: Account | null): void { this.userIdentity = identity; - this.authenticated = identity !== null; this.authenticationState.next(this.userIdentity); + <%_ if (websocket === 'spring-websocket') { _%> + if (identity) { + this.trackerService.connect(); + } else { + this.trackerService.disconnect(); + } + <%_ } _%> } - hasAnyAuthority(authorities: string[]): boolean { - if (!this.authenticated || !this.userIdentity || !this.userIdentity.authorities) { + hasAnyAuthority(authorities: string[] | string): boolean { + if (!this.userIdentity || !this.userIdentity.authorities) { return false; } - - for (let i = 0; i < authorities.length; i++) { - if (this.userIdentity.authorities.includes(authorities[i])) { - return true; - } + if (!Array.isArray(authorities)) { + authorities = [authorities]; } - - return false; + return this.userIdentity.authorities.some((authority: string) => authorities.includes(authority)); } - hasAuthority(authority: string): Promise { - if (!this.authenticated) { - return Promise.resolve(false); - } - - return this.identity().then((id) => { - return Promise.resolve(id.authorities && id.authorities.includes(authority)); - }, () => { - return Promise.resolve(false); - }); - } - - identity(force?: boolean): Promise { - if (force) { - this.userIdentity = undefined; - } - - // check and see if we have retrieved the userIdentity data from the server. - // if we have, reuse it by immediately resolving - if (this.userIdentity) { - return Promise.resolve(this.userIdentity); - } - - // retrieve the userIdentity data from the server, update the identity object, and then resolve. - return this.fetch().toPromise().then((response) => { - const account: Account = response.body; - if (account) { - this.userIdentity = account; - this.authenticated = true; - <%_ if (websocket === 'spring-websocket') { _%> - this.trackerService.connect(); - <%_ } _%> + identity(force?: boolean): Observable { + if (!this.accountCache$ || force || !this.isAuthenticated()) { + this.accountCache$ = this.fetch().pipe( + catchError(() => { + return of(null); + }), + tap((account: Account | null) => { + this.authenticate(account); <%_ if (enableTranslation) { _%> + // After retrieve the account info, the language will be changed to // the user's preferred language configured in the account setting - if (this.userIdentity.langKey) { - const langKey = this.sessionStorage.retrieve('locale') || this.userIdentity.langKey; - this.languageService.changeLanguage(langKey); + if (account && account.langKey) { + const langKey = this.sessionStorage.retrieve('locale') || account.langKey; + this.languageService.changeLanguage(langKey); } <%_ } _%> - } else { - this.userIdentity = null; - this.authenticated = false; - } - this.authenticationState.next(this.userIdentity); - return this.userIdentity; - }).catch((err) => { - <%_ if (websocket === 'spring-websocket') { _%> - if (this.trackerService.stompClient && this.trackerService.stompClient.connected) { - this.trackerService.disconnect(); - } - <%_ } _%> - this.userIdentity = null; - this.authenticated = false; - this.authenticationState.next(this.userIdentity); - return null; - }); - } - isAuthenticated(): boolean { - return this.authenticated; + if (account) { + this.navigateToStoredUrl(); + } + }), + shareReplay() + ); + } + return this.accountCache$; } - - isIdentityResolved(): boolean { - return this.userIdentity !== undefined; + + isAuthenticated(): boolean { + return this.userIdentity !== null; } - getAuthenticationState(): Observable { + getAuthenticationState(): Observable { return this.authenticationState.asObservable(); } getImageUrl(): string { - return this.isIdentityResolved() ? this.userIdentity.imageUrl : null; + return this.userIdentity ? this.userIdentity.imageUrl : ''; + } + + private fetch(): Observable { + return this.http.get(SERVER_API_URL + '<%- apiUaaPath %>api/account'); + } + + private navigateToStoredUrl(): void { + // previousState can be set in the authExpiredInterceptor and in the userRouteAccessService + // if login is successful, go to stored previousState and clear previousState + const previousUrl = this.stateStorageService.getUrl(); + if (previousUrl) { + this.stateStorageService.clearUrl(); + this.router.navigateByUrl(previousUrl); + } } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-jwt.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-jwt.service.ts.ejs index 5d7df756..5abd7e1a 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-jwt.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-jwt.service.ts.ejs @@ -19,13 +19,23 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; -import {map} from 'rxjs/operators'; <%_ if (authenticationType !== 'uaa') { _%> +import {map} from 'rxjs/operators'; import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; <%_ } _%> import { SERVER_API_URL } from 'app/app.constants'; +import { Login } from 'app/core/login/login.model'; + +<%_ if (authenticationType !== 'uaa') { _%> +type JwtToken = { + id_token: string; +}; +<%_ } else { _%> +export const LOGOUT_URL = SERVER_API_URL + 'auth/logout'; + +<%_ } _%> @Injectable({providedIn: 'root'}) export class AuthServerProvider { constructor( @@ -35,69 +45,40 @@ export class AuthServerProvider { <%_ } _%> ) {} - getToken() { <%_ if (authenticationType === 'uaa') { _%> - return null; -<% } else { %> - return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken'); -<%_ } _%> + login(credentials: Login): Observable { + return this.http.post(SERVER_API_URL + 'auth/login', credentials); } - login(credentials): Observable { -<%_ if (authenticationType === 'uaa') { _%> - const data = { - username: credentials.username, - password: credentials.password, - rememberMe: credentials.rememberMe - }; - return this.http.post(SERVER_API_URL + 'auth/login', data, {}); + logout(): Observable<{}> { + return this.http.post(LOGOUT_URL, null); + } <% } else { %> - const data = { - username: credentials.username, - password: credentials.password, - rememberMe: credentials.rememberMe - }; - return this.http.post(SERVER_API_URL + 'api/authenticate', data, {observe : 'response'}).pipe(map(authenticateSuccess.bind(this))); + getToken(): string { + return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken') || ''; + } - function authenticateSuccess(resp) { - const bearerToken = resp.headers.get('Authorization'); - if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') { - const jwt = bearerToken.slice(7, bearerToken.length); - this.storeAuthenticationToken(jwt, credentials.rememberMe); - return jwt; - } - } -<%_ } _%> + login(credentials: Login): Observable { + return this.http + .post(SERVER_API_URL + 'api/authenticate', credentials) + .pipe(map(response => this.authenticateSuccess(response, credentials.rememberMe))); } - loginWithToken(jwt, rememberMe) { - if (jwt) { - this.storeAuthenticationToken(jwt, rememberMe); - return Promise.resolve(jwt); - } else { - return Promise.reject('auth-jwt-service Promise reject'); // Put appropriate error message here - } + logout(): Observable { + return new Observable((observer) => { + this.$localStorage.clear('authenticationToken'); + this.$sessionStorage.clear('authenticationToken'); + observer.complete(); + }); } - storeAuthenticationToken(jwt, rememberMe) { -<%_ if (authenticationType !== 'uaa') { _%> + private authenticateSuccess(response: JwtToken, rememberMe: boolean): void { + const jwt = response.id_token; if (rememberMe) { this.$localStorage.store('authenticationToken', jwt); } else { this.$sessionStorage.store('authenticationToken', jwt); } -<%_ } _%> } - - logout(): Observable { -<%_ if (authenticationType === 'uaa') { _%> - return this.http.post(SERVER_API_URL + 'auth/logout', null); -<% } else { %> - return new Observable((observer) => { - this.$localStorage.clear('authenticationToken'); - this.$sessionStorage.clear('authenticationToken'); - observer.complete(); - }); <%_ } _%> - } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-session.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-session.service.ts.ejs index ae4b010a..be760eb9 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-session.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/auth-session.service.ts.ejs @@ -17,11 +17,20 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse<% if (authenticationType !== 'oauth2') { %>, HttpHeaders<% } %> } from '@angular/common/http'; +import { HttpClient<% if (authenticationType !== 'oauth2') { %>, HttpHeaders<% } %> } from '@angular/common/http'; import { Observable } from 'rxjs'; +<%_ if (authenticationType !== 'oauth2') { _%> import { map } from 'rxjs/operators'; +<%_ } _%> import { SERVER_API_URL } from 'app/app.constants'; +<%_ if (authenticationType === 'oauth2') { _%> +import { Logout } from 'app/core/login/logout.model'; +<%_ } else { _%> +import { Login } from 'app/core/login/login.model'; + +export const LOGOUT_URL = SERVER_API_URL + 'api/logout'; +<%_ } _%> @Injectable({providedIn: 'root'}) export class AuthServerProvider { @@ -31,28 +40,31 @@ export class AuthServerProvider { ) {} <%_ if (authenticationType !== 'oauth2') { _%> - login(credentials): Observable { + login(credentials: Login): Observable<{}> { const data = `username=${encodeURIComponent(credentials.username)}` + `&password=${encodeURIComponent(credentials.password)}` + `&remember-me=${credentials.rememberMe}` + - `&submit=Login`; + '&submit=Login'; + const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded'); return this.http.post(SERVER_API_URL + 'api/authentication', data, { headers }); } -<%_ } _%> - logout(): Observable { + logout(): Observable { // logout from the server - return this.http.post(SERVER_API_URL + 'api/logout', {}, { observe: 'response' }).pipe( - map((response: HttpResponse) => { - <%_ if (applicationType !== 'gateway') { _%> - // to get a new csrf token call the api - this.http.get(SERVER_API_URL + 'api/account').subscribe(() => {}, () => {}); - <%_ } _%> - return response; + return this.http.post(LOGOUT_URL, {}).pipe( + map(() => { + // to get a new csrf token call the api + this.http.get(SERVER_API_URL + 'api/account').subscribe(); }) ); } +<%_ } else { _%> + + logout(): Observable { + return this.http.post(SERVER_API_URL + 'api/logout', {}); + } +<%_ } _%> } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/csrf.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/csrf.service.ts.ejs index 96ca424a..78b613ec 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/csrf.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/csrf.service.ts.ejs @@ -24,7 +24,7 @@ export class CSRFService { constructor(private cookieService: CookieService) {} - getCSRF(name = 'XSRF-TOKEN') { + getCSRF(name = 'XSRF-TOKEN'): string { return this.cookieService.get(name); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/state-storage.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/state-storage.service.ts.ejs index 04fa5a21..a9ad07bd 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/state-storage.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/state-storage.service.ts.ejs @@ -21,46 +21,21 @@ import { SessionStorageService } from 'ngx-webstorage'; @Injectable({providedIn: 'root'}) export class StateStorageService { + private previousUrlKey = 'previousUrl'; + constructor( private $sessionStorage: SessionStorageService ) {} - getPreviousState() { - return this.$sessionStorage.retrieve('previousState'); - } - - resetPreviousState() { - this.$sessionStorage.clear('previousState'); - } - - storePreviousState(previousStateName, previousStateParams) { - const previousState = { 'name': previousStateName, 'params': previousStateParams }; - this.$sessionStorage.store('previousState', previousState); - } - - getDestinationState() { - return this.$sessionStorage.retrieve('destinationState'); - } - - storeUrl(url: string) { - this.$sessionStorage.store('previousUrl', url); + storeUrl(url: string): void { + this.$sessionStorage.store(this.previousUrlKey, url); } - getUrl() { - return this.$sessionStorage.retrieve('previousUrl'); + getUrl(): string | null | undefined { + return this.$sessionStorage.retrieve(this.previousUrlKey); } - storeDestinationState(destinationState, destinationStateParams, fromState) { - const destinationInfo = { - 'destination': { - 'name': destinationState.name, - 'data': destinationState.data, - }, - 'params': destinationStateParams, - 'from': { - 'name': fromState.name, - } - }; - this.$sessionStorage.store('destinationState', destinationInfo); + clearUrl(): void { + this.$sessionStorage.clear(this.previousUrlKey); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/auth/user-route-access-service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/auth/user-route-access-service.ts.ejs index f558be39..510f566f 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/auth/user-route-access-service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/auth/user-route-access-service.ts.ejs @@ -18,8 +18,10 @@ -%> import { Injectable, isDevMode } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; -import { AccountService } from 'app/core/'; +import { AccountService } from 'app/core/auth/account.service'; <%_ if (authenticationType !== 'oauth2') { _%> import { LoginModalService } from 'app/core/login/login-modal.service'; <%_ } else { _%> @@ -40,7 +42,7 @@ export class UserRouteAccessService implements CanActivate { private stateStorageService: StateStorageService) { } - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Promise { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { const authorities = route.data['authorities']; // We need to call the checkLogin / and so the accountService.identity() function, to ensure, @@ -49,8 +51,8 @@ export class UserRouteAccessService implements CanActivate { return this.checkLogin(authorities, state.url); } - checkLogin(authorities: string[], url: string): Promise { - return this.accountService.identity().then((account) => { + checkLogin(authorities: string[], url: string): Observable { + return this.accountService.identity().pipe(map((account) => { if (!authorities || authorities.length === 0) { return true; @@ -70,11 +72,12 @@ export class UserRouteAccessService implements CanActivate { this.stateStorageService.storeUrl(url); <%_ if (authenticationType !== 'oauth2') { _%> + this.router.navigate(['']); this.loginModalService.open(); <%_ } else { _%> this.loginService.login(); <%_ } _%> return false; - }); + })); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/core.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/core.module.ts.ejs index 3bf53a2e..f547550a 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/core.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/core.module.ts.ejs @@ -1,22 +1,58 @@ import { NgModule, LOCALE_ID } from '@angular/core'; import { DatePipe, registerLocaleData } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; +import { <% if (enableTranslation) { %>HttpClient, <% } %>HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { Title } from '@angular/platform-browser'; +import { CookieModule } from 'ngx-cookie'; +<%_ if (enableTranslation) { _%> +import { TranslateModule, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core'; +<%_ } _%> +import { NgxWebstorageModule } from 'ngx-webstorage'; +import { NgJhipsterModule<% if (enableTranslation) { %>, translatePartialLoader, missingTranslationHandler, JhiConfigService, JhiLanguageService<% } %> } from 'ng-jhipster'; <%_ const localeId = getLocaleId(nativeLanguage); _%> import locale from '@angular/common/locales/<%= localeId %>'; <%_ if (enableI18nRTL) { _%> import { FindLanguageFromKeyPipe -} from 'app/shared'; +} from 'app/shared/language/find-language-from-key.pipe'; +<%_ } _%> +import { ConfirmationService, MessageService } from 'primeng/api'; +<%_ if (authenticationType === 'jwt') { _%> +import { AuthInterceptor } from 'app/blocks/interceptor/auth.interceptor'; <%_ } _%> +import { AuthExpiredInterceptor } from 'app/blocks/interceptor/auth-expired.interceptor'; +import { ErrorHandlerInterceptor } from 'app/blocks/interceptor/errorhandler.interceptor'; +import { NotificationInterceptor } from 'app/blocks/interceptor/notification.interceptor'; @NgModule({ imports: [ - HttpClientModule + HttpClientModule, + CookieModule.forRoot(), + NgxWebstorageModule.forRoot({ prefix: '<%=jhiPrefixDashed %>', separator: '-'}), + NgJhipsterModule.forRoot({ + // set below to true to make alerts look like toast + alertAsToast: false, + alertTimeout: 5000, + <%_ if (enableTranslation) { _%> + i18nEnabled: true, + defaultI18nLang: '<%= nativeLanguage %>' + <%_ } _%> + }), + <%_ if (enableTranslation) { _%> + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: translatePartialLoader, + deps: [HttpClient] + }, + missingTranslationHandler: { + provide: MissingTranslationHandler, + useFactory: missingTranslationHandler, + deps: [JhiConfigService] + } + }) + <%_ } _%> ], - exports: [], - declarations: [], providers: [ Title, { @@ -30,11 +66,38 @@ import { <%_ if (enableI18nRTL) { _%> FindLanguageFromKeyPipe, <%_ } _%> - DatePipe + DatePipe, + <%_ if (authenticationType === 'jwt') { _%> + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true + }, + <%_ } _%> + { + provide: HTTP_INTERCEPTORS, + useClass: AuthExpiredInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ErrorHandlerInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: NotificationInterceptor, + multi: true + }, + ConfirmationService, + MessageService, ] }) export class <%=angularXAppName%>CoreModule { - constructor() { + constructor(<% if (enableTranslation) { %>languageService: JhiLanguageService<% } %>) { registerLocaleData(locale); + <%_ if (enableTranslation) { _%> + languageService.init(); + <%_ } _%> } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/icons/font-awesome-icons.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/icons/font-awesome-icons.ts.ejs new file mode 100644 index 00000000..28c68941 --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/core/icons/font-awesome-icons.ts.ejs @@ -0,0 +1,73 @@ +import { + faUser, + faSort, + faSortUp, + faSortDown, + faSync, + faEye, + faBan, + faTimes, + faArrowLeft, + faSave, + faPlus, + faPencilAlt, + faBars, + faThList, + faUserPlus, + faRoad, + faTachometerAlt, + faHeart, + faList, + faBell, + faBook, + faHdd, + faFlag, + faWrench, + faLock, + faCloud, + faSignOutAlt, + faSignInAlt, + faCalendarAlt, + faSearch, + faTrashAlt, + faAsterisk, + faTasks, + faHome +} from '@fortawesome/free-solid-svg-icons'; + +export const fontAwesomeIcons = [ + faUser, + faSort, + faSortUp, + faSortDown, + faSync, + faEye, + faBan, + faTimes, + faArrowLeft, + faSave, + faPlus, + faPencilAlt, + faBars, + faHome, + faThList, + faUserPlus, + faRoad, + faTachometerAlt, + faHeart, + faList, + faBell, + faTasks, + faBook, + faHdd, + faFlag, + faWrench, + faLock, + faCloud, + faSignOutAlt, + faSignInAlt, + faCalendarAlt, + faSearch, + faTrashAlt, + faAsterisk +]; diff --git a/generators/client/templates/angular/src/main/webapp/app/core/index.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/index.ts.ejs deleted file mode 100644 index 026bb005..00000000 --- a/generators/client/templates/angular/src/main/webapp/app/core/index.ts.ejs +++ /dev/null @@ -1,28 +0,0 @@ -export * from './auth/csrf.service'; -export * from './auth/state-storage.service'; -export * from './auth/account.service'; -<%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> -export * from './auth/auth-jwt.service'; -<%_ } else if (authenticationType === 'session' || authenticationType === 'oauth2') { _%> -export * from './auth/auth-session.service'; -<%_ } _%> -<%_ if (websocket === 'spring-websocket') { _%> -export * from './tracker/tracker.service'; -<%_ } _%> -<%_ if (enableTranslation) { _%> -export * from './language/language.helper'; -export * from './language/language.constants'; -<%_ } _%> -export * from './user/account.model'; -<%_ if (!skipUserManagement || authenticationType === 'oauth2') { _%> -export * from './user/user.model'; -<%_ } _%> -export * from './auth/user-route-access-service'; -<%_ if (authenticationType !== 'oauth2') { _%> -export * from './login/login-modal.service'; -<%_ } _%> -export * from './login/login.service'; -<%_ if (!skipUserManagement || authenticationType === 'oauth2') { _%> -export * from './user/user.service'; -<%_ } _%> -export * from './core.module'; diff --git a/generators/client/templates/angular/src/main/webapp/app/core/language/language.helper.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/language/language.helper.ts.ejs index 831ae249..b8f5819d 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/language/language.helper.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/language/language.helper.ts.ejs @@ -17,81 +17,36 @@ limitations under the License. -%> import { Injectable, RendererFactory2, Renderer2 } from '@angular/core'; -import { Title } from '@angular/platform-browser'; -import { Router, ActivatedRouteSnapshot } from '@angular/router'; import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; -import { BehaviorSubject, Observable } from 'rxjs'; - -import { LANGUAGES } from 'app/core/language/language.constants'; <%_ if (enableI18nRTL) { _%> + import { FindLanguageFromKeyPipe } from 'app/shared/language/find-language-from-key.pipe'; <%_ } _%> @Injectable({providedIn: 'root'}) -export class JhiLanguageHelper { - renderer: Renderer2 = null; - private _language: BehaviorSubject; +export class LanguageHelper { + private renderer: Renderer2; constructor( private translateService: TranslateService, <%_ if (enableI18nRTL) { _%> private findLanguageFromKeyPipe: FindLanguageFromKeyPipe, <%_ } _%> - private titleService: Title, - private router: Router, rootRenderer: RendererFactory2 ) { - this._language = new BehaviorSubject(this.translateService.currentLang); this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null); - this.init(); - } - - getAll(): Promise { - return Promise.resolve(LANGUAGES); - } - - get language(): Observable { - return this._language.asObservable(); - } - /** - * Update the window title using params in the following - * order: - * 1. titleKey parameter - * 2. $state.$current.data.pageTitle (current state page title) - * 3. 'global.title' - */ - updateTitle(titleKey?: string) { - if (!titleKey) { - titleKey = this.getPageTitle(this.router.routerState.snapshot.root); - } - - this.translateService.get(titleKey).subscribe((title) => { - this.titleService.setTitle(title); - }); - } - - private init() { - this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { - this._language.next(this.translateService.currentLang); - this.renderer.setAttribute(document.querySelector('html'), 'lang', this.translateService.currentLang); - this.updateTitle(); + this.translateService.onLangChange.subscribe((langChangeEvent: LangChangeEvent) => { + this.renderer.setAttribute(document.querySelector('html'), 'lang', langChangeEvent.lang); <%_ if (enableI18nRTL) { _%> + this.updatePageDirection(); <%_ } _%> }); } - - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = (routeSnapshot.data && routeSnapshot.data['pageTitle']) ? routeSnapshot.data['pageTitle'] : '<%= angularAppName %>'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } <%_ if (enableI18nRTL) { _%> - private updatePageDirection() { + private updatePageDirection(): void { this.renderer.setAttribute(document.querySelector('html'), 'dir', this.findLanguageFromKeyPipe.isRTL(this.translateService.currentLang) ? 'rtl' : 'ltr'); } <%_ }_%> diff --git a/generators/client/templates/angular/src/main/webapp/app/core/login/login-modal.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/login/login-modal.service.ts.ejs index df7579ec..80de62de 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/login/login-modal.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/login/login-modal.service.ts.ejs @@ -19,26 +19,20 @@ import { Injectable } from '@angular/core'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { <%=jhiPrefixCapitalized%>LoginModalComponent } from 'app/shared/login/login.component'; +import { LoginModalComponent } from 'app/shared/login/login.component'; @Injectable({providedIn: 'root'}) export class LoginModalService { private isOpen = false; - constructor( - private modalService: NgbModal, - ) {} - open(): NgbModalRef { + constructor(private modalService: NgbModal) {} + + open(): void { if (this.isOpen) { return; } this.isOpen = true; - const modalRef = this.modalService.open(<%=jhiPrefixCapitalized%>LoginModalComponent); - modalRef.result.then((result) => { - this.isOpen = false; - }, (reason) => { - this.isOpen = false; - }); - return modalRef; + const modalRef: NgbModalRef = this.modalService.open(LoginModalComponent); + modalRef.result.finally(() => (this.isOpen = false)); } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/login/login.model.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/login/login.model.ts.ejs new file mode 100644 index 00000000..41b6336b --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/core/login/login.model.ts.ejs @@ -0,0 +1,21 @@ +<%# + Copyright 2013-2019 the original author or authors from the JHipster project. + + This file is part of the JHipster project, see https://www.jhipster.tech/ + for more information. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +-%> +export class Login { + constructor(public username: string, public password: string, public rememberMe: boolean) {} +} diff --git a/generators/client/templates/angular/src/main/webapp/app/core/login/login.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/login/login.service.ts.ejs index 3e58001a..9d5bd17c 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/login/login.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/login/login.service.ts.ejs @@ -19,93 +19,73 @@ import { Injectable } from '@angular/core'; <%_ if (authenticationType === 'oauth2') { _%> import { Location } from '@angular/common'; -<%_ } _%> + +<%_ } else { _%> +import { Observable } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; + +import { Account } from 'app/core/user/account.model'; import { AccountService } from 'app/core/auth/account.service'; +<%_ } _%> <%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> -import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; +import { AuthServerProvider<% if (authenticationType === 'uaa') { %>, LOGOUT_URL<% } %> } from 'app/core/auth/auth-jwt.service'; <%_ } else if (authenticationType === 'session' || authenticationType === 'oauth2') { _%> -import { AuthServerProvider } from 'app/core/auth/auth-session.service'; +import { AuthServerProvider<% if (authenticationType === 'session') { %>, LOGOUT_URL<% } %> } from 'app/core/auth/auth-session.service'; <%_ } _%> -<%_ if (websocket === 'spring-websocket') { _%> -import { <%=jhiPrefixCapitalized%>TrackerService } from 'app/core/tracker/tracker.service'; +<%_ if (authenticationType === 'oauth2') { _%> +import { Logout } from './logout.model'; +<%_ } else { _%> +import { Login } from './login.model'; <%_ } _%> @Injectable({providedIn: 'root'}) export class LoginService { constructor( - private accountService: AccountService, - <%_ if (websocket === 'spring-websocket') { _%> - private trackerService: <%=jhiPrefixCapitalized%>TrackerService, - <%_ } _%> <%_ if (authenticationType === 'oauth2') { _%> private location: Location, + <%_ } else { _%> + private accountService: AccountService, <%_ } _%> private authServerProvider: AuthServerProvider ) {} <%_ if (authenticationType === 'oauth2') { _%> - login() { + login(): void { // If you have configured multiple OIDC providers, then, you can update this URL to /login. // It will show a Spring Security generated login page with links to configured OIDC providers. location.href = `${location.origin}${this.location.prepareExternalUrl('oauth2/authorization/oidc')}`; } <%_ } else { _%> - login(credentials, callback?) { - const cb = callback || function() {}; - - return new Promise((resolve, reject) => { - this.authServerProvider.login(credentials).subscribe((data) => { - this.accountService.identity(true).then((account) => { - <%_ if (websocket === 'spring-websocket') { _%> - this.trackerService.sendActivity(); - <%_ } _%> - resolve(data); - }); - return cb(); - }, (err) => { - this.logout(); - reject(err); - return cb(err); - }); - }); + login(credentials: Login): Observable { + return this.authServerProvider.login(credentials).pipe(flatMap(() => this.accountService.identity(true))); } <%_ } _%> - <%_ if (authenticationType === 'jwt') { _%> - loginWithToken(jwt, rememberMe) { - return this.authServerProvider.loginWithToken(jwt, rememberMe); - } - <%_ } _%> - <%_ if (authenticationType === 'uaa') { _%> + <%_ if (authenticationType === 'uaa' || authenticationType === 'session') { _%> - isAuthenticated() { - return this.accountService.isAuthenticated(); + logoutUrl(): string { + return LOGOUT_URL; } - logoutDirectly() { + logoutInClient(): void { this.accountService.authenticate(null); } <%_ } _%> - logout() { - <%_ if (authenticationType === 'uaa') { _%> - if (this.accountService.isAuthenticated()) { - this.authServerProvider.logout().subscribe(() => this.accountService.authenticate(null)); - } else { - this.accountService.authenticate(null); - } - <%_ } else if (authenticationType === 'oauth2') { _%> - this.authServerProvider.logout().subscribe(response => { - const data = response.body; - let logoutUrl = data.logoutUrl; + logout(): void { + <%_ if (authenticationType === 'oauth2') { _%> + this.authServerProvider.logout().subscribe((logout: Logout) => { + let logoutUrl = logout.logoutUrl; + const redirectUri = `${location.origin}${this.location.prepareExternalUrl('/')}`; + // if Keycloak, uri has protocol/openid-connect/token - if (logoutUrl.indexOf('/protocol') > -1) { - logoutUrl = logoutUrl + '?redirect_uri=' + window.location.origin; + if (logoutUrl.includes('/protocol')) { + logoutUrl = logoutUrl + '?redirect_uri=' + redirectUri; } else { // Okta logoutUrl = logoutUrl + '?id_token_hint=' + - data.idToken + '&post_logout_redirect_uri=' + window.location.origin; + logout.idToken + '&post_logout_redirect_uri=' + redirectUri; } window.location.href = logoutUrl; }); diff --git a/generators/client/templates/angular/src/main/webapp/app/home/index.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/login/logout.model.ts.ejs similarity index 88% rename from generators/client/templates/angular/src/main/webapp/app/home/index.ts.ejs rename to generators/client/templates/angular/src/main/webapp/app/core/login/logout.model.ts.ejs index adc2b70c..218a2612 100644 --- a/generators/client/templates/angular/src/main/webapp/app/home/index.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/login/logout.model.ts.ejs @@ -16,6 +16,6 @@ See the License for the specific language governing permissions and limitations under the License. -%> -export * from './home.component'; -export * from './home.route'; -export * from './home.module'; +export class Logout { + constructor(public idToken: string, public logoutUrl: string) {} +} diff --git a/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker-activity.model.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker-activity.model.ts.ejs new file mode 100644 index 00000000..2765804a --- /dev/null +++ b/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker-activity.model.ts.ejs @@ -0,0 +1,4 @@ +export class TrackerActivity { + constructor(public sessionId: string, public userLogin: string, public ipAddress: string, public page: string, public time: string) {} + } + \ No newline at end of file diff --git a/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs index 327fc369..5fded578 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/tracker/tracker.service.ts.ejs @@ -17,124 +17,127 @@ limitations under the License. -%> import { Injectable } from '@angular/core'; -import { Router, NavigationEnd } from '@angular/router'; -import { Observable, Observer, Subscription } from 'rxjs'; import { Location } from '@angular/common'; - -import { CSRFService } from '../auth/csrf.service'; -<%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> -import { AuthServerProvider } from '../auth/auth-jwt.service'; -<%_ } _%> - +import { Router, NavigationEnd, Event } from '@angular/router'; +import { Subscription, ReplaySubject, Subject } from 'rxjs'; +import { filter } from 'rxjs/operators'; import * as SockJS from 'sockjs-client'; import * as Stomp from 'webstomp-client'; -@Injectable({providedIn: 'root'}) -export class <%=jhiPrefixCapitalized%>TrackerService { - stompClient = null; - subscriber = null; - connection: Promise; - connectedPromise: any; - listener: Observable; - listenerObserver: Observer; - alreadyConnectedOnce = false; - private subscription: Subscription; +<%_ if (authenticationType === 'session') { _%> +import { CSRFService } from 'app/core/auth/csrf.service'; +<%_ } _%> +<%_ if (authenticationType === 'jwt') { _%> +import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; +<%_ } _%> +import { TrackerActivity } from './tracker-activity.model'; +@Injectable({providedIn: 'root'}) +export class TrackerService { + private stompClient: Stomp.Client | null = null; + private routerSubscription: Subscription | null = null; + private connectionSubject: ReplaySubject = new ReplaySubject(1); + private connectionSubscription: Subscription | null = null; + private stompSubscription: Stomp.Subscription | null = null; + private listenerSubject: Subject = new Subject(); + constructor( private router: Router, - <%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> + <%_ if (authenticationType === 'session') { _%> + private csrfService: CSRFService, + <%_ } _%> + <%_ if (authenticationType === 'jwt') { _%> private authServerProvider: AuthServerProvider, <%_ } _%> - private location: Location, - // tslint:disable-next-line: no-unused-variable - private csrfService: CSRFService - ) { - this.connection = this.createConnection(); - this.listener = this.createListener(); - } + private location: Location + ) {} - connect() { - if (this.connectedPromise === null) { - this.connection = this.createConnection(); + connect(): void { + if (this.stompClient && this.stompClient.connected) { + return; } + // building absolute path so that websocket doesn't fail when deploying with a context path let url = '/websocket/tracker'; url = this.location.prepareExternalUrl(url); - <%_ if (authenticationType === 'jwt' || authenticationType === 'uaa') { _%> + <%_ if (authenticationType === 'jwt') { _%> const authToken = this.authServerProvider.getToken(); if (authToken) { url += '?access_token=' + authToken; } <%_ } _%> - const socket = new SockJS(url); + const socket: WebSocket = new SockJS(url); this.stompClient = Stomp.over(socket); - const headers = {}; + const headers: Stomp.ConnectionHeaders = {}; <%_ if (authenticationType === 'session') { _%> headers['X-XSRF-TOKEN'] = this.csrfService.getCSRF('XSRF-TOKEN'); <%_ } _%> this.stompClient.connect(headers, () => { - this.connectedPromise('success'); - this.connectedPromise = null; + this.connectionSubject.next(); + this.sendActivity(); - if (!this.alreadyConnectedOnce) { - this.subscription = this.router.events.subscribe((event) => { - if (event instanceof NavigationEnd) { - this.sendActivity(); - } - }); - this.alreadyConnectedOnce = true; - } + + this.routerSubscription = this.router.events + .pipe(filter((event: Event) => event instanceof NavigationEnd)) + .subscribe(() => this.sendActivity()); }); } - disconnect() { - if (this.stompClient !== null) { - this.stompClient.disconnect(); - this.stompClient = null; + disconnect(): void { + this.unsubscribe(); + + this.connectionSubject = new ReplaySubject(1); + + if (this.routerSubscription) { + this.routerSubscription.unsubscribe(); + this.routerSubscription = null; } - if (this.subscription) { - this.subscription.unsubscribe(); - this.subscription = null; + + if (this.stompClient) { + if (this.stompClient.connected) { + this.stompClient.disconnect(); + } + this.stompClient = null; } - this.alreadyConnectedOnce = false; } - receive() { - return this.listener; + receive(): Subject { + return this.listenerSubject; } - sendActivity() { - if (this.stompClient !== null && this.stompClient.connected) { - this.stompClient.send( - '/topic/activity', // destination - JSON.stringify({'page': this.router.routerState.snapshot.url}), // body - {} // header - ); + subscribe(): void { + if (this.connectionSubscription) { + return; } - } - - subscribe() { - this.connection.then(() => { - this.subscriber = this.stompClient.subscribe('/topic/tracker', (data) => { - this.listenerObserver.next(JSON.parse(data.body)); - }); + + this.connectionSubscription = this.connectionSubject.subscribe(() => { + if (this.stompClient) { + this.stompSubscription = this.stompClient.subscribe('/topic/tracker', (data: Stomp.Message) => { + this.listenerSubject.next(JSON.parse(data.body)); + }); + } }); } - unsubscribe() { - if (this.subscriber !== null) { - this.subscriber.unsubscribe(); + unsubscribe(): void { + if (this.stompSubscription) { + this.stompSubscription.unsubscribe(); + this.stompSubscription = null; } - this.listener = this.createListener(); - } - private createListener(): Observable { - return new Observable((observer) => { - this.listenerObserver = observer; - }); + if (this.connectionSubscription) { + this.connectionSubscription.unsubscribe(); + this.connectionSubscription = null; + } } - private createConnection(): Promise { - return new Promise((resolve, reject) => this.connectedPromise = resolve); + private sendActivity(): void { + if (this.stompClient && this.stompClient.connected) { + this.stompClient.send( + '/topic/activity', // destination + JSON.stringify({'page': this.router.routerState.snapshot.url}), // body + {} // header + ); + } } } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/user/user.model.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/user/user.model.ts.ejs index 44277c3b..0609e9f2 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/user/user.model.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/user/user.model.ts.ejs @@ -25,7 +25,7 @@ export interface IUser { email?: string; activated?: boolean; langKey?: string; - authorities?: any[]; + authorities?: string[]; createdBy?: string; createdDate?: Date; lastModifiedBy?: string; @@ -42,25 +42,11 @@ export class User implements IUser { public email?: string, public activated?: boolean, public langKey?: string, - public authorities?: any[], + public authorities?: string[], public createdBy?: string, public createdDate?: Date, public lastModifiedBy?: string, public lastModifiedDate?: Date, public password?: string - ) { - this.id = id ? id : null; - this.login = login ? login : null; - this.firstName = firstName ? firstName : null; - this.lastName = lastName ? lastName : null; - this.email = email ? email : null; - this.activated = activated ? activated : false; - this.langKey = langKey ? langKey : null; - this.authorities = authorities ? authorities : null; - this.createdBy = createdBy ? createdBy : null; - this.createdDate = createdDate ? createdDate : null; - this.lastModifiedBy = lastModifiedBy ? lastModifiedBy : null; - this.lastModifiedDate = lastModifiedDate ? lastModifiedDate : null; - this.password = password ? password : null; - } + ) {} } diff --git a/generators/client/templates/angular/src/main/webapp/app/core/user/user.service.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/core/user/user.service.ts.ejs index c3f7925f..a7821bba 100644 --- a/generators/client/templates/angular/src/main/webapp/app/core/user/user.service.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/core/user/user.service.ts.ejs @@ -31,16 +31,16 @@ export class UserService { constructor(private http: HttpClient) { } <%_ if (authenticationType !== 'oauth2') { _%> - create(user: IUser): Observable> { - return this.http.post(this.resourceUrl, user, { observe: 'response' }); + create(user: IUser): Observable { + return this.http.post(this.resourceUrl, user); } - update(user: IUser): Observable> { - return this.http.put(this.resourceUrl, user, { observe: 'response' }); + update(user: IUser): Observable { + return this.http.put(this.resourceUrl, user); } - find(login: string): Observable> { - return this.http.get(`${this.resourceUrl}/${login}`, { observe: 'response' }); + find(login: string): Observable { + return this.http.get(`${this.resourceUrl}/${login}`); } <% } %> query(req?: any): Observable> { @@ -49,8 +49,8 @@ export class UserService { } <%_ if (authenticationType !== 'oauth2') { _%> - delete(login: string): Observable> { - return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' }); + delete(login: string): Observable<{}> { + return this.http.delete(`${this.resourceUrl}/${login}`); } authorities(): Observable { diff --git a/generators/client/templates/angular/src/main/webapp/app/entities/entity.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/entities/entity.module.ts.ejs index 06ad4449..c8d3a88b 100644 --- a/generators/client/templates/angular/src/main/webapp/app/entities/entity.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/entities/entity.module.ts.ejs @@ -16,7 +16,7 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; @NgModule({ @@ -24,10 +24,6 @@ import { RouterModule } from '@angular/router'; RouterModule.forChild([ /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ ]) - ], - declarations: [], - entryComponents: [], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + ] }) export class <%=angularXAppName%>EntityModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/home/home.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/home/home.component.html.ejs index a397df77..9a8e37e2 100644 --- a/generators/client/templates/angular/src/main/webapp/app/home/home.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/home/home.component.html.ejs @@ -37,7 +37,7 @@ <%_ if (!skipUserManagement) { _%>
You don't have an account yet?  - Register a new account + Register a new account
<%_ } _%> @@ -47,15 +47,15 @@

- If you like JHipster, don't forget to give us a star on GitHub! + If you like JHipster, don't forget to give us a star on GitHub!

diff --git a/generators/client/templates/angular/src/main/webapp/app/home/home.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/home/home.component.ts.ejs index 1961f23c..4aa0e8f5 100644 --- a/generators/client/templates/angular/src/main/webapp/app/home/home.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/home/home.component.ts.ejs @@ -16,13 +16,18 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit<%_ if (authenticationType !== 'oauth2') { _%>, OnDestroy <%_ } _%> } from '@angular/core'; <%_ if (authenticationType !== 'oauth2') { _%> -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; +import { Subscription } from 'rxjs'; <%_ } _%> -import { <% if (authenticationType !== 'oauth2') { %>LoginModalService<% } else { %>LoginService<% } %>, AccountService, Account } from 'app/core'; +<%_ if (authenticationType !== 'oauth2') { _%> +import { LoginModalService } from 'app/core/login/login-modal.service'; +<%_ } else { _%> +import { LoginService } from 'app/core/login/login.service'; +<%_ } _%> +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; @Component({ selector: '<%= jhiPrefixDashed %>-home', @@ -32,49 +37,46 @@ import { <% if (authenticationType !== 'oauth2') { %>LoginModalService<% } else ] }) -export class HomeComponent implements OnInit { - account: Account; +export class HomeComponent implements OnInit <%_ if (authenticationType !== 'oauth2') { _%>, OnDestroy <%_ } _%> { + account: Account | null = null; <%_ if (authenticationType !== 'oauth2') { _%> - modalRef: NgbModalRef; + authSubscription?: Subscription; <%_ } _%> constructor( private accountService: AccountService, <%_ if (authenticationType !== 'oauth2') { _%> - private loginModalService: LoginModalService, - private eventManager: JhiEventManager + private loginModalService: LoginModalService <%_ } else { _%> private loginService: LoginService <%_ } _%> - ) { - } - - ngOnInit() { - this.accountService.identity().then((account: Account) => { - this.account = account; - }); - <%_ if (authenticationType !== 'oauth2') { _%> - this.registerAuthenticationSuccess(); - } + ) {} - registerAuthenticationSuccess() { - this.eventManager.subscribe('authenticationSuccess', (message) => { - this.accountService.identity().then((account) => { - this.account = account; - }); - }); + ngOnInit(): void { + <%_ if (authenticationType === 'oauth2') { _%> + this.accountService.identity().subscribe(account => (this.account = account)); + <%_ } else { _%> + this.authSubscription = this.accountService.getAuthenticationState().subscribe(account => (this.account = account)); <%_ } _%> } - isAuthenticated() { + isAuthenticated(): boolean { return this.accountService.isAuthenticated(); } - login() { + login(): void { <%_ if (authenticationType !== 'oauth2') { _%> - this.modalRef = this.loginModalService.open(); + this.loginModalService.open(); <%_ } else { _%> this.loginService.login(); <%_ }_%> } + + <%_ if (authenticationType !== 'oauth2') { _%> + ngOnDestroy(): void { + if(this.authSubscription) { + this.authSubscription.unsubscribe(); + } + } + <%_ }_%> } diff --git a/generators/client/templates/angular/src/main/webapp/app/home/home.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/home/home.module.ts.ejs index b077759d..81cb9c84 100644 --- a/generators/client/templates/angular/src/main/webapp/app/home/home.module.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/home/home.module.ts.ejs @@ -16,11 +16,12 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { <%=angularXAppName%>SharedModule } from 'app/shared'; -import { HOME_ROUTE, HomeComponent } from './'; +import { <%=angularXAppName%>SharedModule } from 'app/shared/shared.module'; +import { HOME_ROUTE } from './home.route'; +import { HomeComponent } from './home.component'; @NgModule({ imports: [ @@ -29,7 +30,6 @@ import { HOME_ROUTE, HomeComponent } from './'; ], declarations: [ HomeComponent, - ], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + ] }) export class <%=angularXAppName%>HomeModule {} diff --git a/generators/client/templates/angular/src/main/webapp/app/home/home.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/home/home.route.ts.ejs index bd058949..57d868d5 100644 --- a/generators/client/templates/angular/src/main/webapp/app/home/home.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/home/home.route.ts.ejs @@ -18,7 +18,7 @@ -%> import { Route } from '@angular/router'; -import { HomeComponent } from './'; +import { HomeComponent } from './home.component'; export const HOME_ROUTE: Route = { path: '', diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.html.ejs index 1987df6a..84d1e4ab 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.html.ejs @@ -24,13 +24,8 @@

Error Page!

-
-
{{errorMessage}} -
-
-
You are not authorized to access this page. -
-
The page does not exist. +
+
{{ errorMessage }}
diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.ts.ejs index 8764e97e..0d28c1fc 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.component.ts.ejs @@ -16,34 +16,57 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit<% if (enableTranslation) { %>, OnDestroy<% } %> } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +<%_ if (enableTranslation) { _%> +import { Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; +<%_ } _%> @Component({ selector: '<%= jhiPrefixDashed %>-error', templateUrl: './error.component.html' }) -export class ErrorComponent implements OnInit { - errorMessage: string; - error403: boolean; - error404: boolean; +export class ErrorComponent implements OnInit<% if (enableTranslation) { %>, OnDestroy<% } %> { + errorMessage?: string; + <%_ if (enableTranslation) { _%> + errorKey?: string; + langChangeSubscription?: Subscription; + <%_ } _%> constructor( + <%_ if (enableTranslation) { _%> + private translateService: TranslateService, + <%_ } _%> private route: ActivatedRoute - ) { - } + ) {} - ngOnInit() { + ngOnInit(): void { this.route.data.subscribe((routeData) => { - if (routeData.error403) { - this.error403 = routeData.error403; - } - if (routeData.error404) { - this.error404 = routeData.error404; - } if (routeData.errorMessage) { + <%_ if (enableTranslation) { _%> + this.errorKey = routeData.errorMessage; + this.getErrorMessageTranslation(); + this.langChangeSubscription = this.translateService.onLangChange.subscribe(() => this.getErrorMessageTranslation()); + <%_ } else { _%> this.errorMessage = routeData.errorMessage; + <%_ } _%> } }); } + <%_ if (enableTranslation) { _%> + + ngOnDestroy(): void { + if (this.langChangeSubscription) { + this.langChangeSubscription.unsubscribe(); + } + } + + private getErrorMessageTranslation(): void { + this.errorMessage = ''; + if (this.errorKey) { + this.translateService.get(this.errorKey).subscribe(translatedErrorMessage => (this.errorMessage = translatedErrorMessage)); + } + } + <%_ } _%> } diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.route.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.route.ts.ejs index d7dfd77c..a09fc758 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.route.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/error/error.route.ts.ejs @@ -35,7 +35,7 @@ export const errorRoute: Routes = [ data: { authorities: [], pageTitle: 'error.title', - error403: true + errorMessage: 'error.http.403' }, }, { @@ -44,7 +44,7 @@ export const errorRoute: Routes = [ data: { authorities: [], pageTitle: 'error.title', - error404: true + errorMessage: 'error.http.404' }, }, { diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs index 235a6f4c..7afc08fe 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/main/main.component.ts.ejs @@ -16,93 +16,64 @@ See the License for the specific language governing permissions and limitations under the License. -%> -import { Component,<%_ if (authenticationType === 'oauth2') { _%> OnDestroy,<%_ } _%> OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; import { Router, ActivatedRouteSnapshot, NavigationEnd, NavigationError } from '@angular/router'; -<%_ if (authenticationType === 'oauth2') { _%> -import { Subject } from 'rxjs'; -import { takeUntil } from 'rxjs/operators'; -<%_ } _%> - <%_ if (enableTranslation) { _%> -import { JhiLanguageHelper<%_ if (authenticationType === 'oauth2') { _%>, Account, AccountService, StateStorageService<%_ } _%> } from 'app/core'; -<%_ } else { _%> -<%_ if (authenticationType === 'oauth2') { _%> -import { Account, AccountService, StateStorageService } from 'app/core'; -<%_ } _%> -import { Title } from '@angular/platform-browser'; +import { TranslateService } from '@ngx-translate/core'; <%_ } _%> +import { AccountService } from 'app/core/auth/account.service'; + @Component({ selector: '<%= jhiPrefixDashed %>-main', templateUrl: './main.component.html' }) -export class <%=jhiPrefixCapitalized%>MainComponent implements OnInit<%_ if (authenticationType === 'oauth2') { _%>, OnDestroy<%_ } _%> { - <%_ if (authenticationType === 'oauth2') { _%> - _cleanup: Subject = new Subject(); - <%_ } _%> - +export class MainComponent implements OnInit { constructor( - <%_ if (authenticationType === 'oauth2') { _%> private accountService: AccountService, - private stateStorageService: StateStorageService, - <%_ } _%> <%_ if (enableTranslation) { _%> - private jhiLanguageHelper: JhiLanguageHelper, - <%_ } else { _%> - private titleService: Title, + private translateService: TranslateService, <%_ } _%> + private titleService: Title, private router: Router ) {} - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = (routeSnapshot.data && routeSnapshot.data['pageTitle']) ? routeSnapshot.data['pageTitle'] : '<%= angularAppName %>'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } + ngOnInit(): void { + // try to log in automatically + this.accountService.identity().subscribe(); - ngOnInit() { - this.router.events.subscribe((event) => { + this.router.events.subscribe(event => { if (event instanceof NavigationEnd) { - <%_ if (enableTranslation) { _%> - this.jhiLanguageHelper.updateTitle(this.getPageTitle(this.router.routerState.snapshot.root)); - <%_ } else { _%> - this.titleService.setTitle(this.getPageTitle(this.router.routerState.snapshot.root)); - <%_ } _%> + this.updateTitle(); } if (event instanceof NavigationError && event.error.status === 404) { this.router.navigate(['/404']); } }); - <%_ if (authenticationType === 'oauth2') { _%> - this.subscribeToLoginEvents(); + <%_ if (enableTranslation) { _%> + + this.translateService.onLangChange.subscribe(() => this.updateTitle()); <%_ } _%> } - <%_ if (authenticationType === 'oauth2') { _%> - ngOnDestroy() { - this._cleanup.next(); - this._cleanup.complete(); - } - - private subscribeToLoginEvents() { - this.accountService - .getAuthenticationState() - .pipe(takeUntil(this._cleanup)) - .subscribe((account: Account) => { - if (account) { - this.navigateToStoredUrl(); - } - }); - } + private getPageTitle(routeSnapshot: ActivatedRouteSnapshot): string { + let title: string = (routeSnapshot.data && routeSnapshot.data['pageTitle']) ? routeSnapshot.data['pageTitle'] : ''; + if (routeSnapshot.firstChild) { + title = this.getPageTitle(routeSnapshot.firstChild) || title; + } + return title; + } - private navigateToStoredUrl() { - const previousUrl = this.stateStorageService.getUrl(); - if (previousUrl) { - this.stateStorageService.storeUrl(null); - this.router.navigateByUrl(previousUrl); + private updateTitle(): void { + let pageTitle = this.getPageTitle(this.router.routerState.snapshot.root); + if (!pageTitle) { + pageTitle = '<% if (enableTranslation) { %>global.title<% } else { %><%= capitalizedBaseName %><% } %>'; } + <%_ if (enableTranslation) { _%> + this.translateService.get(pageTitle).subscribe(title => this.titleService.setTitle(title)); + <%_ } else { _%> + this.titleService.setTitle(pageTitle); + <%_ } _%> } - <%_ } _%> } diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs index 1f199cef..22091465 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/active-menu.directive.ts.ejs @@ -25,11 +25,11 @@ import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; selector: '[<%=jhiPrefix%>ActiveMenu]' }) export class ActiveMenuDirective implements OnInit { - @Input() <%=jhiPrefix%>ActiveMenu: string; + @Input() <%=jhiPrefix%>ActiveMenu?: string; constructor(private el: ElementRef, private renderer: Renderer<% if (enableTranslation) { %>, private translateService: TranslateService<% } %>) {} - ngOnInit() { + ngOnInit(): void { <%_ if (enableTranslation) { _%> this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { this.updateActiveFlag(event.lang); @@ -37,7 +37,7 @@ export class ActiveMenuDirective implements OnInit { this.updateActiveFlag(this.translateService.currentLang);<% } %> } - updateActiveFlag(selectedLanguage) { + updateActiveFlag(selectedLanguage: string): void { if (this.<%=jhiPrefix%>ActiveMenu === selectedLanguage) { this.renderer.setElementClass(this.el.nativeElement, 'active', true); } else { diff --git a/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs b/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs index 27dfef73..aa48c8f4 100644 --- a/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs +++ b/generators/client/templates/angular/src/main/webapp/app/layouts/navbar/navbar.component.html.ejs @@ -35,7 +35,7 @@ - -
  • HasAnyAuthority="'ROLE_ADMIN'" ngbDropdown class="nav-item dropdown pointer" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}"> +
  • HasAnyAuthority="'ROLE_ADMIN'" ngbDropdown class="nav-item dropdown pointer" display="dynamic" routerLinkActive="active" [routerLinkActiveOptions]="{exact: true}"> @@ -74,31 +74,31 @@ <%_ } _%> <%_ if (websocket === 'spring-websocket') { _%>
  • - + User tracker
  • <%_ } _%>
  • - + Metrics
  • - + Health
  • - + Configuration
  • - <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%> + <%_ if ((databaseType !== 'no' || authenticationType === 'uaa') && databaseType !== 'cassandra') { _%>
  • @@ -130,7 +130,7 @@
  • <%_ if (enableTranslation) { _%> - <%_ } _%> -
    - {{<%= relationshipFieldName %>.<%= otherEntityField %>}}{{last ? '' : ', '}} + {{<%= relationshipFieldName %>.<%= otherEntityField %>}}{{last ? '' : ', '}}
    - - - - - - +
    DateUserStateExtra data
    + + + + + + + + + + + + @@ -44,12 +51,13 @@

    Filter by date

    Date User State Extra data
    DateUserStateExtra data
    -
    + +
    - +
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.ts index 4405e95b..dfd315c1 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.component.ts @@ -1,11 +1,9 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; -import { HttpResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { HttpResponse, HttpHeaders } from '@angular/common/http'; import { DatePipe } from '@angular/common'; import { ActivatedRoute, Router } from '@angular/router'; -import { JhiParseLinks } from 'ng-jhipster'; -import { MessageService } from 'primeng/api'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { Audit } from './audit.model'; import { AuditsService } from './audits.service'; @@ -13,69 +11,79 @@ import { AuditsService } from './audits.service'; selector: 'jhi-audit', templateUrl: './audits.component.html' }) -export class AuditsComponent implements OnInit, OnDestroy { - audits: Audit[]; - fromDate: string; - itemsPerPage: any; - links: any; - page: number; - routeData: any; - predicate: any; - previousPage: any; - reverse: boolean; - toDate: string; - totalItems: number; +export class AuditsComponent implements OnInit { + audits?: Audit[]; + fromDate = ''; + itemsPerPage = ITEMS_PER_PAGE; + page!: number; + predicate!: string; + previousPage!: number; + ascending!: boolean; + toDate = ''; + totalItems = 0; + + private dateFormat = 'yyyy-MM-dd'; constructor( private auditsService: AuditsService, - private messageService: MessageService, - private parseLinks: JhiParseLinks, private activatedRoute: ActivatedRoute, private datePipe: DatePipe, private router: Router - ) { - this.itemsPerPage = ITEMS_PER_PAGE; - this.routeData = this.activatedRoute.data.subscribe(data => { + ) {} + + ngOnInit(): void { + this.toDate = this.today(); + this.fromDate = this.previousMonth(); + this.activatedRoute.data.subscribe(data => { this.page = data['pagingParams'].page; this.previousPage = data['pagingParams'].page; - this.reverse = data['pagingParams'].ascending; + this.ascending = data['pagingParams'].ascending; this.predicate = data['pagingParams'].predicate; + this.loadData(); }); } - ngOnInit() { - this.today(); - this.previousMonth(); - this.loadAll(); + loadPage(page: number): void { + if (page !== this.previousPage) { + this.previousPage = page; + this.transition(); + } } - ngOnDestroy() { - this.routeData.unsubscribe(); + canLoad(): boolean { + return this.fromDate !== '' && this.toDate !== ''; } - previousMonth() { - const dateFormat = 'yyyy-MM-dd'; - let fromDate: Date = new Date(); + transition(): void { + if (this.canLoad()) { + this.router.navigate(['/admin/audits'], { + queryParams: { + page: this.page, + sort: this.predicate + ',' + (this.ascending ? 'asc' : 'desc') + } + }); + this.loadData(); + } + } - if (fromDate.getMonth() === 0) { - fromDate = new Date(fromDate.getFullYear() - 1, 11, fromDate.getDate()); + private previousMonth(): string { + let date = new Date(); + if (date.getMonth() === 0) { + date = new Date(date.getFullYear() - 1, 11, date.getDate()); } else { - fromDate = new Date(fromDate.getFullYear(), fromDate.getMonth() - 1, fromDate.getDate()); + date = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate()); } - - this.fromDate = this.datePipe.transform(fromDate, dateFormat); + return this.datePipe.transform(date, this.dateFormat)!; } - today() { - const dateFormat = 'yyyy-MM-dd'; + private today(): string { // Today + 1 day - needed if the current day must be included - const today: Date = new Date(); - today.setDate(today.getDate() + 1); - const date = new Date(today.getFullYear(), today.getMonth(), today.getDate()); - this.toDate = this.datePipe.transform(date, dateFormat); + const date = new Date(); + date.setDate(date.getDate() + 1); + return this.datePipe.transform(date, this.dateFormat)!; } - loadAll() { + private loadData(): void { this.auditsService .query({ page: this.page - 1, @@ -84,41 +92,23 @@ export class AuditsComponent implements OnInit, OnDestroy { fromDate: this.fromDate, toDate: this.toDate }) - .subscribe((res: HttpResponse) => this.onSuccess(res.body, res.headers), (res: HttpResponse) => this.onError(res.body)); + .subscribe((res: HttpResponse) => this.onSuccess(res.body, res.headers)); } - sort() { - const result = [this.predicate + ',' + (this.reverse ? 'asc' : 'desc')]; + private sort(): string[] { + const result = [this.predicate + ',' + (this.ascending ? 'asc' : 'desc')]; if (this.predicate !== 'id') { result.push('id'); } return result; } - loadPage(page: number) { - if (page !== this.previousPage) { - this.previousPage = page; - this.transition(); + private onSuccess(audits: Audit[] | null, headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); + if (audits === null) { + this.audits = []; + } else { + this.audits = audits; } } - - transition() { - this.router.navigate(['/admin/audits'], { - queryParams: { - page: this.page, - sort: this.predicate + ',' + (this.reverse ? 'asc' : 'desc') - } - }); - this.loadAll(); - } - - private onSuccess(data, headers) { - this.links = this.parseLinks.parse(headers.get('link')); - this.totalItems = headers.get('X-Total-Count'); - this.audits = data; - } - - private onError(error) { - this.messageService.add({ severity: 'error', summary: error.error, detail: error.message }); - } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.module.ts new file mode 100644 index 00000000..093862a3 --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { AuditsComponent } from './audits.component'; + +import { auditsRoute } from './audits.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([auditsRoute])], + declarations: [AuditsComponent] +}) +export class AuditsModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.route.ts index 59a1d4ce..50576f50 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.route.ts @@ -1,11 +1,10 @@ -import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Route } from '@angular/router'; -import { JhiPaginationUtil, JhiResolvePagingParams } from 'ng-jhipster'; +import { Route } from '@angular/router'; +import { JhiResolvePagingParams } from 'ng-jhipster'; import { AuditsComponent } from './audits.component'; export const auditsRoute: Route = { - path: 'audits', + path: '', component: AuditsComponent, resolve: { pagingParams: JhiResolvePagingParams diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.service.ts index 6b4f6afb..00919ca5 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/audits/audits.service.ts @@ -2,18 +2,25 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpParams, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; -import { createRequestOption } from 'app/shared'; +import { createRequestOption } from 'app/shared/util/request-util'; import { SERVER_API_URL } from 'app/app.constants'; import { Audit } from './audit.model'; +// TODO switch to primeng and check what to do with extends Pagination removed +export interface AuditsQuery { + page: number; + size: number; + sort: string[]; + fromDate: string; + toDate: string; +} + @Injectable({ providedIn: 'root' }) export class AuditsService { constructor(private http: HttpClient) {} - query(req: any): Observable> { + query(req: AuditsQuery): Observable> { const params: HttpParams = createRequestOption(req); - params.set('fromDate', req.fromDate); - params.set('toDate', req.toDate); const requestURL = SERVER_API_URL + 'management/audits'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.html index c95775a0..2440ce69 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.html @@ -1,43 +1,43 @@ -
    +

    Configuration

    - Filter (by prefix) -

    Spring configuration

    - + Filter (by prefix) +

    Spring configuration

    +
    - - - + + + - - + +
    PrefixProperties
    Prefix Properties
    {{entry.prefix}}
    {{ bean.prefix }} -
    -
    {{key}}
    +
    +
    {{ property.key }}
    - {{entry.properties[key] | json}} + {{ property.value | json }}
    -
    -

    {{key}}

    - +
    +

    {{ propertySource.name }}

    +
    - - + + - - + + diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.ts index a9167589..679e71ab 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.component.ts @@ -1,43 +1,32 @@ import { Component, OnInit } from '@angular/core'; -import { JhiConfigurationService } from './configuration.service'; +import { ConfigurationService, Bean, PropertySource } from './configuration.service'; @Component({ selector: 'jhi-configuration', templateUrl: './configuration.component.html' }) -export class JhiConfigurationComponent implements OnInit { - allConfiguration: any = null; - configuration: any = null; - configKeys: any[]; - filter: string; - orderProp: string; - reverse: boolean; +export class ConfigurationComponent implements OnInit { + allBeans!: Bean[]; + beans: Bean[] = []; + beansFilter = ''; + beansAscending = true; + propertySources: PropertySource[] = []; - constructor(private configurationService: JhiConfigurationService) { - this.configKeys = []; - this.filter = ''; - this.orderProp = 'prefix'; - this.reverse = false; - } - - keys(dict): Array { - return dict === undefined ? [] : Object.keys(dict); - } - - ngOnInit() { - this.configurationService.get().subscribe(configuration => { - this.configuration = configuration; + constructor(private configurationService: ConfigurationService) {} - for (const config of configuration) { - if (config.properties !== undefined) { - this.configKeys.push(Object.keys(config.properties)); - } - } + ngOnInit(): void { + this.configurationService.getBeans().subscribe(beans => { + this.allBeans = beans; + this.filterAndSortBeans(); }); - this.configurationService.getEnv().subscribe(configuration => { - this.allConfiguration = configuration; - }); + this.configurationService.getPropertySources().subscribe(propertySources => (this.propertySources = propertySources)); + } + + filterAndSortBeans(): void { + this.beans = this.allBeans + .filter(bean => !this.beansFilter || bean.prefix.toLowerCase().includes(this.beansFilter.toLowerCase())) + .sort((a, b) => (a.prefix < b.prefix ? (this.beansAscending ? -1 : 1) : this.beansAscending ? 1 : -1)); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.module.ts new file mode 100644 index 00000000..0c2eb172 --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { ConfigurationComponent } from './configuration.component'; + +import { configurationRoute } from './configuration.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([configurationRoute])], + declarations: [ConfigurationComponent] +}) +export class ConfigurationModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.route.ts index 051319aa..17238c93 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.route.ts @@ -1,10 +1,10 @@ import { Route } from '@angular/router'; -import { JhiConfigurationComponent } from './configuration.component'; +import { ConfigurationComponent } from './configuration.component'; export const configurationRoute: Route = { - path: 'jhi-configuration', - component: JhiConfigurationComponent, + path: '', + component: ConfigurationComponent, data: { pageTitle: 'configuration.title' } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.service.ts index b03a6989..69ea43a0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/configuration/configuration.service.ts @@ -1,67 +1,68 @@ import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { map } from 'rxjs/operators'; import { SERVER_API_URL } from 'app/app.constants'; -@Injectable({ providedIn: 'root' }) -export class JhiConfigurationService { - constructor(private http: HttpClient) {} +export interface ConfigProps { + contexts: Contexts; +} - get(): Observable { - return this.http.get(SERVER_API_URL + 'management/configprops', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any[] = []; - const propertiesObject = this.getConfigPropertiesObjects(res.body); - for (const key in propertiesObject) { - if (propertiesObject.hasOwnProperty(key)) { - properties.push(propertiesObject[key]); - } - } +export interface Contexts { + [key: string]: Context; +} - return properties.sort((propertyA, propertyB) => { - return propertyA.prefix === propertyB.prefix ? 0 : propertyA.prefix < propertyB.prefix ? -1 : 1; - }); - }) - ); - } +export interface Context { + beans: Beans; + parentId?: any; +} - getConfigPropertiesObjects(res: Object) { - // This code is for Spring Boot 2 - if (res['contexts'] !== undefined) { - for (const key in res['contexts']) { - // If the key is not bootstrap, it will be the ApplicationContext Id - // For default app, it is baseName - // For microservice, it is baseName-1 - if (!key.startsWith('bootstrap')) { - return res['contexts'][key]['beans']; - } - } - } - // by default, use the default ApplicationContext Id - return res['contexts']['primengtest']['beans']; - } +export interface Beans { + [key: string]: Bean; +} - getEnv(): Observable { - return this.http.get(SERVER_API_URL + 'management/env', { observe: 'response' }).pipe( - map((res: HttpResponse) => { - const properties: any = {}; - const propertySources = res.body['propertySources']; +export interface Bean { + prefix: string; + properties: any; +} + +export interface Env { + activeProfiles?: string[]; + propertySources: PropertySource[]; +} - for (const propertyObject of propertySources) { - const name = propertyObject['name']; - const detailProperties = propertyObject['properties']; - const vals: any[] = []; - for (const keyDetail in detailProperties) { - if (detailProperties.hasOwnProperty(keyDetail)) { - vals.push({ key: keyDetail, val: detailProperties[keyDetail]['value'] }); - } - } - properties[name] = vals; - } - return properties; - }) +export interface PropertySource { + name: string; + properties: Properties; +} + +export interface Properties { + [key: string]: Property; +} + +export interface Property { + value: string; + origin?: string; +} + +@Injectable({ providedIn: 'root' }) +export class ConfigurationService { + constructor(private http: HttpClient) {} + + getBeans(): Observable { + return this.http.get(SERVER_API_URL + 'management/configprops').pipe( + map(configProps => + Object.values( + Object.values(configProps.contexts) + .map(context => context.beans) + .reduce((allBeans: Beans, contextBeans: Beans) => ({ ...allBeans, ...contextBeans })) + ) + ) ); } + + getPropertySources(): Observable { + return this.http.get(SERVER_API_URL + 'management/env').pipe(map(env => env.propertySources)); + } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.component.ts index ed9634db..4e4b1bfa 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.component.ts @@ -4,6 +4,6 @@ import { Component } from '@angular/core'; selector: 'jhi-docs', templateUrl: './docs.component.html' }) -export class JhiDocsComponent { +export class DocsComponent { constructor() {} } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.module.ts new file mode 100644 index 00000000..327cb5ab --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { DocsComponent } from './docs.component'; + +import { docsRoute } from './docs.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([docsRoute])], + declarations: [DocsComponent] +}) +export class DocsModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.route.ts index 4dd5eba4..b2aead9d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/docs/docs.route.ts @@ -1,10 +1,10 @@ import { Route } from '@angular/router'; -import { JhiDocsComponent } from './docs.component'; +import { DocsComponent } from './docs.component'; export const docsRoute: Route = { - path: 'docs', - component: JhiDocsComponent, + path: '', + component: DocsComponent, data: { pageTitle: 'global.menu.admin.apidocs' } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.html index 4f698460..fd238935 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.html @@ -1,36 +1,31 @@
    PropertyValuePropertyValue
    {{item.key}}
    {{ property.key }} - {{item.val}} + {{ property.value.value }}
    +
    - - + + - - - + + +
    NameValueNameValue
    {{entry.key}}{{readableValue(entry.value)}}
    {{ healthDetail.key }}{{ readableValue(healthDetail.value) }}
    -
    -

    Error

    -
    {{currentHealth.error}}
    -
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.ts index 81e0be86..54f360f9 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health-modal.component.ts @@ -1,27 +1,19 @@ import { Component } from '@angular/core'; import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiHealthService } from './health.service'; +import { HealthKey, HealthDetails } from './health.service'; @Component({ selector: 'jhi-health-modal', templateUrl: './health-modal.component.html' }) -export class JhiHealthModalComponent { - currentHealth: any; +export class HealthModalComponent { + health?: { key: HealthKey; value: HealthDetails }; - constructor(private healthService: JhiHealthService, public activeModal: NgbActiveModal) {} + constructor(public activeModal: NgbActiveModal) {} - baseName(name) { - return this.healthService.getBaseName(name); - } - - subSystemName(name) { - return this.healthService.getSubSystemName(name); - } - - readableValue(value: number) { - if (this.currentHealth.name === 'diskSpace') { + readableValue(value: any): string { + if (this.health && this.health.key === 'diskSpace') { // Should display storage space in an human readable unit const val = value / 1073741824; if (val > 1) { @@ -38,4 +30,8 @@ export class JhiHealthModalComponent { return value.toString(); } } + + dismiss(): void { + this.activeModal.dismiss(); + } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.html index c17bde9a..b7f191ad 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.html @@ -6,24 +6,24 @@

    - +
    - - - + + + - - - + + + diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.ts index 1c14fb07..d33b6322 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.component.ts @@ -1,28 +1,24 @@ import { Component, OnInit } from '@angular/core'; +import { HttpErrorResponse } from '@angular/common/http'; import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { JhiHealthService } from './health.service'; -import { JhiHealthModalComponent } from './health-modal.component'; +import { HealthService, HealthStatus, Health, HealthKey, HealthDetails } from './health.service'; +import { HealthModalComponent } from './health-modal.component'; @Component({ selector: 'jhi-health', templateUrl: './health.component.html' }) -export class JhiHealthCheckComponent implements OnInit { - healthData: any; - updatingHealth: boolean; +export class HealthComponent implements OnInit { + health?: Health; - constructor(private modalService: NgbModal, private healthService: JhiHealthService) {} + constructor(private modalService: NgbModal, private healthService: HealthService) {} - ngOnInit() { + ngOnInit(): void { this.refresh(); } - baseName(name: string) { - return this.healthService.getBaseName(name); - } - - getBadgeClass(statusState) { + getBadgeClass(statusState: HealthStatus): string { if (statusState === 'UP') { return 'badge-success'; } else { @@ -30,37 +26,19 @@ export class JhiHealthCheckComponent implements OnInit { } } - refresh() { - this.updatingHealth = true; - + refresh(): void { this.healthService.checkHealth().subscribe( - health => { - this.healthData = this.healthService.transformHealthData(health); - this.updatingHealth = false; - }, - error => { + health => (this.health = health), + (error: HttpErrorResponse) => { if (error.status === 503) { - this.healthData = this.healthService.transformHealthData(error.error); - this.updatingHealth = false; + this.health = error.error; } } ); } - showHealth(health: any) { - const modalRef = this.modalService.open(JhiHealthModalComponent); - modalRef.componentInstance.currentHealth = health; - modalRef.result.then( - result => { - // Left blank intentionally, nothing to do here - }, - reason => { - // Left blank intentionally, nothing to do here - } - ); - } - - subSystemName(name: string) { - return this.healthService.getSubSystemName(name); + showHealth(health: { key: HealthKey; value: HealthDetails }): void { + const modalRef = this.modalService.open(HealthModalComponent); + modalRef.componentInstance.health = health; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.module.ts new file mode 100644 index 00000000..04ec4145 --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { HealthComponent } from './health.component'; +import { HealthModalComponent } from './health-modal.component'; + +import { healthRoute } from './health.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([healthRoute])], + declarations: [HealthComponent, HealthModalComponent], + entryComponents: [HealthModalComponent] +}) +export class HealthModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.route.ts index 8578f95a..1055dcc0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.route.ts @@ -1,10 +1,10 @@ import { Route } from '@angular/router'; -import { JhiHealthCheckComponent } from './health.component'; +import { HealthComponent } from './health.component'; export const healthRoute: Route = { - path: 'jhi-health', - component: JhiHealthCheckComponent, + path: '', + component: HealthComponent, data: { pageTitle: 'health.title' } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.service.ts index a00cad7d..17bfc4a4 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/health/health.service.ts @@ -4,130 +4,27 @@ import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; -@Injectable({ providedIn: 'root' }) -export class JhiHealthService { - separator: string; - - constructor(private http: HttpClient) { - this.separator = '.'; - } - - checkHealth(): Observable { - return this.http.get(SERVER_API_URL + 'management/health'); - } - - transformHealthData(data): any { - const response = []; - this.flattenHealthData(response, null, data.details); - return response; - } - - getBaseName(name): string { - if (name) { - const split = name.split('.'); - return split[0]; - } - } - - getSubSystemName(name): string { - if (name) { - const split = name.split('.'); - split.splice(0, 1); - const remainder = split.join('.'); - return remainder ? ' - ' + remainder : ''; - } - } - - /* private methods */ - private addHealthObject(result, isLeaf, healthObject, name): any { - const healthData: any = { - name - }; +export type HealthStatus = 'UP' | 'DOWN' | 'UNKNOWN' | 'OUT_OF_SERVICE'; - const details = {}; - let hasDetails = false; +export type HealthKey = 'diskSpace' | 'mail' | 'db'; - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (key === 'status' || key === 'error') { - healthData[key] = value; - } else { - if (!this.isHealthObject(value)) { - details[key] = value; - hasDetails = true; - } - } - } - } - - // Add the details - if (hasDetails) { - healthData.details = details; - } - - // Only add nodes if they provide additional information - if (isLeaf || hasDetails || healthData.error) { - result.push(healthData); - } - return healthData; - } - - private flattenHealthData(result, path, data): any { - for (const key in data) { - if (data.hasOwnProperty(key)) { - const value = data[key]; - if (this.isHealthObject(value)) { - if (this.hasSubSystem(value)) { - this.addHealthObject(result, false, value, this.getModuleName(path, key)); - this.flattenHealthData(result, this.getModuleName(path, key), value); - } else { - this.addHealthObject(result, true, value, this.getModuleName(path, key)); - } - } - } - } - return result; - } - - private getModuleName(path, name): string { - let result; - if (path && name) { - result = path + this.separator + name; - } else if (path) { - result = path; - } else if (name) { - result = name; - } else { - result = ''; - } - return result; - } - - private hasSubSystem(healthObject): boolean { - let result = false; +export interface Health { + status: HealthStatus; + details: { + [key in HealthKey]?: HealthDetails; + }; +} - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - const value = healthObject[key]; - if (value && value.status) { - result = true; - } - } - } - return result; - } +export interface HealthDetails { + status: HealthStatus; + details: any; +} - private isHealthObject(healthObject): boolean { - let result = false; +@Injectable({ providedIn: 'root' }) +export class HealthService { + constructor(private http: HttpClient) {} - for (const key in healthObject) { - if (healthObject.hasOwnProperty(key)) { - if (key === 'status') { - result = true; - } - } - } - return result; + checkHealth(): Observable { + return this.http.get(SERVER_API_URL + 'management/health'); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/index.ts deleted file mode 100644 index e56b9a4e..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export * from './audits/audits.component'; -export * from './audits/audits.service'; -export * from './audits/audits.route'; -export * from './audits/audit.model'; -export * from './audits/audit-data.model'; -export * from './configuration/configuration.component'; -export * from './configuration/configuration.service'; -export * from './configuration/configuration.route'; -export * from './docs/docs.component'; -export * from './docs/docs.route'; -export * from './health/health.component'; -export * from './health/health-modal.component'; -export * from './health/health.service'; -export * from './health/health.route'; -export * from './logs/logs.component'; -export * from './logs/logs.service'; -export * from './logs/logs.route'; -export * from './logs/log.model'; -export * from './metrics/metrics.component'; -export * from './metrics/metrics.service'; -export * from './metrics/metrics.route'; -export * from './user-management/user-management-update.component'; -export * from './user-management/user-management-detail.component'; -export * from './user-management/user-management.component'; -export * from './user-management/user-management.route'; -export * from './admin.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/log.model.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/log.model.ts index 4d7dbd76..83f2e154 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/log.model.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/log.model.ts @@ -1,3 +1,15 @@ +export type Level = 'TRACE' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'OFF'; + +export interface Logger { + configuredLevel: Level | null; + effectiveLevel: Level; +} + +export interface LoggersResponse { + levels: Level[]; + loggers: { [key: string]: Logger }; +} + export class Log { - constructor(public name: string, public level: string) {} + constructor(public name: string, public level: Level) {} } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.html index f7d8f363..6d292adc 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.html @@ -5,11 +5,11 @@

    Logs

    Filter -
    Service NameStatusDetailsService NameStatusDetails
    {{'health.indicator.' + baseName(health.name) | translate}} {{subSystemName(health.name)}}
    {{'health.indicator.' + componentHealth.key | translate}} - - {{health.status}} + + {{ componentHealth.value.status }} - +
    +
    - - + + diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.ts index f9c635eb..13b7102c 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; -import { Log } from './log.model'; +import { Log, LoggersResponse, Logger, Level } from './log.model'; import { LogsService } from './logs.service'; @Component({ @@ -8,28 +8,27 @@ import { LogsService } from './logs.service'; templateUrl: './logs.component.html' }) export class LogsComponent implements OnInit { - loggers: Log[]; - filter: string; - orderProp: string; - reverse: boolean; + loggers?: Log[]; + filter = ''; + orderProp = 'name'; + reverse = false; - constructor(private logsService: LogsService) { - this.filter = ''; - this.orderProp = 'name'; - this.reverse = false; - } + constructor(private logsService: LogsService) {} - ngOnInit() { - this.logsService.findAll().subscribe(response => this.extractLoggers(response)); + ngOnInit(): void { + this.findAndExtractLoggers(); } - changeLevel(name: string, level: string) { - this.logsService.changeLevel(name, level).subscribe(() => { - this.logsService.findAll().subscribe(response => this.extractLoggers(response)); - }); + changeLevel(name: string, level: Level): void { + this.logsService.changeLevel(name, level).subscribe(() => this.findAndExtractLoggers()); } - private extractLoggers(response) { - this.loggers = Object.entries(response.body.loggers).map(e => new Log(e[0], e[1]['effectiveLevel'])); + private findAndExtractLoggers(): void { + this.logsService + .findAll() + .subscribe( + (response: LoggersResponse) => + (this.loggers = Object.entries(response.loggers).map((logger: [string, Logger]) => new Log(logger[0], logger[1].effectiveLevel))) + ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.module.ts new file mode 100644 index 00000000..6fc8456b --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { LogsComponent } from './logs.component'; + +import { logsRoute } from './logs.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([logsRoute])], + declarations: [LogsComponent] +}) +export class LogsModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.route.ts index 100b22a9..d1cf0241 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.route.ts @@ -3,7 +3,7 @@ import { Route } from '@angular/router'; import { LogsComponent } from './logs.component'; export const logsRoute: Route = { - path: 'logs', + path: '', component: LogsComponent, data: { pageTitle: 'logs.title' diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.service.ts index 6c6644d2..dc9956de 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/logs/logs.service.ts @@ -1,18 +1,19 @@ import { Injectable } from '@angular/core'; -import { HttpClient, HttpResponse } from '@angular/common/http'; +import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +import { LoggersResponse, Level } from './log.model'; @Injectable({ providedIn: 'root' }) export class LogsService { constructor(private http: HttpClient) {} - changeLevel(name: string, configuredLevel: string): Observable> { - return this.http.post(SERVER_API_URL + 'management/loggers/' + name, { configuredLevel }, { observe: 'response' }); + changeLevel(name: string, configuredLevel: Level): Observable<{}> { + return this.http.post(SERVER_API_URL + 'management/loggers/' + name, { configuredLevel }); } - findAll(): Observable> { - return this.http.get(SERVER_API_URL + 'management/loggers', { observe: 'response' }); + findAll(): Observable { + return this.http.get(SERVER_API_URL + 'management/loggers'); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.html index deb1c1b5..f45784c6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.html @@ -7,13 +7,13 @@

    JVM Metrics

    -
    +
    - + JVM Metrics
    -
    +

    Garbage collector statistics

    @@ -29,28 +29,26 @@

    Garbage collector statistics

    Updating...
    -
    - - + + -
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.ts index 8e860a6c..130e65d6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.component.ts @@ -1,42 +1,47 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; +import { Component, OnInit, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core'; +import { flatMap } from 'rxjs/operators'; -import { JhiMetricsService } from './metrics.service'; +import { MetricsService, Metrics, MetricsKey, ThreadDump, Thread } from './metrics.service'; @Component({ selector: 'jhi-metrics', - templateUrl: './metrics.component.html' + templateUrl: './metrics.component.html', + changeDetection: ChangeDetectionStrategy.OnPush }) -export class JhiMetricsMonitoringComponent implements OnInit { - metrics: any = {}; - threadData: any = {}; +export class MetricsComponent implements OnInit { + metrics?: Metrics; + threads?: Thread[]; updatingMetrics = true; - JCACHE_KEY: string; - constructor(private modalService: NgbModal, private metricsService: JhiMetricsService) { - this.JCACHE_KEY = 'jcache.statistics'; - } + constructor(private metricsService: MetricsService, private changeDetector: ChangeDetectorRef) {} - ngOnInit() { + ngOnInit(): void { this.refresh(); } - refresh() { + refresh(): void { this.updatingMetrics = true; - this.metricsService.getMetrics().subscribe(metrics => { - this.metrics = metrics; - this.metricsService.threadDump().subscribe(data => { - this.threadData = data.threads; - this.updatingMetrics = false; - }); - }); + this.metricsService + .getMetrics() + .pipe( + flatMap( + () => this.metricsService.threadDump(), + (metrics: Metrics, threadDump: ThreadDump) => { + this.metrics = metrics; + this.threads = threadDump.threads; + this.updatingMetrics = false; + this.changeDetector.detectChanges(); + } + ) + ) + .subscribe(); } - isObjectExisting(metrics: any, key: string) { - return metrics && metrics[key]; + metricsKeyExists(key: MetricsKey): boolean { + return this.metrics && this.metrics[key]; } - isObjectExistingAndNotEmpty(metrics: any, key: string) { - return this.isObjectExisting(metrics, key) && JSON.stringify(metrics[key]) !== '{}'; + metricsKeyExistsAndObjectNotEmpty(key: MetricsKey): boolean { + return this.metrics && this.metrics[key] && JSON.stringify(this.metrics[key]) !== '{}'; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.module.ts new file mode 100644 index 00000000..d26f43c5 --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.module.ts @@ -0,0 +1,13 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; + +import { MetricsComponent } from './metrics.component'; + +import { metricsRoute } from './metrics.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild([metricsRoute])], + declarations: [MetricsComponent] +}) +export class MetricsModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.route.ts index f59779ec..f85fd61d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.route.ts @@ -1,10 +1,10 @@ import { Route } from '@angular/router'; -import { JhiMetricsMonitoringComponent } from './metrics.component'; +import { MetricsComponent } from './metrics.component'; export const metricsRoute: Route = { - path: 'jhi-metrics', - component: JhiMetricsMonitoringComponent, + path: '', + component: MetricsComponent, data: { pageTitle: 'metrics.title' } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.service.ts index 93219b27..a8d0c99a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/metrics/metrics.service.ts @@ -4,15 +4,20 @@ import { Observable } from 'rxjs'; import { SERVER_API_URL } from 'app/app.constants'; +export type MetricsKey = 'jvm' | 'http.server.requests' | 'cache' | 'services' | 'databases' | 'garbageCollector' | 'processMetrics'; +export type Metrics = { [key in MetricsKey]: any }; +export type Thread = any; +export type ThreadDump = { threads: Thread[] }; + @Injectable({ providedIn: 'root' }) -export class JhiMetricsService { +export class MetricsService { constructor(private http: HttpClient) {} - getMetrics(): Observable { - return this.http.get(SERVER_API_URL + 'management/jhimetrics'); + getMetrics(): Observable { + return this.http.get(SERVER_API_URL + 'management/jhimetrics'); } - threadDump(): Observable { - return this.http.get(SERVER_API_URL + 'management/threaddump'); + threadDump(): Observable { + return this.http.get(SERVER_API_URL + 'management/threaddump'); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-detail.component.ts index 473951da..461d395f 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-detail.component.ts @@ -1,20 +1,20 @@ -import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { User } from 'app/core'; +import { User } from 'app/core/user/user.model'; @Component({ selector: 'jhi-user-mgmt-detail', templateUrl: './user-management-detail.component.html' }) -export class UserMgmtDetailComponent implements OnInit { - user: User; +export class UserManagementDetailComponent implements OnInit { + user: User | null = null; constructor(private route: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; + this.user = user; }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.html index a132573b..250f4e4f 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.html @@ -4,7 +4,7 @@

    Create or edit a User

    -
    +
    @@ -15,20 +15,20 @@

    -
    +
    + *ngIf="editForm.get('login')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. This field cannot be longer than 50 characters. + *ngIf="editForm.get('login')?.errors?.pattern" jhiTranslate="entity.validation.patternLogin"> This field can only contain letters, digits and e-mail addresses.
    @@ -38,9 +38,9 @@

    -
    +
    This field cannot be longer than 50 characters. @@ -51,9 +51,9 @@

    -
    +
    This field cannot be longer than 50 characters. @@ -63,33 +63,34 @@

    -
    +
    + *ngIf="editForm.get('email')?.errors?.required" jhiTranslate="entity.validation.required"> This field is required. This field cannot be longer than 100 characters. This field is required to be at least 5 characters. + *ngIf="editForm.get('email')?.errors?.email" jhiTranslate="global.messages.validate.email.invalid"> Your email is invalid.
    @@ -107,7 +108,7 @@

    -
    +
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.ts index 81d7e87f..6a7ec5da 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management-update.component.ts @@ -1,51 +1,67 @@ import { Component, OnInit } from '@angular/core'; -import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { ActivatedRoute, Router } from '@angular/router'; +import { FormBuilder, Validators } from '@angular/forms'; +import { ActivatedRoute } from '@angular/router'; -import { JhiLanguageHelper, User, UserService } from 'app/core'; +import { LANGUAGES } from 'app/core/language/language.constants'; +import { User } from 'app/core/user/user.model'; +import { UserService } from 'app/core/user/user.service'; @Component({ selector: 'jhi-user-mgmt-update', templateUrl: './user-management-update.component.html' }) -export class UserMgmtUpdateComponent implements OnInit { - user: User; - languages: any[]; - authorities: any[]; - isSaving: boolean; +export class UserManagementUpdateComponent implements OnInit { + user!: User; + languages = LANGUAGES; + authorities: string[] = []; + isSaving = false; editForm = this.fb.group({ - id: [null], + id: [], login: ['', [Validators.required, Validators.minLength(1), Validators.maxLength(50), Validators.pattern('^[_.@A-Za-z0-9-]*')]], firstName: ['', [Validators.maxLength(50)]], lastName: ['', [Validators.maxLength(50)]], email: ['', [Validators.minLength(5), Validators.maxLength(254), Validators.email]], - activated: [true], + activated: [], langKey: [], authorities: [] }); - constructor( - private languageHelper: JhiLanguageHelper, - private userService: UserService, - private route: ActivatedRoute, - private router: Router, - private fb: FormBuilder - ) {} + constructor(private userService: UserService, private route: ActivatedRoute, private fb: FormBuilder) {} - ngOnInit() { - this.isSaving = false; + ngOnInit(): void { this.route.data.subscribe(({ user }) => { - this.user = user.body ? user.body : user; - this.updateForm(this.user); + if (user) { + this.user = user; + if (this.user.id === undefined) { + this.user.activated = true; + } + this.updateForm(user); + } }); - this.authorities = []; this.userService.authorities().subscribe(authorities => { this.authorities = authorities; }); - this.languageHelper.getAll().then(languages => { - this.languages = languages; - }); + } + + previousState(): void { + window.history.back(); + } + + save(): void { + this.isSaving = true; + this.updateUser(this.user); + if (this.user.id !== undefined) { + this.userService.update(this.user).subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); + } else { + this.userService.create(this.user).subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); + } } private updateForm(user: User): void { @@ -61,36 +77,22 @@ export class UserMgmtUpdateComponent implements OnInit { }); } - previousState() { - window.history.back(); - } - - save() { - this.isSaving = true; - this.updateUser(this.user); - if (this.user.id !== null) { - this.userService.update(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } else { - this.userService.create(this.user).subscribe(response => this.onSaveSuccess(response), () => this.onSaveError()); - } - } - private updateUser(user: User): void { - user.login = this.editForm.get(['login']).value; - user.firstName = this.editForm.get(['firstName']).value; - user.lastName = this.editForm.get(['lastName']).value; - user.email = this.editForm.get(['email']).value; - user.activated = this.editForm.get(['activated']).value; - user.langKey = this.editForm.get(['langKey']).value; - user.authorities = this.editForm.get(['authorities']).value; + user.login = this.editForm.get(['login'])!.value; + user.firstName = this.editForm.get(['firstName'])!.value; + user.lastName = this.editForm.get(['lastName'])!.value; + user.email = this.editForm.get(['email'])!.value; + user.activated = this.editForm.get(['activated'])!.value; + user.langKey = this.editForm.get(['langKey'])!.value; + user.authorities = this.editForm.get(['authorities'])!.value; } - private onSaveSuccess(result) { + private onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - private onSaveError() { + private onSaveError(): void { this.isSaving = false; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.html index 5a4df829..0cee77c7 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.html @@ -11,12 +11,12 @@

    - - + + - + @@ -28,7 +28,7 @@

    + [disabled]="!currentAccount || currentAccount.login === user.login" [label]="'userManagement.activated' | translate">

    NameLevelNameLevel
    Login Email Lang KeyProfiles Lang KeyProfiles Created Date Last Modified By Last Modified Date
    {{user.langKey}} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.ts index c824ccec..3a015dd1 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.component.ts @@ -1,39 +1,41 @@ import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core'; -import { HttpErrorResponse, HttpHeaders, HttpResponse } from '@angular/common/http'; - +import { HttpResponse, HttpHeaders, HttpErrorResponse } from '@angular/common/http'; +import { Subscription } from 'rxjs'; +import { switchMap, tap, filter } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; import { JhiEventManager } from 'ng-jhipster'; import { ConfirmationService, LazyLoadEvent, MessageService } from 'primeng/api'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, lazyLoadEventToRouterQueryParams, fillTableFromQueryParams } from 'app/shared/util/request-util'; -import { UserService, AccountService, IUser } from 'app/core'; -import { Subscription } from 'rxjs'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; +import { UserService } from 'app/core/user/user.service'; +import { IUser } from 'app/core/user/user.model'; import { Table } from 'primeng/table'; import { TranslateService } from '@ngx-translate/core'; -import { switchMap, tap, filter } from 'rxjs/operators'; @Component({ selector: 'jhi-user-mgmt', templateUrl: './user-management.component.html' }) -export class UserMgmtComponent implements OnInit, OnDestroy { - currentAccount: any; - users: IUser[]; - eventSubscriber: Subscription; +export class UserManagementComponent implements OnInit, OnDestroy { + currentAccount: Account | null = null; + users: IUser[] | null = null; + eventSubscriber?: Subscription; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = {}; @ViewChild('userTable', { static: true }) - userTable: Table; + userTable!: Table; constructor( protected userService: UserService, @@ -49,8 +51,8 @@ export class UserMgmtComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { - this.accountService.identity().then(account => { + ngOnInit(): void { + this.accountService.identity().subscribe((account: Account | null) => { this.currentAccount = account; }); this.registerChangeInUsers(); @@ -63,7 +65,7 @@ export class UserMgmtComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateUsers(res.body, res.headers); + this.paginateUsers(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -73,20 +75,22 @@ export class UserMgmtComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/admin/user-management'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.userTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(login: string) { + delete(login: string): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('userManagement.delete.question', { login }), @@ -101,25 +105,25 @@ export class UserMgmtComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: IUser) { - return item.login; + trackId(index: number, item: IUser): string { + return item.login!; } - registerChangeInUsers() { + registerChangeInUsers(): void { this.eventSubscriber = this.eventManager.subscribe('userListModification', () => {}); } - setActive(user, isActivated) { + setActive(user: IUser, isActivated: boolean): void { user.activated = isActivated; this.userService.update(user).subscribe(); } - protected paginateUsers(data: IUser[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateUsers(data: IUser[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.users = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.module.ts new file mode 100644 index 00000000..f7fadeee --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; +import { RouterModule } from '@angular/router'; + +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { UserManagementComponent } from './user-management.component'; +import { UserManagementDetailComponent } from './user-management-detail.component'; +import { UserManagementUpdateComponent } from './user-management-update.component'; +import { userManagementRoute } from './user-management.route'; + +@NgModule({ + imports: [PrimengtestSharedModule, RouterModule.forChild(userManagementRoute)], + declarations: [UserManagementComponent, UserManagementDetailComponent, UserManagementUpdateComponent] +}) +export class UserManagementModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.route.ts index 6921c73e..43b8044b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/admin/user-management/user-management.route.ts @@ -1,68 +1,52 @@ import { Injectable } from '@angular/core'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes, CanActivate } from '@angular/router'; -import { HttpResponse } from '@angular/common/http'; +import { Resolve, ActivatedRouteSnapshot, Routes } from '@angular/router'; import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; -import { AccountService, User, UserService } from 'app/core'; -import { UserMgmtComponent } from './user-management.component'; -import { UserMgmtDetailComponent } from './user-management-detail.component'; -import { UserMgmtUpdateComponent } from './user-management-update.component'; +import { User, IUser } from 'app/core/user/user.model'; +import { UserService } from 'app/core/user/user.service'; +import { UserManagementComponent } from './user-management.component'; +import { UserManagementDetailComponent } from './user-management-detail.component'; +import { UserManagementUpdateComponent } from './user-management-update.component'; @Injectable({ providedIn: 'root' }) -export class UserResolve implements CanActivate { - constructor(private accountService: AccountService) {} - - canActivate() { - return this.accountService.identity().then(account => this.accountService.hasAnyAuthority(['ROLE_ADMIN'])); - } -} - -@Injectable({ providedIn: 'root' }) -export class UserMgmtResolve implements Resolve { +export class UserManagementResolve implements Resolve { constructor(private service: UserService) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.params['login'] ? route.params['login'] : null; if (id) { - return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((response: HttpResponse) => response.body) - ); + return this.service.find(id); } return of(null); } } -export const userMgmtRoute: Routes = [ +export const userManagementRoute: Routes = [ { - path: 'user-management', - component: UserMgmtComponent, + path: '', + component: UserManagementComponent, data: { pageTitle: 'userManagement.home.title' } }, { - path: 'user-management/:login/view', - component: UserMgmtDetailComponent, + path: ':login/view', + component: UserManagementDetailComponent, resolve: { - user: UserMgmtResolve - }, - data: { - pageTitle: 'userManagement.home.title' + user: UserManagementResolve } }, { - path: 'user-management/new', - component: UserMgmtUpdateComponent, + path: 'new', + component: UserManagementUpdateComponent, resolve: { - user: UserMgmtResolve + user: UserManagementResolve } }, { - path: 'user-management/:login/edit', - component: UserMgmtUpdateComponent, + path: ':login/edit', + component: UserManagementUpdateComponent, resolve: { - user: UserMgmtResolve + user: UserManagementResolve } } ]; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/app-routing.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/app-routing.module.ts index 9c18354c..61fa9ab0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/app-routing.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/app-routing.module.ts @@ -1,8 +1,11 @@ import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { errorRoute, navbarRoute } from './layouts'; +import { errorRoute } from './layouts/error/error.route'; +import { navbarRoute } from './layouts/navbar/navbar.route'; import { DEBUG_INFO_ENABLED } from 'app/app.constants'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; + const LAYOUT_ROUTES = [navbarRoute, ...errorRoute]; @NgModule({ @@ -11,7 +14,15 @@ const LAYOUT_ROUTES = [navbarRoute, ...errorRoute]; [ { path: 'admin', - loadChildren: './admin/admin.module#PrimengtestAdminModule' + data: { + authorities: ['ROLE_ADMIN'] + }, + canActivate: [UserRouteAccessService], + loadChildren: () => import('./admin/admin-routing.module').then(m => m.AdminRoutingModule) + }, + { + path: 'account', + loadChildren: () => import('./account/account.module').then(m => m.AccountModule) }, ...LAYOUT_ROUTES ], diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.constants.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.constants.ts index 9760a49a..4b34b657 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.constants.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.constants.ts @@ -3,6 +3,6 @@ // If you change the values in the webpack config files, you need to re run webpack to update the application export const VERSION = process.env.VERSION; -export const DEBUG_INFO_ENABLED: boolean = !!process.env.DEBUG_INFO_ENABLED; +export const DEBUG_INFO_ENABLED = Boolean(process.env.DEBUG_INFO_ENABLED); export const SERVER_API_URL = process.env.SERVER_API_URL; export const BUILD_TIMESTAMP = process.env.BUILD_TIMESTAMP; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.main.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.main.ts index c61f9d5c..c4d7be69 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.main.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.main.ts @@ -10,5 +10,6 @@ if (module['hot']) { platformBrowserDynamic() .bootstrapModule(PrimengtestAppModule, { preserveWhitespaces: true }) - .then(success => console.log(`Application started`)) + // eslint-disable-next-line no-console + .then(() => console.log('Application started')) .catch(err => console.error(err)); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.module.ts index 489a1622..3ed7acd4 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/app.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/app.module.ts @@ -1,74 +1,33 @@ -import './vendor.ts'; - import { NgModule } from '@angular/core'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserModule } from '@angular/platform-browser'; -import { HTTP_INTERCEPTORS } from '@angular/common/http'; -import { NgxWebstorageModule } from 'ngx-webstorage'; -import { NgJhipsterModule } from 'ng-jhipster'; -import { AuthInterceptor } from './blocks/interceptor/auth.interceptor'; -import { AuthExpiredInterceptor } from './blocks/interceptor/auth-expired.interceptor'; -import { ErrorHandlerInterceptor } from './blocks/interceptor/errorhandler.interceptor'; -import { NotificationInterceptor } from './blocks/interceptor/notification.interceptor'; -import { PrimengtestSharedModule, PrimeNGCommonModule } from 'app/shared'; -import { PrimengtestCoreModule } from 'app/core'; +import './vendor'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { PrimengtestCoreModule } from 'app/core/core.module'; import { PrimengtestAppRoutingModule } from './app-routing.module'; import { PrimengtestHomeModule } from './home/home.module'; -import { PrimengtestAccountModule } from './account/account.module'; import { PrimengtestEntityModule } from './entities/entity.module'; -import { ConfirmationService, MessageService } from 'primeng/api'; // jhipster-needle-angular-add-module-import JHipster will add new module here -import { JhiMainComponent, NavbarComponent, FooterComponent, PageRibbonComponent, ActiveMenuDirective, ErrorComponent } from './layouts'; +import { MainComponent } from './layouts/main/main.component'; +import { NavbarComponent } from './layouts/navbar/navbar.component'; +import { FooterComponent } from './layouts/footer/footer.component'; +import { PageRibbonComponent } from './layouts/profiles/page-ribbon.component'; +import { ActiveMenuDirective } from './layouts/navbar/active-menu.directive'; +import { ErrorComponent } from './layouts/error/error.component'; @NgModule({ imports: [ BrowserAnimationsModule, BrowserModule, - NgxWebstorageModule.forRoot({ prefix: 'jhi', separator: '-' }), - NgJhipsterModule.forRoot({ - // set below to true to make alerts look like toast - alertAsToast: false, - alertTimeout: 5000, - i18nEnabled: true, - defaultI18nLang: 'en' - }), - PrimengtestSharedModule.forRoot(), - PrimeNGCommonModule, + PrimengtestSharedModule, PrimengtestCoreModule, PrimengtestHomeModule, - PrimengtestAccountModule, // jhipster-needle-angular-add-module JHipster will add new module here PrimengtestEntityModule, PrimengtestAppRoutingModule ], - declarations: [JhiMainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, ActiveMenuDirective, FooterComponent], - providers: [ - { - provide: HTTP_INTERCEPTORS, - useClass: AuthInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: AuthExpiredInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: ErrorHandlerInterceptor, - multi: true - }, - { - provide: HTTP_INTERCEPTORS, - useClass: NotificationInterceptor, - multi: true - }, - ConfirmationService, - MessageService - ], - bootstrap: [JhiMainComponent] + declarations: [MainComponent, NavbarComponent, ErrorComponent, PageRibbonComponent, ActiveMenuDirective, FooterComponent], + bootstrap: [MainComponent] }) -export class PrimengtestAppModule { - constructor() {} -} +export class PrimengtestAppModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/config/prod.config.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/config/prod.config.ts index 857e4382..b1ccef11 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/config/prod.config.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/config/prod.config.ts @@ -1,7 +1,7 @@ import { enableProdMode } from '@angular/core'; import { DEBUG_INFO_ENABLED } from 'app/app.constants'; -export function ProdConfig() { +export function ProdConfig(): void { // disable debug data on prod profile to improve performance if (!DEBUG_INFO_ENABLED) { enableProdMode(); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts index b01a8629..a9fa62b6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth-expired.interceptor.ts @@ -2,24 +2,31 @@ import { Injectable } from '@angular/core'; import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent, HttpErrorResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; +import { Router } from '@angular/router'; + import { LoginService } from 'app/core/login/login.service'; +import { LoginModalService } from 'app/core/login/login-modal.service'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; @Injectable() export class AuthExpiredInterceptor implements HttpInterceptor { - constructor(private loginService: LoginService) {} + constructor( + private loginService: LoginService, + private loginModalService: LoginModalService, + private stateStorageService: StateStorageService, + private router: Router + ) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (err.status === 401) { - this.loginService.logout(); - } - } + tap(null, (err: HttpErrorResponse) => { + if (err.status === 401 && err.url && !err.url.includes('api/account')) { + this.stateStorageService.storeUrl(this.router.routerState.snapshot.url); + this.loginService.logout(); + this.router.navigate(['']); + this.loginModalService.open(); } - ) + }) ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts index c56ec9fd..3dd7aff0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/auth.interceptor.ts @@ -10,12 +10,12 @@ export class AuthInterceptor implements HttpInterceptor { constructor(private localStorage: LocalStorageService, private sessionStorage: SessionStorageService) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { - if (!request || !request.url || (/^http/.test(request.url) && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { + if (!request || !request.url || (request.url.startsWith('http') && !(SERVER_API_URL && request.url.startsWith(SERVER_API_URL)))) { return next.handle(request); } const token = this.localStorage.retrieve('authenticationToken') || this.sessionStorage.retrieve('authenticationToken'); - if (!!token) { + if (token) { request = request.clone({ setHeaders: { Authorization: 'Bearer ' + token diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts index 15dcf797..22580481 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/errorhandler.interceptor.ts @@ -1,25 +1,20 @@ import { Injectable } from '@angular/core'; -import { JhiAlertErrorService } from 'app/shared/alert/alert-error.service'; +import { AlertErrorService } from 'app/shared/alert/alert-error.service'; import { HttpInterceptor, HttpRequest, HttpErrorResponse, HttpHandler, HttpEvent } from '@angular/common/http'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; @Injectable() export class ErrorHandlerInterceptor implements HttpInterceptor { - constructor(private alertErrorService: JhiAlertErrorService) {} + constructor(private alertErrorService: AlertErrorService) {} intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe( - tap( - (event: HttpEvent) => {}, - (err: any) => { - if (err instanceof HttpErrorResponse) { - if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('api/account'))))) { - this.alertErrorService.displayError(err); - } - } + tap(null, (err: HttpErrorResponse) => { + if (!(err.status === 401 && (err.message === '' || (err.url && err.url.includes('api/account'))))) { + this.alertErrorService.displayError(err); } - ) + }) ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts index 9c603ab3..3b939a4f 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/blocks/interceptor/notification.interceptor.ts @@ -11,28 +11,25 @@ export class NotificationInterceptor implements HttpInterceptor { intercept(request: HttpRequest, next: HttpHandler): Observable> { return next.handle(request).pipe( - tap( - (event: HttpEvent) => { - if (event instanceof HttpResponse) { - const arr = event.headers.keys(); - let alert = null; - let alertParams = null; - arr.forEach(entry => { - if (entry.toLowerCase().endsWith('app-alert')) { - alert = event.headers.get(entry); - } else if (entry.toLowerCase().endsWith('app-params')) { - alertParams = event.headers.get(entry); - } - }); - if (alert) { - if (typeof alert === 'string') { - this.messageService.add({ severity: 'success', summary: this.translateService.instant(alert, { param: alertParams }) }); - } + tap((event: HttpEvent) => { + if (event instanceof HttpResponse) { + const arr = event.headers.keys(); + let alert: string | null = null; + let alertParams: string | null = null; + arr.forEach(entry => { + if (entry.toLowerCase().endsWith('app-alert')) { + alert = event.headers.get(entry); + } else if (entry.toLowerCase().endsWith('app-params')) { + alertParams = decodeURIComponent(event.headers.get(entry)!.replace(/\+/g, ' ')); + } + }); + if (alert) { + if (typeof alert === 'string') { + this.messageService.add({ severity: 'success', summary: this.translateService.instant(alert, { param: alertParams }) }); } } - }, - (err: any) => {} - ) + } + }) ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/account.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/account.service.ts index 612da026..8af48d39 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/account.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/account.service.ts @@ -1,116 +1,97 @@ import { Injectable } from '@angular/core'; +import { Router } from '@angular/router'; +import { HttpClient } from '@angular/common/http'; import { JhiLanguageService } from 'ng-jhipster'; import { SessionStorageService } from 'ngx-webstorage'; -import { HttpClient, HttpResponse } from '@angular/common/http'; -import { Observable, Subject } from 'rxjs'; +import { Observable, ReplaySubject, of } from 'rxjs'; +import { shareReplay, tap, catchError } from 'rxjs/operators'; +import { StateStorageService } from 'app/core/auth/state-storage.service'; import { SERVER_API_URL } from 'app/app.constants'; import { Account } from 'app/core/user/account.model'; @Injectable({ providedIn: 'root' }) export class AccountService { - private userIdentity: any; - private authenticated = false; - private authenticationState = new Subject(); - - constructor(private languageService: JhiLanguageService, private sessionStorage: SessionStorageService, private http: HttpClient) {} - - fetch(): Observable> { - return this.http.get(SERVER_API_URL + 'api/account', { observe: 'response' }); - } - - save(account: any): Observable> { - return this.http.post(SERVER_API_URL + 'api/account', account, { observe: 'response' }); + private userIdentity: Account | null = null; + private authenticationState = new ReplaySubject(1); + private accountCache$?: Observable; + + constructor( + private languageService: JhiLanguageService, + private sessionStorage: SessionStorageService, + private http: HttpClient, + private stateStorageService: StateStorageService, + private router: Router + ) {} + + save(account: Account): Observable<{}> { + return this.http.post(SERVER_API_URL + 'api/account', account); } - authenticate(identity) { + authenticate(identity: Account | null): void { this.userIdentity = identity; - this.authenticated = identity !== null; this.authenticationState.next(this.userIdentity); } - hasAnyAuthority(authorities: string[]): boolean { - if (!this.authenticated || !this.userIdentity || !this.userIdentity.authorities) { + hasAnyAuthority(authorities: string[] | string): boolean { + if (!this.userIdentity || !this.userIdentity.authorities) { return false; } - - for (let i = 0; i < authorities.length; i++) { - if (this.userIdentity.authorities.includes(authorities[i])) { - return true; - } - } - - return false; - } - - hasAuthority(authority: string): Promise { - if (!this.authenticated) { - return Promise.resolve(false); + if (!Array.isArray(authorities)) { + authorities = [authorities]; } - - return this.identity().then( - id => { - return Promise.resolve(id.authorities && id.authorities.includes(authority)); - }, - () => { - return Promise.resolve(false); - } - ); + return this.userIdentity.authorities.some((authority: string) => authorities.includes(authority)); } - identity(force?: boolean): Promise { - if (force) { - this.userIdentity = undefined; - } + identity(force?: boolean): Observable { + if (!this.accountCache$ || force || !this.isAuthenticated()) { + this.accountCache$ = this.fetch().pipe( + catchError(() => { + return of(null); + }), + tap((account: Account | null) => { + this.authenticate(account); - // check and see if we have retrieved the userIdentity data from the server. - // if we have, reuse it by immediately resolving - if (this.userIdentity) { - return Promise.resolve(this.userIdentity); - } - - // retrieve the userIdentity data from the server, update the identity object, and then resolve. - return this.fetch() - .toPromise() - .then(response => { - const account: Account = response.body; - if (account) { - this.userIdentity = account; - this.authenticated = true; // After retrieve the account info, the language will be changed to // the user's preferred language configured in the account setting - if (this.userIdentity.langKey) { - const langKey = this.sessionStorage.retrieve('locale') || this.userIdentity.langKey; + if (account && account.langKey) { + const langKey = this.sessionStorage.retrieve('locale') || account.langKey; this.languageService.changeLanguage(langKey); } - } else { - this.userIdentity = null; - this.authenticated = false; - } - this.authenticationState.next(this.userIdentity); - return this.userIdentity; - }) - .catch(err => { - this.userIdentity = null; - this.authenticated = false; - this.authenticationState.next(this.userIdentity); - return null; - }); - } - isAuthenticated(): boolean { - return this.authenticated; + if (account) { + this.navigateToStoredUrl(); + } + }), + shareReplay() + ); + } + return this.accountCache$; } - isIdentityResolved(): boolean { - return this.userIdentity !== undefined; + isAuthenticated(): boolean { + return this.userIdentity !== null; } - getAuthenticationState(): Observable { + getAuthenticationState(): Observable { return this.authenticationState.asObservable(); } getImageUrl(): string { - return this.isIdentityResolved() ? this.userIdentity.imageUrl : null; + return this.userIdentity ? this.userIdentity.imageUrl : ''; + } + + private fetch(): Observable { + return this.http.get(SERVER_API_URL + 'api/account'); + } + + private navigateToStoredUrl(): void { + // previousState can be set in the authExpiredInterceptor and in the userRouteAccessService + // if login is successful, go to stored previousState and clear previousState + const previousUrl = this.stateStorageService.getUrl(); + if (previousUrl) { + this.stateStorageService.clearUrl(); + this.router.navigateByUrl(previousUrl); + } } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/auth-jwt.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/auth-jwt.service.ts index db58d329..5fb3e6f8 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/auth-jwt.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/auth-jwt.service.ts @@ -5,55 +5,40 @@ import { map } from 'rxjs/operators'; import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; import { SERVER_API_URL } from 'app/app.constants'; +import { Login } from 'app/core/login/login.model'; + +type JwtToken = { + id_token: string; +}; @Injectable({ providedIn: 'root' }) export class AuthServerProvider { constructor(private http: HttpClient, private $localStorage: LocalStorageService, private $sessionStorage: SessionStorageService) {} - getToken() { - return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken'); + getToken(): string { + return this.$localStorage.retrieve('authenticationToken') || this.$sessionStorage.retrieve('authenticationToken') || ''; } - login(credentials): Observable { - const data = { - username: credentials.username, - password: credentials.password, - rememberMe: credentials.rememberMe - }; - return this.http.post(SERVER_API_URL + 'api/authenticate', data, { observe: 'response' }).pipe(map(authenticateSuccess.bind(this))); - - function authenticateSuccess(resp) { - const bearerToken = resp.headers.get('Authorization'); - if (bearerToken && bearerToken.slice(0, 7) === 'Bearer ') { - const jwt = bearerToken.slice(7, bearerToken.length); - this.storeAuthenticationToken(jwt, credentials.rememberMe); - return jwt; - } - } + login(credentials: Login): Observable { + return this.http + .post(SERVER_API_URL + 'api/authenticate', credentials) + .pipe(map(response => this.authenticateSuccess(response, credentials.rememberMe))); } - loginWithToken(jwt, rememberMe) { - if (jwt) { - this.storeAuthenticationToken(jwt, rememberMe); - return Promise.resolve(jwt); - } else { - return Promise.reject('auth-jwt-service Promise reject'); // Put appropriate error message here - } + logout(): Observable { + return new Observable(observer => { + this.$localStorage.clear('authenticationToken'); + this.$sessionStorage.clear('authenticationToken'); + observer.complete(); + }); } - storeAuthenticationToken(jwt, rememberMe) { + private authenticateSuccess(response: JwtToken, rememberMe: boolean): void { + const jwt = response.id_token; if (rememberMe) { this.$localStorage.store('authenticationToken', jwt); } else { this.$sessionStorage.store('authenticationToken', jwt); } } - - logout(): Observable { - return new Observable(observer => { - this.$localStorage.clear('authenticationToken'); - this.$sessionStorage.clear('authenticationToken'); - observer.complete(); - }); - } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/csrf.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/csrf.service.ts index c37dd887..d436d88d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/csrf.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/csrf.service.ts @@ -5,7 +5,7 @@ import { CookieService } from 'ngx-cookie'; export class CSRFService { constructor(private cookieService: CookieService) {} - getCSRF(name = 'XSRF-TOKEN') { + getCSRF(name = 'XSRF-TOKEN'): string { return this.cookieService.get(name); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/state-storage.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/state-storage.service.ts index bbd81f53..5d8861de 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/state-storage.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/state-storage.service.ts @@ -3,44 +3,19 @@ import { SessionStorageService } from 'ngx-webstorage'; @Injectable({ providedIn: 'root' }) export class StateStorageService { - constructor(private $sessionStorage: SessionStorageService) {} - - getPreviousState() { - return this.$sessionStorage.retrieve('previousState'); - } - - resetPreviousState() { - this.$sessionStorage.clear('previousState'); - } + private previousUrlKey = 'previousUrl'; - storePreviousState(previousStateName, previousStateParams) { - const previousState = { name: previousStateName, params: previousStateParams }; - this.$sessionStorage.store('previousState', previousState); - } - - getDestinationState() { - return this.$sessionStorage.retrieve('destinationState'); - } + constructor(private $sessionStorage: SessionStorageService) {} - storeUrl(url: string) { - this.$sessionStorage.store('previousUrl', url); + storeUrl(url: string): void { + this.$sessionStorage.store(this.previousUrlKey, url); } - getUrl() { - return this.$sessionStorage.retrieve('previousUrl'); + getUrl(): string | null | undefined { + return this.$sessionStorage.retrieve(this.previousUrlKey); } - storeDestinationState(destinationState, destinationStateParams, fromState) { - const destinationInfo = { - destination: { - name: destinationState.name, - data: destinationState.data - }, - params: destinationStateParams, - from: { - name: fromState.name - } - }; - this.$sessionStorage.store('destinationState', destinationInfo); + clearUrl(): void { + this.$sessionStorage.clear(this.previousUrlKey); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/user-route-access-service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/user-route-access-service.ts index 91a4e04e..30d7b7eb 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/user-route-access-service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/auth/user-route-access-service.ts @@ -1,7 +1,9 @@ import { Injectable, isDevMode } from '@angular/core'; import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; -import { AccountService } from 'app/core/'; +import { AccountService } from 'app/core/auth/account.service'; import { LoginModalService } from 'app/core/login/login-modal.service'; import { StateStorageService } from './state-storage.service'; @@ -14,7 +16,7 @@ export class UserRouteAccessService implements CanActivate { private stateStorageService: StateStorageService ) {} - canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Promise { + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { const authorities = route.data['authorities']; // We need to call the checkLogin / and so the accountService.identity() function, to ensure, // that the client has a principal too, if they already logged in by the server. @@ -22,27 +24,30 @@ export class UserRouteAccessService implements CanActivate { return this.checkLogin(authorities, state.url); } - checkLogin(authorities: string[], url: string): Promise { - return this.accountService.identity().then(account => { - if (!authorities || authorities.length === 0) { - return true; - } - - if (account) { - const hasAnyAuthority = this.accountService.hasAnyAuthority(authorities); - if (hasAnyAuthority) { + checkLogin(authorities: string[], url: string): Observable { + return this.accountService.identity().pipe( + map(account => { + if (!authorities || authorities.length === 0) { return true; } - if (isDevMode()) { - console.error('User has not any of required authorities: ', authorities); + + if (account) { + const hasAnyAuthority = this.accountService.hasAnyAuthority(authorities); + if (hasAnyAuthority) { + return true; + } + if (isDevMode()) { + console.error('User has not any of required authorities: ', authorities); + } + this.router.navigate(['accessdenied']); + return false; } - this.router.navigate(['accessdenied']); - return false; - } - this.stateStorageService.storeUrl(url); - this.loginModalService.open(); - return false; - }); + this.stateStorageService.storeUrl(url); + this.router.navigate(['']); + this.loginModalService.open(); + return false; + }) + ); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/core.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/core.module.ts index a6192e83..22aa0048 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/core.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/core.module.ts @@ -1,24 +1,78 @@ import { NgModule, LOCALE_ID } from '@angular/core'; import { DatePipe, registerLocaleData } from '@angular/common'; -import { HttpClientModule } from '@angular/common/http'; +import { HttpClient, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; import { Title } from '@angular/platform-browser'; +import { CookieModule } from 'ngx-cookie'; +import { TranslateModule, TranslateLoader, MissingTranslationHandler } from '@ngx-translate/core'; +import { NgxWebstorageModule } from 'ngx-webstorage'; +import { NgJhipsterModule, translatePartialLoader, missingTranslationHandler, JhiConfigService, JhiLanguageService } from 'ng-jhipster'; import locale from '@angular/common/locales/en'; +import { ConfirmationService, MessageService } from 'primeng/api'; +import { AuthInterceptor } from 'app/blocks/interceptor/auth.interceptor'; +import { AuthExpiredInterceptor } from 'app/blocks/interceptor/auth-expired.interceptor'; +import { ErrorHandlerInterceptor } from 'app/blocks/interceptor/errorhandler.interceptor'; +import { NotificationInterceptor } from 'app/blocks/interceptor/notification.interceptor'; + @NgModule({ - imports: [HttpClientModule], - exports: [], - declarations: [], + imports: [ + HttpClientModule, + CookieModule.forRoot(), + NgxWebstorageModule.forRoot({ prefix: 'jhi', separator: '-' }), + NgJhipsterModule.forRoot({ + // set below to true to make alerts look like toast + alertAsToast: false, + alertTimeout: 5000, + i18nEnabled: true, + defaultI18nLang: 'en' + }), + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: translatePartialLoader, + deps: [HttpClient] + }, + missingTranslationHandler: { + provide: MissingTranslationHandler, + useFactory: missingTranslationHandler, + deps: [JhiConfigService] + } + }) + ], providers: [ Title, { provide: LOCALE_ID, useValue: 'en' }, - DatePipe + DatePipe, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: AuthExpiredInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: ErrorHandlerInterceptor, + multi: true + }, + { + provide: HTTP_INTERCEPTORS, + useClass: NotificationInterceptor, + multi: true + }, + ConfirmationService, + MessageService ] }) export class PrimengtestCoreModule { - constructor() { + constructor(languageService: JhiLanguageService) { registerLocaleData(locale); + languageService.init(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/index.ts deleted file mode 100644 index fbfcfd35..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -export * from './auth/csrf.service'; -export * from './auth/state-storage.service'; -export * from './auth/account.service'; -export * from './auth/auth-jwt.service'; -export * from './language/language.helper'; -export * from './language/language.constants'; -export * from './user/account.model'; -export * from './user/user.model'; -export * from './auth/user-route-access-service'; -export * from './login/login-modal.service'; -export * from './login/login.service'; -export * from './user/user.service'; -export * from './core.module'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/language/language.helper.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/language/language.helper.ts index b2db5618..3cfd520b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/language/language.helper.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/language/language.helper.ts @@ -1,65 +1,15 @@ import { Injectable, RendererFactory2, Renderer2 } from '@angular/core'; -import { Title } from '@angular/platform-browser'; -import { Router, ActivatedRouteSnapshot } from '@angular/router'; import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; -import { BehaviorSubject, Observable } from 'rxjs'; - -import { LANGUAGES } from 'app/core/language/language.constants'; @Injectable({ providedIn: 'root' }) -export class JhiLanguageHelper { - renderer: Renderer2 = null; - private _language: BehaviorSubject; +export class LanguageHelper { + private renderer: Renderer2; - constructor( - private translateService: TranslateService, - private titleService: Title, - private router: Router, - rootRenderer: RendererFactory2 - ) { - this._language = new BehaviorSubject(this.translateService.currentLang); + constructor(private translateService: TranslateService, rootRenderer: RendererFactory2) { this.renderer = rootRenderer.createRenderer(document.querySelector('html'), null); - this.init(); - } - - getAll(): Promise { - return Promise.resolve(LANGUAGES); - } - - get language(): Observable { - return this._language.asObservable(); - } - /** - * Update the window title using params in the following - * order: - * 1. titleKey parameter - * 2. $state.$current.data.pageTitle (current state page title) - * 3. 'global.title' - */ - updateTitle(titleKey?: string) { - if (!titleKey) { - titleKey = this.getPageTitle(this.router.routerState.snapshot.root); - } - - this.translateService.get(titleKey).subscribe(title => { - this.titleService.setTitle(title); - }); - } - - private init() { - this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { - this._language.next(this.translateService.currentLang); - this.renderer.setAttribute(document.querySelector('html'), 'lang', this.translateService.currentLang); - this.updateTitle(); + this.translateService.onLangChange.subscribe((langChangeEvent: LangChangeEvent) => { + this.renderer.setAttribute(document.querySelector('html'), 'lang', langChangeEvent.lang); }); } - - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : 'primengtestApp'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login-modal.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login-modal.service.ts index 5800ffc2..73af6ae4 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login-modal.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login-modal.service.ts @@ -1,27 +1,20 @@ import { Injectable } from '@angular/core'; import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiLoginModalComponent } from 'app/shared/login/login.component'; +import { LoginModalComponent } from 'app/shared/login/login.component'; @Injectable({ providedIn: 'root' }) export class LoginModalService { private isOpen = false; + constructor(private modalService: NgbModal) {} - open(): NgbModalRef { + open(): void { if (this.isOpen) { return; } this.isOpen = true; - const modalRef = this.modalService.open(JhiLoginModalComponent); - modalRef.result.then( - result => { - this.isOpen = false; - }, - reason => { - this.isOpen = false; - } - ); - return modalRef; + const modalRef: NgbModalRef = this.modalService.open(LoginModalComponent); + modalRef.result.finally(() => (this.isOpen = false)); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.model.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.model.ts new file mode 100644 index 00000000..422fce9a --- /dev/null +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.model.ts @@ -0,0 +1,3 @@ +export class Login { + constructor(public username: string, public password: string, public rememberMe: boolean) {} +} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.service.ts index 48ac7fdf..600f4f7e 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/login/login.service.ts @@ -1,36 +1,21 @@ import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; + +import { Account } from 'app/core/user/account.model'; import { AccountService } from 'app/core/auth/account.service'; import { AuthServerProvider } from 'app/core/auth/auth-jwt.service'; +import { Login } from './login.model'; @Injectable({ providedIn: 'root' }) export class LoginService { constructor(private accountService: AccountService, private authServerProvider: AuthServerProvider) {} - login(credentials, callback?) { - const cb = callback || function() {}; - - return new Promise((resolve, reject) => { - this.authServerProvider.login(credentials).subscribe( - data => { - this.accountService.identity(true).then(account => { - resolve(data); - }); - return cb(); - }, - err => { - this.logout(); - reject(err); - return cb(err); - } - ); - }); - } - - loginWithToken(jwt, rememberMe) { - return this.authServerProvider.loginWithToken(jwt, rememberMe); + login(credentials: Login): Observable { + return this.authServerProvider.login(credentials).pipe(flatMap(() => this.accountService.identity(true))); } - logout() { + logout(): void { this.authServerProvider.logout().subscribe(null, null, () => this.accountService.authenticate(null)); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.model.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.model.ts index 5a598333..585f7edd 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.model.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.model.ts @@ -6,7 +6,7 @@ export interface IUser { email?: string; activated?: boolean; langKey?: string; - authorities?: any[]; + authorities?: string[]; createdBy?: string; createdDate?: Date; lastModifiedBy?: string; @@ -23,25 +23,11 @@ export class User implements IUser { public email?: string, public activated?: boolean, public langKey?: string, - public authorities?: any[], + public authorities?: string[], public createdBy?: string, public createdDate?: Date, public lastModifiedBy?: string, public lastModifiedDate?: Date, public password?: string - ) { - this.id = id ? id : null; - this.login = login ? login : null; - this.firstName = firstName ? firstName : null; - this.lastName = lastName ? lastName : null; - this.email = email ? email : null; - this.activated = activated ? activated : false; - this.langKey = langKey ? langKey : null; - this.authorities = authorities ? authorities : null; - this.createdBy = createdBy ? createdBy : null; - this.createdDate = createdDate ? createdDate : null; - this.lastModifiedBy = lastModifiedBy ? lastModifiedBy : null; - this.lastModifiedDate = lastModifiedDate ? lastModifiedDate : null; - this.password = password ? password : null; - } + ) {} } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.service.ts index bc6b3850..ad9ddda0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/core/user/user.service.ts @@ -12,16 +12,16 @@ export class UserService { constructor(private http: HttpClient) {} - create(user: IUser): Observable> { - return this.http.post(this.resourceUrl, user, { observe: 'response' }); + create(user: IUser): Observable { + return this.http.post(this.resourceUrl, user); } - update(user: IUser): Observable> { - return this.http.put(this.resourceUrl, user, { observe: 'response' }); + update(user: IUser): Observable { + return this.http.put(this.resourceUrl, user); } - find(login: string): Observable> { - return this.http.get(`${this.resourceUrl}/${login}`, { observe: 'response' }); + find(login: string): Observable { + return this.http.get(`${this.resourceUrl}/${login}`); } query(req?: any): Observable> { @@ -29,8 +29,8 @@ export class UserService { return this.http.get(this.resourceUrl, { params: options, observe: 'response' }); } - delete(login: string): Observable> { - return this.http.delete(`${this.resourceUrl}/${login}`, { observe: 'response' }); + delete(login: string): Observable<{}> { + return this.http.delete(`${this.resourceUrl}/${login}`); } authorities(): Observable { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-detail.component.ts index ae4eb34c..43cae5d8 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-detail.component.ts @@ -8,17 +8,17 @@ import { ICertificateType } from 'app/shared/model/certificate-type.model'; templateUrl: './certificate-type-detail.component.html' }) export class CertificateTypeDetailComponent implements OnInit { - certificateType: ICertificateType; + certificateType: ICertificateType | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ certificateType }) => { this.certificateType = certificateType; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.html index 6e018083..c6ed4c0a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.html @@ -3,7 +3,7 @@

    Create or edit a Certificate Type

    - +
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.ts index 3300575e..4bf13824 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type-update.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; -import { ICertificateType, CertificateType } from 'app/shared/model/certificate-type.model'; +import { ICertificateType } from 'app/shared/model/certificate-type.model'; import { CertificateTypeService } from './certificate-type.service'; @Component({ @@ -11,7 +11,7 @@ import { CertificateTypeService } from './certificate-type.service'; templateUrl: './certificate-type-update.component.html' }) export class CertificateTypeUpdateComponent implements OnInit { - isSaving: boolean; + isSaving = false; editForm = this.fb.group({ id: [], @@ -24,14 +24,14 @@ export class CertificateTypeUpdateComponent implements OnInit { private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ certificateType }) => { this.updateForm(certificateType); }); } - updateForm(certificateType: ICertificateType) { + updateForm(certificateType: ICertificateType | null): void { if (certificateType) { this.editForm.reset({ ...certificateType }); } else { @@ -39,11 +39,11 @@ export class CertificateTypeUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const certificateType = this.editForm.value; if (certificateType.id !== null) { @@ -53,16 +53,19 @@ export class CertificateTypeUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.component.ts index be97a07a..b7375f8d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.component.ts @@ -16,15 +16,15 @@ import { Table } from 'primeng/table'; templateUrl: './certificate-type.component.html' }) export class CertificateTypeComponent implements OnInit, OnDestroy { - certificateTypes: ICertificateType[]; - eventSubscriber: Subscription; + certificateTypes?: ICertificateType[]; + eventSubscriber?: Subscription; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - id: { matchMode: 'equals', unflatten: x => +x } + id: { matchMode: 'equals', unflatten: (x: string) => +x } }; @ViewChild('certificateTypeTable', { static: true }) - certificateTypeTable: Table; + certificateTypeTable!: Table; constructor( protected certificateTypeService: CertificateTypeService, @@ -34,35 +34,37 @@ export class CertificateTypeComponent implements OnInit, OnDestroy { protected translateService: TranslateService ) {} - ngOnInit() { + ngOnInit(): void { this.loadAll(); this.registerChangeInCertificateTypes(); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - loadAll() { + loadAll(): void { this.certificateTypeService .query() .pipe( filter((res: HttpResponse) => res.ok), - map((res: HttpResponse) => res.body) + map((res: HttpResponse) => res.body!) ) .subscribe( - (res: ICertificateType[]) => { - this.certificateTypes = res; + (certificateTypes: ICertificateType[]) => { + this.certificateTypes = certificateTypes; }, (res: HttpErrorResponse) => this.onError(res.message) ); } - filter(value, field) { + filter(value: any, field: string): void { this.certificateTypeTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(id: number) { + delete(id: number): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.certificateType.delete.question', { id }), @@ -77,15 +79,15 @@ export class CertificateTypeComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: ICertificateType) { - return item.id; + trackId(index: number, item: ICertificateType): string { + return '' + item.id; } - registerChangeInCertificateTypes() { - this.eventSubscriber = this.eventManager.subscribe('certificateTypeListModification', response => this.loadAll()); + registerChangeInCertificateTypes(): void { + this.eventSubscriber = this.eventManager.subscribe('certificateTypeListModification', () => this.loadAll()); } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.module.ts index d32a1a08..443c1983 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { CertificateTypeComponent, CertificateTypeDetailComponent, CertificateTypeUpdateComponent, certificateTypeRoute } from './'; - -const ENTITY_STATES = [...certificateTypeRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { CertificateTypeComponent } from './certificate-type.component'; +import { CertificateTypeDetailComponent } from './certificate-type-detail.component'; +import { CertificateTypeUpdateComponent } from './certificate-type-update.component'; +import { certificateTypeRoute } from './certificate-type.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [CertificateTypeComponent, CertificateTypeDetailComponent, CertificateTypeUpdateComponent], - entryComponents: [CertificateTypeComponent, CertificateTypeUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(certificateTypeRoute)], + declarations: [CertificateTypeComponent, CertificateTypeDetailComponent, CertificateTypeUpdateComponent] }) -export class PrimengtestCertificateTypeModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestCertificateTypeModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.route.ts index bf418528..d293544b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/certificate-type.route.ts @@ -1,25 +1,31 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { ICertificateType } from 'app/shared/model/certificate-type.model'; import { CertificateTypeService } from './certificate-type.service'; import { CertificateTypeComponent } from './certificate-type.component'; import { CertificateTypeDetailComponent } from './certificate-type-detail.component'; import { CertificateTypeUpdateComponent } from './certificate-type-update.component'; -import { ICertificateType } from 'app/shared/model/certificate-type.model'; @Injectable({ providedIn: 'root' }) -export class CertificateTypeResolve implements Resolve { - constructor(private service: CertificateTypeService) {} +export class CertificateTypeResolve implements Resolve { + constructor(private service: CertificateTypeService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.params['id'] ? route.params['id'] : null; if (id) { return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((certificateType: HttpResponse) => certificateType.body) + flatMap((certificateType: HttpResponse) => { + if (certificateType.body) { + return of(certificateType.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/index.ts deleted file mode 100644 index 5e659841..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/certificate-type/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './certificate-type.service'; -export * from './certificate-type-update.component'; -export * from './certificate-type-detail.component'; -export * from './certificate-type.component'; -export * from './certificate-type.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-detail.component.ts index 94fa32cb..e06d549b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-detail.component.ts @@ -8,17 +8,17 @@ import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certi templateUrl: './employee-skill-certificate-detail.component.html' }) export class EmployeeSkillCertificateDetailComponent implements OnInit { - employeeSkillCertificate: IEmployeeSkillCertificate; + employeeSkillCertificate: IEmployeeSkillCertificate | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ employeeSkillCertificate }) => { this.employeeSkillCertificate = employeeSkillCertificate; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-update.component.ts index ea6effc6..bd00af1b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate-update.component.ts @@ -5,29 +5,29 @@ import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; import { lazyLoadEventToServerQueryParams } from 'app/shared/util/request-util'; import { LazyLoadEvent } from 'primeng/api'; -import { MessageService } from 'primeng/api'; -import { IEmployeeSkillCertificate, EmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; +import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; import { EmployeeSkillCertificateService } from './employee-skill-certificate.service'; +import { MessageService } from 'primeng/api'; import { ICertificateType } from 'app/shared/model/certificate-type.model'; -import { CertificateTypeService } from 'app/entities/certificate-type'; +import { CertificateTypeService } from 'app/entities/certificate-type/certificate-type.service'; import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; -import { EmployeeSkillService } from 'app/entities/employee-skill'; +import { EmployeeSkillService } from 'app/entities/employee-skill/employee-skill.service'; import { IEmployee } from 'app/shared/model/employee.model'; -import { EmployeeService } from 'app/entities/employee'; +import { EmployeeService } from 'app/entities/employee/employee.service'; @Component({ selector: 'jhi-employee-skill-certificate-update', templateUrl: './employee-skill-certificate-update.component.html' }) export class EmployeeSkillCertificateUpdateComponent implements OnInit { - edit: boolean; - isSaving: boolean; - typeOptions: ICertificateType[]; - typeFilterValue: any; - skillOptions: IEmployeeSkill[]; - skillFilterValue: any; - skillEmployeeOptions: IEmployee[]; - skillEmployeeFilterValue: any; + edit = false; + isSaving = false; + typeOptions: ICertificateType[] | null = null; + typeFilterValue?: any; + skillOptions: IEmployeeSkill[] | null = null; + skillFilterValue?: any; + skillEmployeeOptions: IEmployee[] | null = null; + skillEmployeeFilterValue?: any; editForm = this.fb.group({ grade: [null, [Validators.required]], @@ -47,7 +47,7 @@ export class EmployeeSkillCertificateUpdateComponent implements OnInit { private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ employeeSkillCertificate }) => { this.updateForm(employeeSkillCertificate); @@ -55,25 +55,28 @@ export class EmployeeSkillCertificateUpdateComponent implements OnInit { this.loadAllTypes(); } - loadAllTypes() { - this.certificateTypeService - .query() - .subscribe(res => (this.typeOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + loadAllTypes(): void { + this.certificateTypeService.query().subscribe( + (res: HttpResponse) => (this.typeOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - onSkillLazyLoadEvent(event: LazyLoadEvent) { - this.employeeSkillService - .query(lazyLoadEventToServerQueryParams(event || {}, 'name.contains')) - .subscribe(res => (this.skillOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + onSkillLazyLoadEvent(event: LazyLoadEvent): void { + this.employeeSkillService.query(lazyLoadEventToServerQueryParams(event, 'name.contains')).subscribe( + (res: HttpResponse) => (this.skillOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - onSkillEmployeeLazyLoadEvent(event: LazyLoadEvent) { - this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) - .subscribe(res => (this.skillEmployeeOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + onSkillEmployeeLazyLoadEvent(event: LazyLoadEvent): void { + this.employeeService.query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')).subscribe( + (res: HttpResponse) => (this.skillEmployeeOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - updateForm(employeeSkillCertificate: IEmployeeSkillCertificate) { + updateForm(employeeSkillCertificate: IEmployeeSkillCertificate | null): void { if (employeeSkillCertificate) { this.edit = true; this.editForm.reset({ ...employeeSkillCertificate }); @@ -85,11 +88,11 @@ export class EmployeeSkillCertificateUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const employeeSkillCertificate = this.editForm.value; if (this.edit) { @@ -99,19 +102,22 @@ export class EmployeeSkillCertificateUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.html index cba162a9..524eabf4 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.html @@ -63,17 +63,17 @@

    {{employeeSkillCertificate.date | date:'mediumDate'}} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.ts index 3f847046..565dd7d0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.component.ts @@ -7,7 +7,7 @@ import { JhiEventManager } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; import { EmployeeSkillCertificateService } from './employee-skill-certificate.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, @@ -17,11 +17,11 @@ import { import { ConfirmationService, LazyLoadEvent } from 'primeng/api'; import { TranslateService } from '@ngx-translate/core'; import { ICertificateType } from 'app/shared/model/certificate-type.model'; -import { CertificateTypeService } from 'app/entities/certificate-type'; +import { CertificateTypeService } from 'app/entities/certificate-type/certificate-type.service'; import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; -import { EmployeeSkillService } from 'app/entities/employee-skill'; +import { EmployeeSkillService } from 'app/entities/employee-skill/employee-skill.service'; import { IEmployee } from 'app/shared/model/employee.model'; -import { EmployeeService } from 'app/entities/employee'; +import { EmployeeService } from 'app/entities/employee/employee.service'; import { Table } from 'primeng/table'; import { DatePipe } from '@angular/common'; @@ -30,27 +30,27 @@ import { DatePipe } from '@angular/common'; templateUrl: './employee-skill-certificate.component.html' }) export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { - employeeSkillCertificates: IEmployeeSkillCertificate[]; - eventSubscriber: Subscription; - dateRange: Date[]; - typeOptions: ICertificateType[]; - skillOptions: IEmployeeSkill[]; - skillEmployeeOptions: IEmployee[]; + employeeSkillCertificates?: IEmployeeSkillCertificate[]; + eventSubscriber?: Subscription; + dateRange?: Date[]; + typeOptions: ICertificateType[] | null = null; + skillOptions: IEmployeeSkill[] | null = null; + skillEmployeeOptions: IEmployee[] | null = null; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - grade: { matchMode: 'equals', unflatten: x => +x }, - date: { matchMode: 'between', flatten: a => a.filter(x => x).join(','), unflatten: a => a.split(',') }, + grade: { matchMode: 'equals', unflatten: (x: string) => +x }, + date: { matchMode: 'between', flatten: a => a.filter((x: string) => x).join(','), unflatten: (a: string) => a.split(',') }, typeId: { matchMode: 'in', flatten: a => a.join(','), unflatten: a => a.split(',').map(x => +x) }, skillName: { matchMode: 'in' }, skillEmployeeUsername: { matchMode: 'in' } }; @ViewChild('employeeSkillCertificateTable', { static: true }) - employeeSkillCertificateTable: Table; + employeeSkillCertificateTable!: Table; constructor( protected employeeSkillCertificateService: EmployeeSkillCertificateService, @@ -69,7 +69,7 @@ export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { + ngOnInit(): void { this.loadAllTypes(); this.registerChangeInEmployeeSkillCertificates(); this.activatedRoute.queryParams @@ -80,7 +80,7 @@ export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { (this.dateRange = this.employeeSkillCertificateTable.filters.date && this.employeeSkillCertificateTable.filters.date.value && - this.employeeSkillCertificateTable.filters.date.value.map(x => new Date(x))) + this.employeeSkillCertificateTable.filters.date.value.map((x: string) => new Date(x))) ), tap(() => (this.loading = true)), switchMap(() => @@ -92,7 +92,7 @@ export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateEmployeeSkillCertificates(res.body, res.headers); + this.paginateEmployeeSkillCertificates(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -102,20 +102,22 @@ export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/employee-skill-certificate'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.employeeSkillCertificateTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(typeId: number, skillName: string, skillEmployeeUsername: string) { + delete(typeId: number, skillName: string, skillEmployeeUsername: string): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.employeeSkillCertificate.delete.question', { @@ -132,43 +134,43 @@ export class EmployeeSkillCertificateComponent implements OnInit, OnDestroy { }); } - loadAllTypes() { + loadAllTypes(): void { this.certificateTypeService.query().subscribe(res => (this.typeOptions = res.body)); } - onSkillLazyLoadEvent(event: LazyLoadEvent) { + onSkillLazyLoadEvent(event: LazyLoadEvent): void { this.employeeSkillService - .query(lazyLoadEventToServerQueryParams(event || {}, 'name.contains')) + .query(lazyLoadEventToServerQueryParams(event, 'name.contains')) .subscribe(res => (this.skillOptions = res.body)); } - onSkillEmployeeLazyLoadEvent(event: LazyLoadEvent) { + onSkillEmployeeLazyLoadEvent(event: LazyLoadEvent): void { this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) + .query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')) .subscribe(res => (this.skillEmployeeOptions = res.body)); } - trackId(index: number, item: IEmployeeSkillCertificate) { - return item.typeId + ',' + item.skillName + ',' + item.skillEmployeeUsername; + trackId(index: number, item: IEmployeeSkillCertificate): string { + return '' + item.typeId + ',' + item.skillName + ',' + item.skillEmployeeUsername; } - registerChangeInEmployeeSkillCertificates() { - this.eventSubscriber = this.eventManager.subscribe('employeeSkillCertificateListModification', response => + registerChangeInEmployeeSkillCertificates(): void { + this.eventSubscriber = this.eventManager.subscribe('employeeSkillCertificateListModification', () => this.router.navigate(['/employee-skill-certificate'], { queryParams: { r: Date.now() } }) ); } - protected paginateEmployeeSkillCertificates(data: IEmployeeSkillCertificate[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateEmployeeSkillCertificates(data: IEmployeeSkillCertificate[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.employeeSkillCertificates = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } - onDateSelect(dateRange: Date[], column: string, time = false) { - const dateToString = time ? x => x && x.toISOString() : x => x && this.datePipe.transform(x, 'yyyy-MM-dd'); + onDateSelect(dateRange: Date[], column: string, time = false): void { + const dateToString = time ? (x: Date) => x && x.toISOString() : (x: Date) => x && this.datePipe.transform(x, 'yyyy-MM-dd'); if (dateRange) { this.filter(dateRange.map(dateToString), column); } else { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.module.ts index d217a2c4..e5da6a42 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.module.ts @@ -1,31 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { - EmployeeSkillCertificateComponent, - EmployeeSkillCertificateDetailComponent, - EmployeeSkillCertificateUpdateComponent, - employeeSkillCertificateRoute -} from './'; - -const ENTITY_STATES = [...employeeSkillCertificateRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { EmployeeSkillCertificateComponent } from './employee-skill-certificate.component'; +import { EmployeeSkillCertificateDetailComponent } from './employee-skill-certificate-detail.component'; +import { EmployeeSkillCertificateUpdateComponent } from './employee-skill-certificate-update.component'; +import { employeeSkillCertificateRoute } from './employee-skill-certificate.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [EmployeeSkillCertificateComponent, EmployeeSkillCertificateDetailComponent, EmployeeSkillCertificateUpdateComponent], - entryComponents: [EmployeeSkillCertificateComponent, EmployeeSkillCertificateUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(employeeSkillCertificateRoute)], + declarations: [EmployeeSkillCertificateComponent, EmployeeSkillCertificateDetailComponent, EmployeeSkillCertificateUpdateComponent] }) -export class PrimengtestEmployeeSkillCertificateModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestEmployeeSkillCertificateModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.route.ts index 631ce80d..f62a7e59 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.route.ts @@ -1,27 +1,33 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; import { EmployeeSkillCertificateService } from './employee-skill-certificate.service'; import { EmployeeSkillCertificateComponent } from './employee-skill-certificate.component'; import { EmployeeSkillCertificateDetailComponent } from './employee-skill-certificate-detail.component'; import { EmployeeSkillCertificateUpdateComponent } from './employee-skill-certificate-update.component'; -import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; @Injectable({ providedIn: 'root' }) -export class EmployeeSkillCertificateResolve implements Resolve { - constructor(private service: EmployeeSkillCertificateService) {} +export class EmployeeSkillCertificateResolve implements Resolve { + constructor(private service: EmployeeSkillCertificateService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const typeId = route.params['typeId'] ? route.params['typeId'] : null; const skillName = route.params['skillName'] ? route.params['skillName'] : null; const skillEmployeeUsername = route.params['skillEmployeeUsername'] ? route.params['skillEmployeeUsername'] : null; if (typeId && skillName && skillEmployeeUsername) { return this.service.find(typeId, skillName, skillEmployeeUsername).pipe( - filter((response: HttpResponse) => response.ok), - map((employeeSkillCertificate: HttpResponse) => employeeSkillCertificate.body) + flatMap((employeeSkillCertificate: HttpResponse) => { + if (employeeSkillCertificate.body) { + return of(employeeSkillCertificate.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.service.ts index 20c065e5..b31c94f4 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/employee-skill-certificate.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; import { DatePipe } from '@angular/common'; import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { map } from 'rxjs/operators'; import { SERVER_API_URL } from 'app/app.constants'; import { createRequestOption } from 'app/shared/util/request-util'; import { IEmployeeSkillCertificate } from 'app/shared/model/employee-skill-certificate.model'; @@ -56,14 +56,14 @@ export class EmployeeSkillCertificateService { protected convertDateFromClient(employeeSkillCertificate: IEmployeeSkillCertificate): IEmployeeSkillCertificate { const copy: IEmployeeSkillCertificate = Object.assign({}, employeeSkillCertificate, { - date: employeeSkillCertificate.date != null ? this.datePipe.transform(employeeSkillCertificate.date, DATE_FORMAT) : null + date: employeeSkillCertificate.date != null ? this.datePipe.transform(employeeSkillCertificate.date, DATE_FORMAT) : undefined }); return copy; } protected convertDateFromServer(res: EntityResponseType): EntityResponseType { if (res.body) { - res.body.date = res.body.date != null ? new Date(res.body.date) : null; + res.body.date = res.body.date ? new Date(res.body.date) : undefined; } return res; } @@ -71,7 +71,7 @@ export class EmployeeSkillCertificateService { protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { if (res.body) { res.body.forEach((employeeSkillCertificate: IEmployeeSkillCertificate) => { - employeeSkillCertificate.date = employeeSkillCertificate.date != null ? new Date(employeeSkillCertificate.date) : null; + employeeSkillCertificate.date = employeeSkillCertificate.date ? new Date(employeeSkillCertificate.date) : undefined; }); } return res; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/index.ts deleted file mode 100644 index ce08ec84..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill-certificate/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './employee-skill-certificate.service'; -export * from './employee-skill-certificate-update.component'; -export * from './employee-skill-certificate-detail.component'; -export * from './employee-skill-certificate.component'; -export * from './employee-skill-certificate.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-detail.component.ts index 5ad823e8..f866d7d5 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-detail.component.ts @@ -8,17 +8,17 @@ import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; templateUrl: './employee-skill-detail.component.html' }) export class EmployeeSkillDetailComponent implements OnInit { - employeeSkill: IEmployeeSkill; + employeeSkill: IEmployeeSkill | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ employeeSkill }) => { this.employeeSkill = employeeSkill; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-update.component.ts index a7f561ff..51b57ef0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill-update.component.ts @@ -5,26 +5,26 @@ import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; import { lazyLoadEventToServerQueryParams } from 'app/shared/util/request-util'; import { LazyLoadEvent } from 'primeng/api'; -import { MessageService } from 'primeng/api'; -import { IEmployeeSkill, EmployeeSkill } from 'app/shared/model/employee-skill.model'; +import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; import { EmployeeSkillService } from './employee-skill.service'; +import { MessageService } from 'primeng/api'; import { ITask } from 'app/shared/model/task.model'; -import { TaskService } from 'app/entities/task'; +import { TaskService } from 'app/entities/task/task.service'; import { IEmployee } from 'app/shared/model/employee.model'; -import { EmployeeService } from 'app/entities/employee'; +import { EmployeeService } from 'app/entities/employee/employee.service'; @Component({ selector: 'jhi-employee-skill-update', templateUrl: './employee-skill-update.component.html' }) export class EmployeeSkillUpdateComponent implements OnInit { - edit: boolean; - isSaving: boolean; - taskOptions: ITask[]; - employeeOptions: IEmployee[]; - employeeFilterValue: any; - teacherOptions: IEmployee[]; - teacherFilterValue: any; + edit = false; + isSaving = false; + taskOptions: ITask[] | null = null; + employeeOptions: IEmployee[] | null = null; + employeeFilterValue?: any; + teacherOptions: IEmployee[] | null = null; + teacherFilterValue?: any; editForm = this.fb.group({ name: [null, [Validators.required]], @@ -43,7 +43,7 @@ export class EmployeeSkillUpdateComponent implements OnInit { private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ employeeSkill }) => { this.updateForm(employeeSkill); @@ -51,23 +51,28 @@ export class EmployeeSkillUpdateComponent implements OnInit { this.loadAllTasks(); } - loadAllTasks() { - this.taskService.query().subscribe(res => (this.taskOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + loadAllTasks(): void { + this.taskService.query().subscribe( + (res: HttpResponse) => (this.taskOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - onEmployeeLazyLoadEvent(event: LazyLoadEvent) { - this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) - .subscribe(res => (this.employeeOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + onEmployeeLazyLoadEvent(event: LazyLoadEvent): void { + this.employeeService.query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')).subscribe( + (res: HttpResponse) => (this.employeeOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - onTeacherLazyLoadEvent(event: LazyLoadEvent) { - this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) - .subscribe(res => (this.teacherOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + onTeacherLazyLoadEvent(event: LazyLoadEvent): void { + this.employeeService.query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')).subscribe( + (res: HttpResponse) => (this.teacherOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - updateForm(employeeSkill: IEmployeeSkill) { + updateForm(employeeSkill: IEmployeeSkill | null): void { if (employeeSkill) { this.edit = true; this.editForm.reset({ ...employeeSkill }); @@ -78,11 +83,11 @@ export class EmployeeSkillUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const employeeSkill = this.editForm.value; if (this.edit) { @@ -92,19 +97,22 @@ export class EmployeeSkillUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.html index 22af7265..c7b007ec 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.html @@ -63,17 +63,17 @@

    {{employeeSkill.level}} - {{task.name}}{{last ? '' : ', '}} + {{task.name}}{{last ? '' : ', '}} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.ts index 3afa22c8..907f98df 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.component.ts @@ -7,7 +7,7 @@ import { JhiEventManager } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; import { EmployeeSkillService } from './employee-skill.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, @@ -17,9 +17,9 @@ import { import { ConfirmationService, LazyLoadEvent } from 'primeng/api'; import { TranslateService } from '@ngx-translate/core'; import { ITask } from 'app/shared/model/task.model'; -import { TaskService } from 'app/entities/task'; +import { TaskService } from 'app/entities/task/task.service'; import { IEmployee } from 'app/shared/model/employee.model'; -import { EmployeeService } from 'app/entities/employee'; +import { EmployeeService } from 'app/entities/employee/employee.service'; import { Table } from 'primeng/table'; @Component({ @@ -27,25 +27,25 @@ import { Table } from 'primeng/table'; templateUrl: './employee-skill.component.html' }) export class EmployeeSkillComponent implements OnInit, OnDestroy { - employeeSkills: IEmployeeSkill[]; - eventSubscriber: Subscription; - taskOptions: ITask[]; - employeeOptions: IEmployee[]; - teacherOptions: IEmployee[]; + employeeSkills?: IEmployeeSkill[]; + eventSubscriber?: Subscription; + taskOptions: ITask[] | null = null; + employeeOptions: IEmployee[] | null = null; + teacherOptions: IEmployee[] | null = null; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - level: { matchMode: 'equals', unflatten: x => +x }, + level: { matchMode: 'equals', unflatten: (x: string) => +x }, taskId: { matchMode: 'in', flatten: a => a.join(','), unflatten: a => a.split(',').map(x => +x) }, employeeUsername: { matchMode: 'in' }, teacherUsername: { matchMode: 'in' } }; @ViewChild('employeeSkillTable', { static: true }) - employeeSkillTable: Table; + employeeSkillTable!: Table; constructor( protected employeeSkillService: EmployeeSkillService, @@ -62,7 +62,7 @@ export class EmployeeSkillComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { + ngOnInit(): void { this.loadAllTasks(); this.registerChangeInEmployeeSkills(); this.activatedRoute.queryParams @@ -76,7 +76,7 @@ export class EmployeeSkillComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateEmployeeSkills(res.body, res.headers); + this.paginateEmployeeSkills(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -86,20 +86,22 @@ export class EmployeeSkillComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/employee-skill'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.employeeSkillTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(name: string, employeeUsername: string) { + delete(name: string, employeeUsername: string): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.employeeSkill.delete.question', { id: name + ',' + employeeUsername }), @@ -114,38 +116,38 @@ export class EmployeeSkillComponent implements OnInit, OnDestroy { }); } - loadAllTasks() { + loadAllTasks(): void { this.taskService.query().subscribe(res => (this.taskOptions = res.body)); } - onEmployeeLazyLoadEvent(event: LazyLoadEvent) { + onEmployeeLazyLoadEvent(event: LazyLoadEvent): void { this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) + .query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')) .subscribe(res => (this.employeeOptions = res.body)); } - onTeacherLazyLoadEvent(event: LazyLoadEvent) { + onTeacherLazyLoadEvent(event: LazyLoadEvent): void { this.employeeService - .query(lazyLoadEventToServerQueryParams(event || {}, 'fullname.contains')) + .query(lazyLoadEventToServerQueryParams(event, 'fullname.contains')) .subscribe(res => (this.teacherOptions = res.body)); } - trackId(index: number, item: IEmployeeSkill) { - return item.name + ',' + item.employeeUsername; + trackId(index: number, item: IEmployeeSkill): string { + return '' + item.name + ',' + item.employeeUsername; } - registerChangeInEmployeeSkills() { - this.eventSubscriber = this.eventManager.subscribe('employeeSkillListModification', response => + registerChangeInEmployeeSkills(): void { + this.eventSubscriber = this.eventManager.subscribe('employeeSkillListModification', () => this.router.navigate(['/employee-skill'], { queryParams: { r: Date.now() } }) ); } - protected paginateEmployeeSkills(data: IEmployeeSkill[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateEmployeeSkills(data: IEmployeeSkill[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.employeeSkills = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.module.ts index d99995ce..a86d92dc 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { EmployeeSkillComponent, EmployeeSkillDetailComponent, EmployeeSkillUpdateComponent, employeeSkillRoute } from './'; - -const ENTITY_STATES = [...employeeSkillRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { EmployeeSkillComponent } from './employee-skill.component'; +import { EmployeeSkillDetailComponent } from './employee-skill-detail.component'; +import { EmployeeSkillUpdateComponent } from './employee-skill-update.component'; +import { employeeSkillRoute } from './employee-skill.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [EmployeeSkillComponent, EmployeeSkillDetailComponent, EmployeeSkillUpdateComponent], - entryComponents: [EmployeeSkillComponent, EmployeeSkillUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(employeeSkillRoute)], + declarations: [EmployeeSkillComponent, EmployeeSkillDetailComponent, EmployeeSkillUpdateComponent] }) -export class PrimengtestEmployeeSkillModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestEmployeeSkillModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.route.ts index caa8816b..7ea8ac90 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/employee-skill.route.ts @@ -1,26 +1,32 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; import { EmployeeSkillService } from './employee-skill.service'; import { EmployeeSkillComponent } from './employee-skill.component'; import { EmployeeSkillDetailComponent } from './employee-skill-detail.component'; import { EmployeeSkillUpdateComponent } from './employee-skill-update.component'; -import { IEmployeeSkill } from 'app/shared/model/employee-skill.model'; @Injectable({ providedIn: 'root' }) -export class EmployeeSkillResolve implements Resolve { - constructor(private service: EmployeeSkillService) {} +export class EmployeeSkillResolve implements Resolve { + constructor(private service: EmployeeSkillService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const name = route.params['name'] ? route.params['name'] : null; const employeeUsername = route.params['employeeUsername'] ? route.params['employeeUsername'] : null; if (name && employeeUsername) { return this.service.find(name, employeeUsername).pipe( - filter((response: HttpResponse) => response.ok), - map((employeeSkill: HttpResponse) => employeeSkill.body) + flatMap((employeeSkill: HttpResponse) => { + if (employeeSkill.body) { + return of(employeeSkill.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/index.ts deleted file mode 100644 index c3249723..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee-skill/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './employee-skill.service'; -export * from './employee-skill-update.component'; -export * from './employee-skill-detail.component'; -export * from './employee-skill.component'; -export * from './employee-skill.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-detail.component.ts index bce433d8..b4a5ff60 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-detail.component.ts @@ -8,17 +8,17 @@ import { IEmployee } from 'app/shared/model/employee.model'; templateUrl: './employee-detail.component.html' }) export class EmployeeDetailComponent implements OnInit { - employee: IEmployee; + employee: IEmployee | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ employee }) => { this.employee = employee; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-update.component.ts index 217b0c56..785af424 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee-update.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; -import { IEmployee, Employee } from 'app/shared/model/employee.model'; +import { IEmployee } from 'app/shared/model/employee.model'; import { EmployeeService } from './employee.service'; @Component({ @@ -11,8 +11,8 @@ import { EmployeeService } from './employee.service'; templateUrl: './employee-update.component.html' }) export class EmployeeUpdateComponent implements OnInit { - edit: boolean; - isSaving: boolean; + edit = false; + isSaving = false; editForm = this.fb.group({ username: [null, [Validators.required]], @@ -21,14 +21,14 @@ export class EmployeeUpdateComponent implements OnInit { constructor(protected employeeService: EmployeeService, protected activatedRoute: ActivatedRoute, private fb: FormBuilder) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ employee }) => { this.updateForm(employee); }); } - updateForm(employee: IEmployee) { + updateForm(employee: IEmployee | null): void { if (employee) { this.edit = true; this.editForm.reset({ ...employee }); @@ -37,11 +37,11 @@ export class EmployeeUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const employee = this.editForm.value; if (this.edit) { @@ -51,16 +51,19 @@ export class EmployeeUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.component.ts index 0af33d1d..751e0f33 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.component.ts @@ -7,7 +7,7 @@ import { JhiEventManager } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; import { IEmployee } from 'app/shared/model/employee.model'; import { EmployeeService } from './employee.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, @@ -23,17 +23,17 @@ import { Table } from 'primeng/table'; templateUrl: './employee.component.html' }) export class EmployeeComponent implements OnInit, OnDestroy { - employees: IEmployee[]; - eventSubscriber: Subscription; + employees?: IEmployee[]; + eventSubscriber?: Subscription; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = {}; @ViewChild('employeeTable', { static: true }) - employeeTable: Table; + employeeTable!: Table; constructor( protected employeeService: EmployeeService, @@ -48,7 +48,7 @@ export class EmployeeComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { + ngOnInit(): void { this.registerChangeInEmployees(); this.activatedRoute.queryParams .pipe( @@ -59,7 +59,7 @@ export class EmployeeComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateEmployees(res.body, res.headers); + this.paginateEmployees(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -69,20 +69,22 @@ export class EmployeeComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/employee'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.employeeTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(username: string) { + delete(username: string): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.employee.delete.question', { id: username }), @@ -97,22 +99,22 @@ export class EmployeeComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: IEmployee) { - return item.username; + trackId(index: number, item: IEmployee): string { + return '' + item.username; } - registerChangeInEmployees() { - this.eventSubscriber = this.eventManager.subscribe('employeeListModification', response => + registerChangeInEmployees(): void { + this.eventSubscriber = this.eventManager.subscribe('employeeListModification', () => this.router.navigate(['/employee'], { queryParams: { r: Date.now() } }) ); } - protected paginateEmployees(data: IEmployee[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateEmployees(data: IEmployee[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.employees = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.module.ts index 4bd0870e..c1a1ecda 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { EmployeeComponent, EmployeeDetailComponent, EmployeeUpdateComponent, employeeRoute } from './'; - -const ENTITY_STATES = [...employeeRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { EmployeeComponent } from './employee.component'; +import { EmployeeDetailComponent } from './employee-detail.component'; +import { EmployeeUpdateComponent } from './employee-update.component'; +import { employeeRoute } from './employee.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [EmployeeComponent, EmployeeDetailComponent, EmployeeUpdateComponent], - entryComponents: [EmployeeComponent, EmployeeUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(employeeRoute)], + declarations: [EmployeeComponent, EmployeeDetailComponent, EmployeeUpdateComponent] }) -export class PrimengtestEmployeeModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestEmployeeModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.route.ts index 038b0c24..261ac78b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/employee.route.ts @@ -1,25 +1,31 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { IEmployee } from 'app/shared/model/employee.model'; import { EmployeeService } from './employee.service'; import { EmployeeComponent } from './employee.component'; import { EmployeeDetailComponent } from './employee-detail.component'; import { EmployeeUpdateComponent } from './employee-update.component'; -import { IEmployee } from 'app/shared/model/employee.model'; @Injectable({ providedIn: 'root' }) -export class EmployeeResolve implements Resolve { - constructor(private service: EmployeeService) {} +export class EmployeeResolve implements Resolve { + constructor(private service: EmployeeService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const username = route.params['username'] ? route.params['username'] : null; if (username) { return this.service.find(username).pipe( - filter((response: HttpResponse) => response.ok), - map((employee: HttpResponse) => employee.body) + flatMap((employee: HttpResponse) => { + if (employee.body) { + return of(employee.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/index.ts deleted file mode 100644 index a0e766f3..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/employee/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './employee.service'; -export * from './employee-update.component'; -export * from './employee-detail.component'; -export * from './employee.component'; -export * from './employee.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/entity.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/entity.module.ts index 2ed1197a..7a21fa46 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/entity.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/entity.module.ts @@ -1,4 +1,4 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; @NgModule({ @@ -35,10 +35,6 @@ import { RouterModule } from '@angular/router'; } /* jhipster-needle-add-entity-route - JHipster will add entity modules routes here */ ]) - ], - declarations: [], - entryComponents: [], - providers: [], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + ] }) export class PrimengtestEntityModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/index.ts deleted file mode 100644 index 219ef89d..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './price-formula.service'; -export * from './price-formula-update.component'; -export * from './price-formula-detail.component'; -export * from './price-formula.component'; -export * from './price-formula.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-detail.component.ts index 2f630a89..51f59831 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-detail.component.ts @@ -8,17 +8,17 @@ import { IPriceFormula } from 'app/shared/model/price-formula.model'; templateUrl: './price-formula-detail.component.html' }) export class PriceFormulaDetailComponent implements OnInit { - priceFormula: IPriceFormula; + priceFormula: IPriceFormula | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ priceFormula }) => { this.priceFormula = priceFormula; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-update.component.ts index 01b506a7..b89beb74 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula-update.component.ts @@ -1,9 +1,9 @@ import { Component, OnInit } from '@angular/core'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; -import { IPriceFormula, PriceFormula } from 'app/shared/model/price-formula.model'; +import { IPriceFormula } from 'app/shared/model/price-formula.model'; import { PriceFormulaService } from './price-formula.service'; @Component({ @@ -11,8 +11,8 @@ import { PriceFormulaService } from './price-formula.service'; templateUrl: './price-formula-update.component.html' }) export class PriceFormulaUpdateComponent implements OnInit { - edit: boolean; - isSaving: boolean; + edit = false; + isSaving = false; editForm = this.fb.group({ max: [null, [Validators.required]], @@ -21,14 +21,14 @@ export class PriceFormulaUpdateComponent implements OnInit { constructor(protected priceFormulaService: PriceFormulaService, protected activatedRoute: ActivatedRoute, private fb: FormBuilder) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ priceFormula }) => { this.updateForm(priceFormula); }); } - updateForm(priceFormula: IPriceFormula) { + updateForm(priceFormula: IPriceFormula | null): void { if (priceFormula) { this.edit = true; this.editForm.reset({ ...priceFormula }); @@ -37,11 +37,11 @@ export class PriceFormulaUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const priceFormula = this.editForm.value; if (this.edit) { @@ -51,16 +51,19 @@ export class PriceFormulaUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.component.ts index 0cd35268..655d71f1 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.component.ts @@ -16,15 +16,15 @@ import { Table } from 'primeng/table'; templateUrl: './price-formula.component.html' }) export class PriceFormulaComponent implements OnInit, OnDestroy { - priceFormulas: IPriceFormula[]; - eventSubscriber: Subscription; + priceFormulas?: IPriceFormula[]; + eventSubscriber?: Subscription; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - max: { matchMode: 'equals', unflatten: x => +x } + max: { matchMode: 'equals', unflatten: (x: string) => +x } }; @ViewChild('priceFormulaTable', { static: true }) - priceFormulaTable: Table; + priceFormulaTable!: Table; constructor( protected priceFormulaService: PriceFormulaService, @@ -34,35 +34,37 @@ export class PriceFormulaComponent implements OnInit, OnDestroy { protected translateService: TranslateService ) {} - ngOnInit() { + ngOnInit(): void { this.loadAll(); this.registerChangeInPriceFormulas(); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - loadAll() { + loadAll(): void { this.priceFormulaService .query() .pipe( filter((res: HttpResponse) => res.ok), - map((res: HttpResponse) => res.body) + map((res: HttpResponse) => res.body!) ) .subscribe( - (res: IPriceFormula[]) => { - this.priceFormulas = res; + (priceFormulas: IPriceFormula[]) => { + this.priceFormulas = priceFormulas; }, (res: HttpErrorResponse) => this.onError(res.message) ); } - filter(value, field) { + filter(value: any, field: string): void { this.priceFormulaTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(max: number) { + delete(max: number): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.priceFormula.delete.question', { id: max }), @@ -77,15 +79,15 @@ export class PriceFormulaComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: IPriceFormula) { - return item.max; + trackId(index: number, item: IPriceFormula): string { + return '' + item.max; } - registerChangeInPriceFormulas() { - this.eventSubscriber = this.eventManager.subscribe('priceFormulaListModification', response => this.loadAll()); + registerChangeInPriceFormulas(): void { + this.eventSubscriber = this.eventManager.subscribe('priceFormulaListModification', () => this.loadAll()); } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.module.ts index 4a55489b..1d423613 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { PriceFormulaComponent, PriceFormulaDetailComponent, PriceFormulaUpdateComponent, priceFormulaRoute } from './'; - -const ENTITY_STATES = [...priceFormulaRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { PriceFormulaComponent } from './price-formula.component'; +import { PriceFormulaDetailComponent } from './price-formula-detail.component'; +import { PriceFormulaUpdateComponent } from './price-formula-update.component'; +import { priceFormulaRoute } from './price-formula.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [PriceFormulaComponent, PriceFormulaDetailComponent, PriceFormulaUpdateComponent], - entryComponents: [PriceFormulaComponent, PriceFormulaUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(priceFormulaRoute)], + declarations: [PriceFormulaComponent, PriceFormulaDetailComponent, PriceFormulaUpdateComponent] }) -export class PrimengtestPriceFormulaModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestPriceFormulaModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.route.ts index c8fc23ac..42f36ee6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/price-formula/price-formula.route.ts @@ -1,25 +1,31 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { IPriceFormula } from 'app/shared/model/price-formula.model'; import { PriceFormulaService } from './price-formula.service'; import { PriceFormulaComponent } from './price-formula.component'; import { PriceFormulaDetailComponent } from './price-formula-detail.component'; import { PriceFormulaUpdateComponent } from './price-formula-update.component'; -import { IPriceFormula } from 'app/shared/model/price-formula.model'; @Injectable({ providedIn: 'root' }) -export class PriceFormulaResolve implements Resolve { - constructor(private service: PriceFormulaService) {} +export class PriceFormulaResolve implements Resolve { + constructor(private service: PriceFormulaService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const max = route.params['max'] ? route.params['max'] : null; if (max) { return this.service.find(max).pipe( - filter((response: HttpResponse) => response.ok), - map((priceFormula: HttpResponse) => priceFormula.body) + flatMap((priceFormula: HttpResponse) => { + if (priceFormula.body) { + return of(priceFormula.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/index.ts deleted file mode 100644 index 10faa1be..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './task-comment.service'; -export * from './task-comment-update.component'; -export * from './task-comment-detail.component'; -export * from './task-comment.component'; -export * from './task-comment.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-detail.component.ts index 02e35e08..f23b3d9b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-detail.component.ts @@ -8,17 +8,17 @@ import { ITaskComment } from 'app/shared/model/task-comment.model'; templateUrl: './task-comment-detail.component.html' }) export class TaskCommentDetailComponent implements OnInit { - taskComment: ITaskComment; + taskComment: ITaskComment | null = null; constructor(protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ taskComment }) => { this.taskComment = taskComment; }); } - previousState() { + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.html index 649daae2..5fc46c34 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.html @@ -3,7 +3,7 @@

    Create or edit a Task Comment

    - +
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.ts index 54da9038..6d6231df 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment-update.component.ts @@ -3,20 +3,20 @@ import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; -import { MessageService } from 'primeng/api'; -import { ITaskComment, TaskComment } from 'app/shared/model/task-comment.model'; +import { ITaskComment } from 'app/shared/model/task-comment.model'; import { TaskCommentService } from './task-comment.service'; +import { MessageService } from 'primeng/api'; import { ITask } from 'app/shared/model/task.model'; -import { TaskService } from 'app/entities/task'; +import { TaskService } from 'app/entities/task/task.service'; @Component({ selector: 'jhi-task-comment-update', templateUrl: './task-comment-update.component.html' }) export class TaskCommentUpdateComponent implements OnInit { - isSaving: boolean; - taskOptions: ITask[]; - taskFilterValue: any; + isSaving = false; + taskOptions: ITask[] | null = null; + taskFilterValue?: any; editForm = this.fb.group({ id: [], @@ -32,7 +32,7 @@ export class TaskCommentUpdateComponent implements OnInit { private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ taskComment }) => { this.updateForm(taskComment); @@ -40,11 +40,14 @@ export class TaskCommentUpdateComponent implements OnInit { this.loadAllTasks(); } - loadAllTasks() { - this.taskService.query().subscribe(res => (this.taskOptions = res.body), (res: HttpErrorResponse) => this.onError(res.message)); + loadAllTasks(): void { + this.taskService.query().subscribe( + (res: HttpResponse) => (this.taskOptions = res.body), + (res: HttpErrorResponse) => this.onError(res.message) + ); } - updateForm(taskComment: ITaskComment) { + updateForm(taskComment: ITaskComment | null): void { if (taskComment) { this.editForm.reset({ ...taskComment }); this.taskFilterValue = taskComment.taskId; @@ -53,11 +56,11 @@ export class TaskCommentUpdateComponent implements OnInit { } } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const taskComment = this.editForm.value; if (taskComment.id !== null) { @@ -67,19 +70,22 @@ export class TaskCommentUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.html index be9667e4..5e4659a1 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.html @@ -45,7 +45,7 @@

    {{taskComment.value}} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.ts index 1cf86503..a100f4e5 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.component.ts @@ -7,7 +7,7 @@ import { JhiEventManager } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; import { ITaskComment } from 'app/shared/model/task-comment.model'; import { TaskCommentService } from './task-comment.service'; -import { ITEMS_PER_PAGE } from 'app/shared'; +import { ITEMS_PER_PAGE } from 'app/shared/constants/pagination.constants'; import { computeFilterMatchMode, lazyLoadEventToServerQueryParams, @@ -17,7 +17,7 @@ import { import { ConfirmationService, LazyLoadEvent } from 'primeng/api'; import { TranslateService } from '@ngx-translate/core'; import { ITask } from 'app/shared/model/task.model'; -import { TaskService } from 'app/entities/task'; +import { TaskService } from 'app/entities/task/task.service'; import { Table } from 'primeng/table'; @Component({ @@ -25,21 +25,21 @@ import { Table } from 'primeng/table'; templateUrl: './task-comment.component.html' }) export class TaskCommentComponent implements OnInit, OnDestroy { - taskComments: ITaskComment[]; - eventSubscriber: Subscription; - taskOptions: ITask[]; + taskComments?: ITaskComment[]; + eventSubscriber?: Subscription; + taskOptions: ITask[] | null = null; - totalItems: number; - itemsPerPage: number; - loading: boolean; + totalItems?: number; + itemsPerPage!: number; + loading!: boolean; private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - id: { matchMode: 'equals', unflatten: x => +x }, + id: { matchMode: 'equals', unflatten: (x: string) => +x }, taskId: { matchMode: 'in', flatten: a => a.join(','), unflatten: a => a.split(',').map(x => +x) } }; @ViewChild('taskCommentTable', { static: true }) - taskCommentTable: Table; + taskCommentTable!: Table; constructor( protected taskCommentService: TaskCommentService, @@ -55,7 +55,7 @@ export class TaskCommentComponent implements OnInit, OnDestroy { this.loading = true; } - ngOnInit() { + ngOnInit(): void { this.loadAllTasks(); this.registerChangeInTaskComments(); this.activatedRoute.queryParams @@ -67,7 +67,7 @@ export class TaskCommentComponent implements OnInit, OnDestroy { ) .subscribe( (res: HttpResponse) => { - this.paginateTaskComments(res.body, res.headers); + this.paginateTaskComments(res.body!, res.headers); this.loading = false; }, (res: HttpErrorResponse) => { @@ -77,20 +77,22 @@ export class TaskCommentComponent implements OnInit, OnDestroy { ); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - onLazyLoadEvent(event: LazyLoadEvent) { + onLazyLoadEvent(event: LazyLoadEvent): void { const queryParams = lazyLoadEventToRouterQueryParams(event, this.filtersDetails); this.router.navigate(['/task-comment'], { queryParams }); } - filter(value, field) { + filter(value: any, field: string): void { this.taskCommentTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(id: number) { + delete(id: number): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.taskComment.delete.question', { id }), @@ -105,26 +107,26 @@ export class TaskCommentComponent implements OnInit, OnDestroy { }); } - loadAllTasks() { + loadAllTasks(): void { this.taskService.query().subscribe(res => (this.taskOptions = res.body)); } - trackId(index: number, item: ITaskComment) { - return item.id; + trackId(index: number, item: ITaskComment): string { + return '' + item.id; } - registerChangeInTaskComments() { - this.eventSubscriber = this.eventManager.subscribe('taskCommentListModification', response => + registerChangeInTaskComments(): void { + this.eventSubscriber = this.eventManager.subscribe('taskCommentListModification', () => this.router.navigate(['/task-comment'], { queryParams: { r: Date.now() } }) ); } - protected paginateTaskComments(data: ITaskComment[], headers: HttpHeaders) { - this.totalItems = parseInt(headers.get('X-Total-Count'), 10); + protected paginateTaskComments(data: ITaskComment[], headers: HttpHeaders): void { + this.totalItems = Number(headers.get('X-Total-Count')); this.taskComments = data; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.module.ts index 86597965..c5bc5b88 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { TaskCommentComponent, TaskCommentDetailComponent, TaskCommentUpdateComponent, taskCommentRoute } from './'; - -const ENTITY_STATES = [...taskCommentRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { TaskCommentComponent } from './task-comment.component'; +import { TaskCommentDetailComponent } from './task-comment-detail.component'; +import { TaskCommentUpdateComponent } from './task-comment-update.component'; +import { taskCommentRoute } from './task-comment.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [TaskCommentComponent, TaskCommentDetailComponent, TaskCommentUpdateComponent], - entryComponents: [TaskCommentComponent, TaskCommentUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(taskCommentRoute)], + declarations: [TaskCommentComponent, TaskCommentDetailComponent, TaskCommentUpdateComponent] }) -export class PrimengtestTaskCommentModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestTaskCommentModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.route.ts index 5b1bafdb..a040e8b2 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task-comment/task-comment.route.ts @@ -1,25 +1,31 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { ITaskComment } from 'app/shared/model/task-comment.model'; import { TaskCommentService } from './task-comment.service'; import { TaskCommentComponent } from './task-comment.component'; import { TaskCommentDetailComponent } from './task-comment-detail.component'; import { TaskCommentUpdateComponent } from './task-comment-update.component'; -import { ITaskComment } from 'app/shared/model/task-comment.model'; @Injectable({ providedIn: 'root' }) -export class TaskCommentResolve implements Resolve { - constructor(private service: TaskCommentService) {} +export class TaskCommentResolve implements Resolve { + constructor(private service: TaskCommentService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.params['id'] ? route.params['id'] : null; if (id) { return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((taskComment: HttpResponse) => taskComment.body) + flatMap((taskComment: HttpResponse) => { + if (taskComment.body) { + return of(taskComment.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/index.ts deleted file mode 100644 index 1ab6fd15..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './task.service'; -export * from './task-update.component'; -export * from './task-detail.component'; -export * from './task.component'; -export * from './task.route'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.html index 35edaf7e..137d36d0 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.html @@ -35,14 +35,14 @@

    Task {{task.id}
    Attachment
    - open + open {{task.attachmentContentType}}, {{byteSize(task.attachment)}}
    Picture
    - + task image {{task.pictureContentType}}, {{byteSize(task.picture)}} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.ts index cb70532a..5dc92be9 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-detail.component.ts @@ -9,24 +9,25 @@ import { ITask } from 'app/shared/model/task.model'; templateUrl: './task-detail.component.html' }) export class TaskDetailComponent implements OnInit { - task: ITask; + task: ITask | null = null; constructor(protected dataUtils: JhiDataUtils, protected activatedRoute: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.activatedRoute.data.subscribe(({ task }) => { this.task = task; }); } - byteSize(field) { - return this.dataUtils.byteSize(field); + byteSize(base64String: string): string { + return this.dataUtils.byteSize(base64String); } - openFile(contentType, field) { - return this.dataUtils.openFile(contentType, field); + openFile(contentType: string, base64String: string): void { + this.dataUtils.openFile(contentType, base64String); } - previousState() { + + previousState(): void { window.history.back(); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.html index 233bf277..7e3fe625 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.html @@ -3,7 +3,7 @@

    Create or edit a Task

    - +
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.ts index 5e3fd2ae..c428d2f9 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task-update.component.ts @@ -1,22 +1,23 @@ -import { Component, OnInit, ElementRef } from '@angular/core'; -import { HttpResponse, HttpErrorResponse } from '@angular/common/http'; +import { Component, OnInit } from '@angular/core'; +import { HttpResponse } from '@angular/common/http'; import { FormBuilder, Validators } from '@angular/forms'; import { ActivatedRoute } from '@angular/router'; import { Observable } from 'rxjs'; import { JhiDataUtils } from 'ng-jhipster'; -import { MessageService } from 'primeng/api'; -import { ITask, Task, TASK_TYPE_ARRAY } from 'app/shared/model/task.model'; +import { ITask } from 'app/shared/model/task.model'; +import { TaskType, TASK_TYPE_ARRAY } from 'app/shared/model/enumerations/task-type.model'; import { TaskService } from './task.service'; +import { MessageService } from 'primeng/api'; @Component({ selector: 'jhi-task-update', templateUrl: './task-update.component.html' }) export class TaskUpdateComponent implements OnInit { - isSaving: boolean; - typeOptions = TASK_TYPE_ARRAY.map(s => ({ label: s.toString(), value: s })); - attachmentFile: File; - pictureFile: File; + isSaving = false; + typeOptions = TASK_TYPE_ARRAY.map((s: TaskType) => ({ label: s.toString(), value: s })); + attachmentFile?: File; + pictureFile?: File; editForm = this.fb.group({ id: [], @@ -41,26 +42,26 @@ export class TaskUpdateComponent implements OnInit { private fb: FormBuilder ) {} - ngOnInit() { + ngOnInit(): void { this.isSaving = false; this.activatedRoute.data.subscribe(({ task }) => { this.updateForm(task); }); } - updateForm(task: ITask) { + updateForm(task: ITask | null): void { if (task) { this.editForm.reset({ ...task }); if (task.attachment) { fetch(`data:${task.attachmentContentType};base64,${task.attachment}`) - .then(res => res.blob()) + .then((res: any) => res.blob()) .then(blob => { this.attachmentFile = new File([blob], '', { type: task.attachmentContentType }); }); } if (task.picture) { fetch(`data:${task.pictureContentType};base64,${task.picture}`) - .then(res => res.blob()) + .then((res: any) => res.blob()) .then(blob => { this.pictureFile = new File([blob], '', { type: task.pictureContentType }); }); @@ -72,9 +73,9 @@ export class TaskUpdateComponent implements OnInit { } } - onFileSelect(event, field) { + onFileSelect(event: { event: Event; files: File[] }, field: string): void { const file = event.files[0]; - this.dataUtils.toBase64(file, base64Data => { + this.dataUtils.toBase64(file, (base64Data: string) => { this.editForm.patchValue({ [field]: base64Data, [field + 'ContentType']: file.type @@ -82,18 +83,18 @@ export class TaskUpdateComponent implements OnInit { }); } - onFileRemove(event, field) { + onFileRemove(event: { event: Event; files: File[] }, field: string): void { this.editForm.patchValue({ [field]: null, [field + 'ContentType']: null }); } - previousState() { + previousState(): void { window.history.back(); } - save() { + save(): void { this.isSaving = true; const task = this.editForm.value; if (task.id !== null) { @@ -103,19 +104,22 @@ export class TaskUpdateComponent implements OnInit { } } - protected subscribeToSaveResponse(result: Observable>) { - result.subscribe(() => this.onSaveSuccess(), () => this.onSaveError()); + protected subscribeToSaveResponse(result: Observable>): void { + result.subscribe( + () => this.onSaveSuccess(), + () => this.onSaveError() + ); } - protected onSaveSuccess() { + protected onSaveSuccess(): void { this.isSaving = false; this.previousState(); } - protected onSaveError() { + protected onSaveError(): void { this.isSaving = false; } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.component.ts index 62042cea..2c5b0fb3 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.component.ts @@ -4,7 +4,8 @@ import { Subscription } from 'rxjs'; import { filter, map } from 'rxjs/operators'; import { JhiEventManager, JhiDataUtils } from 'ng-jhipster'; import { MessageService } from 'primeng/api'; -import { ITask, TASK_TYPE_ARRAY } from 'app/shared/model/task.model'; +import { ITask } from 'app/shared/model/task.model'; +import { TaskType, TASK_TYPE_ARRAY } from 'app/shared/model/enumerations/task-type.model'; import { TaskService } from './task.service'; import { computeFilterMatchMode } from 'app/shared/util/request-util'; import { ConfirmationService } from 'primeng/api'; @@ -17,21 +18,21 @@ import { DatePipe } from '@angular/common'; templateUrl: './task.component.html' }) export class TaskComponent implements OnInit, OnDestroy { - tasks: ITask[]; - eventSubscriber: Subscription; - typeOptions = TASK_TYPE_ARRAY.map(s => ({ label: s.toString(), value: s })); + tasks?: ITask[]; + eventSubscriber?: Subscription; + typeOptions = TASK_TYPE_ARRAY.map((s: TaskType) => ({ label: s.toString(), value: s })); private filtersDetails: { [_: string]: { matchMode?: string; flatten?: (_: any) => string; unflatten?: (_: string) => any } } = { - id: { matchMode: 'equals', unflatten: x => +x }, + id: { matchMode: 'equals', unflatten: (x: string) => +x }, type: { matchMode: 'in' }, - endDate: { matchMode: 'between', flatten: a => a.filter(x => x).join(','), unflatten: a => a.split(',') }, - createdAt: { matchMode: 'between', flatten: a => a.filter(x => x).join(','), unflatten: a => a.split(',') }, - modifiedAt: { matchMode: 'between', flatten: a => a.filter(x => x).join(','), unflatten: a => a.split(',') }, - done: { matchMode: 'equals', unflatten: x => x === 'true' } + endDate: { matchMode: 'between', flatten: a => a.filter((x: string) => x).join(','), unflatten: (a: string) => a.split(',') }, + createdAt: { matchMode: 'between', flatten: a => a.filter((x: string) => x).join(','), unflatten: (a: string) => a.split(',') }, + modifiedAt: { matchMode: 'between', flatten: a => a.filter((x: string) => x).join(','), unflatten: (a: string) => a.split(',') }, + done: { matchMode: 'equals', unflatten: (x: string) => x === 'true' } }; @ViewChild('taskTable', { static: true }) - taskTable: Table; + taskTable!: Table; constructor( protected taskService: TaskService, @@ -43,35 +44,37 @@ export class TaskComponent implements OnInit, OnDestroy { protected datePipe: DatePipe ) {} - ngOnInit() { + ngOnInit(): void { this.loadAll(); this.registerChangeInTasks(); } - ngOnDestroy() { - this.eventManager.destroy(this.eventSubscriber); + ngOnDestroy(): void { + if (this.eventSubscriber) { + this.eventManager.destroy(this.eventSubscriber); + } } - loadAll() { + loadAll(): void { this.taskService .query() .pipe( filter((res: HttpResponse) => res.ok), - map((res: HttpResponse) => res.body) + map((res: HttpResponse) => res.body!) ) .subscribe( - (res: ITask[]) => { - this.tasks = res; + (tasks: ITask[]) => { + this.tasks = tasks; }, (res: HttpErrorResponse) => this.onError(res.message) ); } - filter(value, field) { + filter(value: any, field: string): void { this.taskTable.filter(value, field, computeFilterMatchMode(this.filtersDetails[field])); } - delete(id: number) { + delete(id: number): void { this.confirmationService.confirm({ header: this.translateService.instant('entity.delete.title'), message: this.translateService.instant('primengtestApp.task.delete.question', { id }), @@ -86,23 +89,23 @@ export class TaskComponent implements OnInit, OnDestroy { }); } - trackId(index: number, item: ITask) { - return item.id; + trackId(index: number, item: ITask): string { + return '' + item.id; } - byteSize(field) { + byteSize(field: string): string { return this.dataUtils.byteSize(field); } - openFile(contentType, field) { - return this.dataUtils.openFile(contentType, field); + openFile(contentType: string, field: string): void { + this.dataUtils.openFile(contentType, field); } - registerChangeInTasks() { - this.eventSubscriber = this.eventManager.subscribe('taskListModification', response => this.loadAll()); + registerChangeInTasks(): void { + this.eventSubscriber = this.eventManager.subscribe('taskListModification', () => this.loadAll()); } - protected onError(errorMessage: string) { + protected onError(errorMessage: string): void { this.messageService.add({ severity: 'error', summary: errorMessage }); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.module.ts index 869b6fa8..066c9103 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.module.ts @@ -1,26 +1,14 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { JhiLanguageService } from 'ng-jhipster'; -import { JhiLanguageHelper } from 'app/core'; -import { PrimengtestSharedModule } from 'app/shared'; -import { TaskComponent, TaskDetailComponent, TaskUpdateComponent, taskRoute } from './'; - -const ENTITY_STATES = [...taskRoute]; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { TaskComponent } from './task.component'; +import { TaskDetailComponent } from './task-detail.component'; +import { TaskUpdateComponent } from './task-update.component'; +import { taskRoute } from './task.route'; @NgModule({ - imports: [PrimengtestSharedModule, RouterModule.forChild(ENTITY_STATES)], - declarations: [TaskComponent, TaskDetailComponent, TaskUpdateComponent], - entryComponents: [TaskComponent, TaskUpdateComponent], - providers: [{ provide: JhiLanguageService, useClass: JhiLanguageService }], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + imports: [PrimengtestSharedModule, RouterModule.forChild(taskRoute)], + declarations: [TaskComponent, TaskDetailComponent, TaskUpdateComponent] }) -export class PrimengtestTaskModule { - constructor(private languageService: JhiLanguageService, private languageHelper: JhiLanguageHelper) { - this.languageHelper.language.subscribe((languageKey: string) => { - if (languageKey !== undefined) { - this.languageService.changeLanguage(languageKey); - } - }); - } -} +export class PrimengtestTaskModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.route.ts index 371a80b9..fe94abad 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.route.ts @@ -1,25 +1,31 @@ import { Injectable } from '@angular/core'; import { HttpResponse } from '@angular/common/http'; -import { Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Routes } from '@angular/router'; -import { UserRouteAccessService } from 'app/core'; -import { Observable, of } from 'rxjs'; -import { filter, map } from 'rxjs/operators'; +import { Resolve, ActivatedRouteSnapshot, Routes, Router } from '@angular/router'; +import { Observable, of, EMPTY } from 'rxjs'; +import { flatMap } from 'rxjs/operators'; +import { UserRouteAccessService } from 'app/core/auth/user-route-access-service'; +import { ITask } from 'app/shared/model/task.model'; import { TaskService } from './task.service'; import { TaskComponent } from './task.component'; import { TaskDetailComponent } from './task-detail.component'; import { TaskUpdateComponent } from './task-update.component'; -import { ITask } from 'app/shared/model/task.model'; @Injectable({ providedIn: 'root' }) -export class TaskResolve implements Resolve { - constructor(private service: TaskService) {} +export class TaskResolve implements Resolve { + constructor(private service: TaskService, private router: Router) {} - resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable { + resolve(route: ActivatedRouteSnapshot): Observable { const id = route.params['id'] ? route.params['id'] : null; if (id) { return this.service.find(id).pipe( - filter((response: HttpResponse) => response.ok), - map((task: HttpResponse) => task.body) + flatMap((task: HttpResponse) => { + if (task.body) { + return of(task.body); + } else { + this.router.navigate(['404']); + return EMPTY; + } + }) ); } return of(null); diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.service.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.service.ts index 441437bf..f07d9561 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.service.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/entities/task/task.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpResponse } from '@angular/common/http'; import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; import { DatePipe } from '@angular/common'; import { DATE_FORMAT } from 'app/shared/constants/input.constants'; -import { map } from 'rxjs/operators'; import { SERVER_API_URL } from 'app/app.constants'; import { createRequestOption } from 'app/shared/util/request-util'; import { ITask } from 'app/shared/model/task.model'; @@ -50,18 +50,18 @@ export class TaskService { protected convertDateFromClient(task: ITask): ITask { const copy: ITask = Object.assign({}, task, { - endDate: task.endDate != null ? this.datePipe.transform(task.endDate, DATE_FORMAT) : null, - createdAt: task.createdAt != null ? task.createdAt.toISOString() : null, - modifiedAt: task.modifiedAt != null ? task.modifiedAt.toISOString() : null + endDate: task.endDate != null ? this.datePipe.transform(task.endDate, DATE_FORMAT) : undefined, + createdAt: task.createdAt != null ? task.createdAt.toISOString() : undefined, + modifiedAt: task.modifiedAt != null ? task.modifiedAt.toISOString() : undefined }); return copy; } protected convertDateFromServer(res: EntityResponseType): EntityResponseType { if (res.body) { - res.body.endDate = res.body.endDate != null ? new Date(res.body.endDate) : null; - res.body.createdAt = res.body.createdAt != null ? new Date(res.body.createdAt) : null; - res.body.modifiedAt = res.body.modifiedAt != null ? new Date(res.body.modifiedAt) : null; + res.body.endDate = res.body.endDate ? new Date(res.body.endDate) : undefined; + res.body.createdAt = res.body.createdAt ? new Date(res.body.createdAt) : undefined; + res.body.modifiedAt = res.body.modifiedAt ? new Date(res.body.modifiedAt) : undefined; } return res; } @@ -69,9 +69,9 @@ export class TaskService { protected convertDateArrayFromServer(res: EntityArrayResponseType): EntityArrayResponseType { if (res.body) { res.body.forEach((task: ITask) => { - task.endDate = task.endDate != null ? new Date(task.endDate) : null; - task.createdAt = task.createdAt != null ? new Date(task.createdAt) : null; - task.modifiedAt = task.modifiedAt != null ? new Date(task.modifiedAt) : null; + task.endDate = task.endDate ? new Date(task.endDate) : undefined; + task.createdAt = task.createdAt ? new Date(task.createdAt) : undefined; + task.modifiedAt = task.modifiedAt ? new Date(task.modifiedAt) : undefined; }); } return res; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.html index 46417688..7bdeeb27 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.html @@ -18,7 +18,7 @@

    Welcome, Java Hipster!

    You don't have an account yet?  - Register a new account + Register a new account
    @@ -27,15 +27,15 @@

    Welcome, Java Hipster!

    - If you like JHipster, don't forget to give us a star on GitHub! + If you like JHipster, don't forget to give us a star on GitHub!

    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.ts index de9c9e5b..d6f4469b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.component.ts @@ -1,44 +1,36 @@ -import { Component, OnInit } from '@angular/core'; -import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; -import { JhiEventManager } from 'ng-jhipster'; +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Subscription } from 'rxjs'; -import { LoginModalService, AccountService, Account } from 'app/core'; +import { LoginModalService } from 'app/core/login/login-modal.service'; +import { AccountService } from 'app/core/auth/account.service'; +import { Account } from 'app/core/user/account.model'; @Component({ selector: 'jhi-home', templateUrl: './home.component.html', styleUrls: ['home.scss'] }) -export class HomeComponent implements OnInit { - account: Account; - modalRef: NgbModalRef; +export class HomeComponent implements OnInit, OnDestroy { + account: Account | null = null; + authSubscription?: Subscription; - constructor( - private accountService: AccountService, - private loginModalService: LoginModalService, - private eventManager: JhiEventManager - ) {} + constructor(private accountService: AccountService, private loginModalService: LoginModalService) {} - ngOnInit() { - this.accountService.identity().then((account: Account) => { - this.account = account; - }); - this.registerAuthenticationSuccess(); + ngOnInit(): void { + this.authSubscription = this.accountService.getAuthenticationState().subscribe(account => (this.account = account)); } - registerAuthenticationSuccess() { - this.eventManager.subscribe('authenticationSuccess', message => { - this.accountService.identity().then(account => { - this.account = account; - }); - }); + isAuthenticated(): boolean { + return this.accountService.isAuthenticated(); } - isAuthenticated() { - return this.accountService.isAuthenticated(); + login(): void { + this.loginModalService.open(); } - login() { - this.modalRef = this.loginModalService.open(); + ngOnDestroy(): void { + if (this.authSubscription) { + this.authSubscription.unsubscribe(); + } } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.module.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.module.ts index eeeb5971..9c27de10 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.module.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.module.ts @@ -1,12 +1,12 @@ -import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; +import { NgModule } from '@angular/core'; import { RouterModule } from '@angular/router'; -import { PrimengtestSharedModule } from 'app/shared'; -import { HOME_ROUTE, HomeComponent } from './'; +import { PrimengtestSharedModule } from 'app/shared/shared.module'; +import { HOME_ROUTE } from './home.route'; +import { HomeComponent } from './home.component'; @NgModule({ imports: [PrimengtestSharedModule, RouterModule.forChild([HOME_ROUTE])], - declarations: [HomeComponent], - schemas: [CUSTOM_ELEMENTS_SCHEMA] + declarations: [HomeComponent] }) export class PrimengtestHomeModule {} diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.route.ts index 4b2de085..aefa2b7e 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/home.route.ts @@ -1,6 +1,6 @@ import { Route } from '@angular/router'; -import { HomeComponent } from './'; +import { HomeComponent } from './home.component'; export const HOME_ROUTE: Route = { path: '', diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/home/index.ts deleted file mode 100644 index d76285b2..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/home/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './home.component'; -export * from './home.route'; -export * from './home.module'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.html index 2b37c4fb..40cdfb5b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.html @@ -6,13 +6,8 @@

    Error Page!

    -
    -
    {{errorMessage}} -
    -
    -
    You are not authorized to access this page. -
    -
    The page does not exist. +
    +
    {{ errorMessage }}
    diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.ts index 08ecdf6e..cb3dfe2a 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.component.ts @@ -1,28 +1,39 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; +import { Subscription } from 'rxjs'; +import { TranslateService } from '@ngx-translate/core'; @Component({ selector: 'jhi-error', templateUrl: './error.component.html' }) -export class ErrorComponent implements OnInit { - errorMessage: string; - error403: boolean; - error404: boolean; +export class ErrorComponent implements OnInit, OnDestroy { + errorMessage?: string; + errorKey?: string; + langChangeSubscription?: Subscription; - constructor(private route: ActivatedRoute) {} + constructor(private translateService: TranslateService, private route: ActivatedRoute) {} - ngOnInit() { + ngOnInit(): void { this.route.data.subscribe(routeData => { - if (routeData.error403) { - this.error403 = routeData.error403; - } - if (routeData.error404) { - this.error404 = routeData.error404; - } if (routeData.errorMessage) { - this.errorMessage = routeData.errorMessage; + this.errorKey = routeData.errorMessage; + this.getErrorMessageTranslation(); + this.langChangeSubscription = this.translateService.onLangChange.subscribe(() => this.getErrorMessageTranslation()); } }); } + + ngOnDestroy(): void { + if (this.langChangeSubscription) { + this.langChangeSubscription.unsubscribe(); + } + } + + private getErrorMessageTranslation(): void { + this.errorMessage = ''; + if (this.errorKey) { + this.translateService.get(this.errorKey).subscribe(translatedErrorMessage => (this.errorMessage = translatedErrorMessage)); + } + } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.route.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.route.ts index 0f159df8..4828cc7d 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.route.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/error/error.route.ts @@ -17,7 +17,7 @@ export const errorRoute: Routes = [ data: { authorities: [], pageTitle: 'error.title', - error403: true + errorMessage: 'error.http.403' } }, { @@ -26,7 +26,7 @@ export const errorRoute: Routes = [ data: { authorities: [], pageTitle: 'error.title', - error404: true + errorMessage: 'error.http.404' } }, { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/index.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/index.ts deleted file mode 100644 index d7432602..00000000 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -export * from './error/error.component'; -export * from './error/error.route'; -export * from './main/main.component'; -export * from './footer/footer.component'; -export * from './navbar/navbar.component'; -export * from './navbar/navbar.route'; -export * from './navbar/active-menu.directive'; -export * from './profiles/page-ribbon.component'; -export * from './profiles/profile.service'; -export * from './profiles/profile-info.model'; diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/main/main.component.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/main/main.component.ts index eb679f2e..310c39f6 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/main/main.component.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/main/main.component.ts @@ -1,31 +1,51 @@ import { Component, OnInit } from '@angular/core'; +import { Title } from '@angular/platform-browser'; import { Router, ActivatedRouteSnapshot, NavigationEnd, NavigationError } from '@angular/router'; +import { TranslateService } from '@ngx-translate/core'; -import { JhiLanguageHelper } from 'app/core'; +import { AccountService } from 'app/core/auth/account.service'; @Component({ selector: 'jhi-main', templateUrl: './main.component.html' }) -export class JhiMainComponent implements OnInit { - constructor(private jhiLanguageHelper: JhiLanguageHelper, private router: Router) {} +export class MainComponent implements OnInit { + constructor( + private accountService: AccountService, + private translateService: TranslateService, + private titleService: Title, + private router: Router + ) {} - private getPageTitle(routeSnapshot: ActivatedRouteSnapshot) { - let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : 'primengtestApp'; - if (routeSnapshot.firstChild) { - title = this.getPageTitle(routeSnapshot.firstChild) || title; - } - return title; - } + ngOnInit(): void { + // try to log in automatically + this.accountService.identity().subscribe(); - ngOnInit() { this.router.events.subscribe(event => { if (event instanceof NavigationEnd) { - this.jhiLanguageHelper.updateTitle(this.getPageTitle(this.router.routerState.snapshot.root)); + this.updateTitle(); } if (event instanceof NavigationError && event.error.status === 404) { this.router.navigate(['/404']); } }); + + this.translateService.onLangChange.subscribe(() => this.updateTitle()); + } + + private getPageTitle(routeSnapshot: ActivatedRouteSnapshot): string { + let title: string = routeSnapshot.data && routeSnapshot.data['pageTitle'] ? routeSnapshot.data['pageTitle'] : ''; + if (routeSnapshot.firstChild) { + title = this.getPageTitle(routeSnapshot.firstChild) || title; + } + return title; + } + + private updateTitle(): void { + let pageTitle = this.getPageTitle(this.router.routerState.snapshot.root); + if (!pageTitle) { + pageTitle = 'global.title'; + } + this.translateService.get(pageTitle).subscribe(title => this.titleService.setTitle(title)); } } diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/active-menu.directive.ts b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/active-menu.directive.ts index 6e90bb13..0f59f70b 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/active-menu.directive.ts +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/active-menu.directive.ts @@ -5,18 +5,18 @@ import { TranslateService, LangChangeEvent } from '@ngx-translate/core'; selector: '[jhiActiveMenu]' }) export class ActiveMenuDirective implements OnInit { - @Input() jhiActiveMenu: string; + @Input() jhiActiveMenu?: string; constructor(private el: ElementRef, private renderer: Renderer, private translateService: TranslateService) {} - ngOnInit() { + ngOnInit(): void { this.translateService.onLangChange.subscribe((event: LangChangeEvent) => { this.updateActiveFlag(event.lang); }); this.updateActiveFlag(this.translateService.currentLang); } - updateActiveFlag(selectedLanguage) { + updateActiveFlag(selectedLanguage: string): void { if (this.jhiActiveMenu === selectedLanguage) { this.renderer.setElementClass(this.el.nativeElement, 'active', true); } else { diff --git a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/navbar.component.html b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/navbar.component.html index d2507470..1328edbe 100644 --- a/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/navbar.component.html +++ b/test/samples/primeng-blueprint-test/src/main/webapp/app/layouts/navbar/navbar.component.html @@ -17,7 +17,7 @@ - -
  • - + Metrics
  • - + Health
  • - + Configuration @@ -131,7 +131,7 @@
  • - -