From b856d1a767a70bd0810cc6075b7a6feba3e0440e Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 8 Jun 2020 13:44:30 +0200 Subject: [PATCH 01/16] fix bugs --- coderadar-ui/package-lock.json | 5185 +++++++++-------- .../autosuggest-wrapper.component.scss | 14 - .../comparison-panel.component.html | 6 +- .../tooltip/tooltip.component.html | 6 +- .../tooltip/tooltip.component.ts | 2 +- .../view/file-view/file-view.component.html | 8 +- .../main-dashboard/delete-project-dialog.html | 2 +- .../main-dashboard.component.html | 2 +- .../list-view/list-view.component.ts | 2 +- .../view-commit/view-commit.component.html | 6 +- 10 files changed, 2651 insertions(+), 2582 deletions(-) diff --git a/coderadar-ui/package-lock.json b/coderadar-ui/package-lock.json index 7262c7530..711ff507b 100644 --- a/coderadar-ui/package-lock.json +++ b/coderadar-ui/package-lock.json @@ -5,12 +5,12 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", - "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.10.tgz", + "integrity": "sha512-FC+YmeXwFdNMmqnX1nIOkXBQMxWQSbgYz5crWcb7FtOWTNH1IgM/22tZ6lpf3kiAfTtBbnb7oTkA4Y69nUaoQg==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.9", + "@angular-devkit/core": "7.3.10", "rxjs": "6.3.3" }, "dependencies": { @@ -26,21 +26,21 @@ } }, "@angular-devkit/build-angular": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.9.tgz", - "integrity": "sha512-onh07LhdxotDFjja0KKsDWNCwgpM/ymuRr5h0e+vT4AgklP2Uioz1CpzVOgxPIKkdVdGR9QgDinVsWAmY90J8g==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.10.tgz", + "integrity": "sha512-wBWZJh89pPHE06WRoUJ+tdGk+yyMGM+3j0I2gduoxmGvgXXjf48tM4QbXZZSJbHkOeYlCiuP/wiVyTkshzCwGA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.9", - "@angular-devkit/build-optimizer": "0.13.9", - "@angular-devkit/build-webpack": "0.13.9", - "@angular-devkit/core": "7.3.9", - "@ngtools/webpack": "7.3.9", + "@angular-devkit/architect": "0.13.10", + "@angular-devkit/build-optimizer": "0.13.10", + "@angular-devkit/build-webpack": "0.13.10", + "@angular-devkit/core": "7.3.10", + "@ngtools/webpack": "7.3.10", "ajv": "6.9.1", "autoprefixer": "9.4.6", "circular-dependency-plugin": "5.0.2", "clean-css": "4.2.1", - "copy-webpack-plugin": "4.6.0", + "copy-webpack-plugin": "5.1.1", "file-loader": "3.0.1", "glob": "7.1.3", "istanbul-instrumenter-loader": "3.0.1", @@ -51,7 +51,7 @@ "loader-utils": "1.2.3", "mini-css-extract-plugin": "0.5.0", "minimatch": "3.0.4", - "node-sass": "4.12.0", + "node-sass": "4.13.1", "open": "6.0.0", "parse5": "4.0.0", "postcss": "7.0.14", @@ -68,8 +68,8 @@ "style-loader": "0.23.1", "stylus": "0.54.5", "stylus-loader": "3.0.2", - "terser-webpack-plugin": "1.2.2", - "tree-kill": "1.2.1", + "terser-webpack-plugin": "1.4.3", + "tree-kill": "1.2.2", "webpack": "4.29.0", "webpack-dev-middleware": "3.5.1", "webpack-dev-server": "3.1.14", @@ -78,6 +78,44 @@ "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + } + }, + "parse5": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", + "dev": true + }, "rxjs": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", @@ -86,13 +124,19 @@ "requires": { "tslib": "^1.9.0" } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true } } }, "@angular-devkit/build-optimizer": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.9.tgz", - "integrity": "sha512-GQtCntthQHSBv5l1ZY5p00JOECb/WcE1qUBo5kFjp84z0fszDkhOy52M1kcWCX4PFzJaY4DKk58hbUE/2UN0jw==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.10.tgz", + "integrity": "sha512-BbavzPeuq6Sy9uC7FwOQ4DhxXvd8xsFkW8t8bXemQwHFP3BqrulxvelVfStJMN6dvXlC3BKXzFQjSX7wAocSdA==", "dev": true, "requires": { "loader-utils": "1.2.3", @@ -110,13 +154,13 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.9.tgz", - "integrity": "sha512-6ypu6pzNmQxzATF4rTWEhGSl5hyGQ8a/3aCZF/ux+XGc3d4hi2HW+NWlDm1UEna6ZjNtgEPlgfP4q8BKrjRmfA==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.10.tgz", + "integrity": "sha512-TiNW1qLRePWORdme1tglAqK1xnAsyqxDQ5qmo3zPyyw1v253CG+yS2kAEAqiHPKwz8E3h9ETNPoaz6jcaAEWeg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.9", - "@angular-devkit/core": "7.3.9", + "@angular-devkit/architect": "0.13.10", + "@angular-devkit/core": "7.3.10", "rxjs": "6.3.3" }, "dependencies": { @@ -132,9 +176,9 @@ } }, "@angular-devkit/core": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", - "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "version": "7.3.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.10.tgz", + "integrity": "sha512-h8Yj2+UfBsPI7jZ8X88tImO/7RPgNWUcKF8Uq/J5eUSN6z0FMO0lluD4sM7X8aikb7RK8MwkwrqB/xfxvvkOow==", "dev": true, "requires": { "ajv": "6.9.1", @@ -144,6 +188,30 @@ "source-map": "0.7.3" }, "dependencies": { + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, "rxjs": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", @@ -152,16 +220,22 @@ "requires": { "tslib": "^1.9.0" } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, "@angular-devkit/schematics": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.9.tgz", - "integrity": "sha512-xzROGCYp7aQbeJ3V6YC0MND7wKEAdWqmm/GaCufEk0dDS8ZGe0sQhcM2oBRa2nQqGQNeThFIH51kx+FayrJP0w==", + "version": "7.3.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.10.tgz", + "integrity": "sha512-LMTGQ8kJb80LjTttu0ZqWXddzYtDwjKtMKY9X0A60Iz8/wbGl0j+wYG7KAVoRF0JeieYXs8Dl9KWdjyJyvJ/RA==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.9", + "@angular-devkit/core": "7.3.10", "rxjs": "6.3.3" }, "dependencies": { @@ -177,9 +251,9 @@ } }, "@angular/animations": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.15.tgz", - "integrity": "sha512-8oBt3HLgd2+kyJHUgsd7OzKCCss67t2sch15XNoIWlOLfxclqU+EfFE6t/vCzpT8/+lpZS6LU9ZrTnb+UBj5jg==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.16.tgz", + "integrity": "sha512-jH7haM3Hgtn1EW9b0Vfq6UqSz+rx3l7k+gJi9tuHEOPZdBTjtv3sNQxmM0IKxzOuTfM8KhRFkUlzyi43kfdp0w==", "requires": { "tslib": "^1.9.0" } @@ -191,27 +265,19 @@ "requires": { "parse5": "^5.0.0", "tslib": "^1.7.1" - }, - "dependencies": { - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "optional": true - } } }, "@angular/cli": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.9.tgz", - "integrity": "sha512-7oJj7CKDlFUbQav1x1CV4xKKcbt0pnxY4unKcm7Q1tVXhu8bU2bc3cDA0aJnbofcYb6TJcd/C2qHgCt78q7edA==", + "version": "7.3.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.10.tgz", + "integrity": "sha512-ikSwYa3Pc8GkfyoQ+bzblxyuPnKzNYD6SRVbO4CXUbTJB+NmOCNEV3LTwwMANVBp4Z6fBMdUZccJdFbT4FbG2Q==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.9", - "@angular-devkit/core": "7.3.9", - "@angular-devkit/schematics": "7.3.9", - "@schematics/angular": "7.3.9", - "@schematics/update": "0.13.9", + "@angular-devkit/architect": "0.13.10", + "@angular-devkit/core": "7.3.10", + "@angular-devkit/schematics": "7.3.10", + "@schematics/angular": "7.3.10", + "@schematics/update": "0.13.10", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "inquirer": "6.2.1", @@ -220,28 +286,36 @@ "pacote": "9.4.0", "semver": "5.6.0", "symbol-observable": "1.2.0" + }, + "dependencies": { + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true + } } }, "@angular/common": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.15.tgz", - "integrity": "sha512-2b5JY2HWVHCf3D1GZjmde7jdAXSTXkYtmjLtA9tQkjOOTr80eHpNSujQqnzb97dk9VT9OjfjqTQd7K3pxZz8jw==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.16.tgz", + "integrity": "sha512-lPo2Vt5zmKeKTdMxHMUuViouMiK4QsmO6dGTIhJ7QAx9mov0QYb4sUVKN9Ix32Aeeznaa97qJnhevyDncJqvSA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.15.tgz", - "integrity": "sha512-5yb4NcLk8GuXkYf7Dcor4XkGueYp4dgihzDmMjYDUrV0NPhubKlr+SwGtLOtzgRBWJ1I2bO0S3zwa0q0OgIPOw==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.16.tgz", + "integrity": "sha512-8iX+E9Cnet2167RdP8wM5PGPoEnw/jZNvHrtTRHs4g53n/Rg45iLmE9qFzxCqXGBmUO9LXKYdcXnettFKFLifg==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.15.tgz", - "integrity": "sha512-+AsfyKawmj/sa+m4Pz8VSRFbCfx/3IOjAuuEjhopbyr154YpPDSu8NTbcwzq3yfbVcPwK4/4exmbQzpsndaCTg==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.16.tgz", + "integrity": "sha512-3PK0Rlepvsy+MSw5oZEl26j+7E1hBI42T5+7hpZxf/c3vcPRORZ71oR3Ez/q51D2rkvovv8m8Ihv0Xjs0xDibQ==", "dev": true, "requires": { "canonical-path": "1.0.0", @@ -254,7 +328,7 @@ "shelljs": "^0.8.1", "source-map": "^0.6.1", "tslib": "^1.9.0", - "yargs": "9.0.1" + "yargs": "13.1.0" }, "dependencies": { "ansi-regex": { @@ -264,9 +338,9 @@ "dev": true }, "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chokidar": { @@ -289,25 +363,50 @@ "upath": "^1.1.1" } }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "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" + } + } + } + }, "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=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "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=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", "is-stream": "^1.1.0", "npm-run-path": "^2.0.0", "p-finally": "^1.0.0", @@ -315,39 +414,61 @@ "strip-eof": "^1.0.0" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "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-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" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, "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 }, - "load-json-file": { + "lcid": { "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=", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "invert-kv": "^2.0.0" } }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" + "p-locate": "^3.0.0", + "path-exists": "^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 - }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -355,66 +476,93 @@ "dev": true }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", "dev": true, "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" } }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "pify": "^2.0.0" + "p-try": "^2.0.0" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "p-limit": "^2.0.0" } }, - "read-pkg-up": { + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "shebang-regex": "^1.0.0" } }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "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": "^4.0.0" + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, "strip-ansi": { @@ -426,11 +574,14 @@ "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 + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } }, "which-module": { "version": "2.0.0", @@ -438,56 +589,49 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.1.0.tgz", + "integrity": "sha512-1UhJbXfzHiPqkfXNHYhiz79qM/kZqjTE8yGlEjZa85Q+3+OwcV6NRkV7XOV1W2Eom2bzILeUn55pQYffjVOLAg==", "dev": true, "requires": { - "camelcase": "^4.1.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "read-pkg-up": "^2.0.0", + "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": "^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", - "yargs-parser": "^7.0.0" + "y18n": "^4.0.0", + "yargs-parser": "^13.0.0" } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "@angular/core": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.15.tgz", - "integrity": "sha512-XsuYm0jEU/mOqwDOk2utThv8J9kESkAerfuCHClE9rB2TtHUOGCfekF7lJWqjjypu6/J9ygoPFo7hdAE058ZGg==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.16.tgz", + "integrity": "sha512-z1RuBinuYeC4KLv8Z95YOgIQLd4nkoApdxkIZaWALwSkgeBuHJn4bCBn2cL0gJ/KO2x18TiTU5HuC+uyBt0AVQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/elements": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-9.1.3.tgz", - "integrity": "sha512-67mIR+3Gpsu/E5wV2+jcW8YDfWLuID5piEgey9UnwDkp4YCNfs/+22yhmDi0JxwD+SPSSe1JJodJObxnNnQCxg==" + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@angular/elements/-/elements-9.1.9.tgz", + "integrity": "sha512-OHdea5oCsvY33WSQzepIKpWuq1NA3j+8d528D/G8R3A2/dZSufojSH+8Egli8z1LN6NBJCWhEe6equNvl69IOQ==" }, "@angular/flex-layout": { "version": "7.0.0-beta.24", @@ -498,17 +642,17 @@ } }, "@angular/forms": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.15.tgz", - "integrity": "sha512-p0kcIQLtBBC1qeTA6M3nOuXf/k91E80FKquVM9zEsO2kDjI0oZJVfFYL2UMov5samlJOPN+t6lRHEIUa7ApPsw==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.16.tgz", + "integrity": "sha512-50JTXco6w1HOi5o6RQ6PVSR0tD4Y2aRcCFBfLXvzDi78aZOSEdOYaSm78RDUNzGCbjwdMCIbX8eOdQgUUtsEFA==", "requires": { "tslib": "^1.9.0" } }, "@angular/language-service": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.15.tgz", - "integrity": "sha512-Ig5Jr7mnDelaZvSbUd9YhI5am3q1ku9xelAuwvtyDKvQJeKQj3BtTagcOgWrnQBfrJ/FsA/M5Zo48ncSsV0tqQ==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-7.2.16.tgz", + "integrity": "sha512-a/Bqf19+YhqACxQOkpYB0HK/zjHqDrZVUyBtdiX17njuvlWgD4wvdtdxae//ZeIVHNDJS+G5Gelbe+Yzon+VGA==", "dev": true }, "@angular/material": { @@ -520,45 +664,45 @@ } }, "@angular/platform-browser": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.15.tgz", - "integrity": "sha512-aYgmPsbC9Tvp9vmKWD8voeAp4crwCay7/D6lM3ClEe2EeK934LuEXq3/uczMrFVbnIX7BBIo8fh03Tl7wbiGPw==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.16.tgz", + "integrity": "sha512-6LltxoPlbtUgSec5a+BGPHZ0UYdqFizxSsplC1PoJdqH17DDxQjxcluAfXnLlvOYFSSPvYa73PSOpmUU2vp4gA==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.15.tgz", - "integrity": "sha512-UL2PqhzXMD769NQ6Lh6pxlBDKvN9Qol3XLRFil80lwJ1GRW16ITeYbCamcafIH2GOyd88IhmYcbMfUQ/6q4MMQ==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.16.tgz", + "integrity": "sha512-xsQ0qB54h7oY5UATK9VW25Y4dvG7uQe9+X4cf/GWB+R3eCzP8J9Ekxs4VU9y2ujlQkD64PV8gpKu0FHFh7wjIQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/router": { - "version": "7.2.15", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.15.tgz", - "integrity": "sha512-qAubRJRQanguUqJQ76J9GSZ4JFtoyhJKRmX5P23ANZJXpB6YLzF2fJmOGi+E6cV8F0tKBMEq1pjxFTisx0MXwQ==", + "version": "7.2.16", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.16.tgz", + "integrity": "sha512-SXDfkoGVUHhy83K+sR+39mmqTs4nSUh4DZbhFe4gii+mgAtBvlbeH8KBCqPNf7xq24aadyI2LCSGnGwgVKmXrA==", "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.10.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz", + "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.10.1" } }, "@babel/generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", - "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz", + "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==", "dev": true, "requires": { - "@babel/types": "^7.6.3", + "@babel/types": "^7.10.2", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" @@ -579,42 +723,48 @@ } }, "@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.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz", + "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==", "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.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" } }, "@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.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz", + "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.10.1" } }, "@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.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.10.1" } }, + "@babel/helper-validator-identifier": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz", + "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw==", + "dev": true + }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz", + "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==", "dev": true, "requires": { + "@babel/helper-validator-identifier": "^7.10.1", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -627,34 +777,34 @@ } }, "@babel/parser": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.4.tgz", - "integrity": "sha512-D8RHPW5qd0Vbyo3qb+YjO5nvUVRTXFLQ/FsDxJU2Nqz4uB5EnUN0ZQSEYpvTIbRuttig1XbHWU5oMeQwQSAA+A==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz", + "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ==", "dev": true }, "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz", + "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" + "@babel/code-frame": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1" } }, "@babel/traverse": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", - "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz", + "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.3", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.3", - "@babel/types": "^7.6.3", + "@babel/code-frame": "^7.10.1", + "@babel/generator": "^7.10.1", + "@babel/helper-function-name": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.1", + "@babel/types": "^7.10.1", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" @@ -684,12 +834,12 @@ } }, "@babel/types": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.6.3.tgz", - "integrity": "sha512-CqbcpTxMcpuQTMhjI37ZHVgjBkysg5icREQIEZ0eG1yCNwg3oy+5AaLiOKmjsCj6nqOsa6Hf0ObjRVwokb7srA==", + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz", + "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==", "dev": true, "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.10.1", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" }, @@ -711,45 +861,45 @@ } }, "@fortawesome/fontawesome-common-types": { - "version": "0.2.25", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.25.tgz", - "integrity": "sha512-3RuZPDuuPELd7RXtUqTCfed14fcny9UiPOkdr2i+cYxBoTOfQgxcDoq77fHiiHcgWuo1LoBUpvGxFF1H/y7s3Q==" + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.28.tgz", + "integrity": "sha512-gtis2/5yLdfI6n0ia0jH7NJs5i/Z/8M/ZbQL6jXQhCthEOe5Cr5NcQPhgTvFxNOtURE03/ZqUcEskdn2M+QaBg==" }, "@fortawesome/fontawesome-svg-core": { - "version": "1.2.25", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.25.tgz", - "integrity": "sha512-MotKnn53JKqbkLQiwcZSBJVYtTgIKFbh7B8+kd05TSnfKYPFmjKKI59o2fpz5t0Hzl35vVGU6+N4twoOpZUrqA==", + "version": "1.2.28", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.28.tgz", + "integrity": "sha512-4LeaNHWvrneoU0i8b5RTOJHKx7E+y7jYejplR7uSVB34+mp3Veg7cbKk7NBCLiI4TyoWS1wh9ZdoyLJR8wSAdg==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" + "@fortawesome/fontawesome-common-types": "^0.2.28" } }, "@fortawesome/free-regular-svg-icons": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.11.2.tgz", - "integrity": "sha512-k0vbThRv9AvnXYBWi1gn1rFW4X7co/aFkbm0ZNmAR5PoWb9vY9EDDDobg8Ay4ISaXtCPypvJ0W1FWkSpLQwZ6w==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.13.0.tgz", + "integrity": "sha512-70FAyiS5j+ANYD4dh9NGowTorNDnyvQHHpCM7FpnF7GxtDjBUCKdrFqCPzesEIpNDFNd+La3vex+jDk4nnUfpA==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" + "@fortawesome/fontawesome-common-types": "^0.2.28" } }, "@fortawesome/free-solid-svg-icons": { - "version": "5.11.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.11.2.tgz", - "integrity": "sha512-zBue4i0PAZJUXOmLBBvM7L0O7wmsDC8dFv9IhpW5QL4kT9xhhVUsYg/LX1+5KaukWq4/cbDcKT+RT1aRe543sg==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.13.0.tgz", + "integrity": "sha512-IHUgDJdomv6YtG4p3zl1B5wWf9ffinHIvebqQOmV3U+3SLw4fC+LUCCgwfETkbTtjy5/Qws2VoVf6z/ETQpFpg==", "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.25" + "@fortawesome/fontawesome-common-types": "^0.2.28" } }, "@gitgraph/core": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@gitgraph/core/-/core-1.4.3.tgz", - "integrity": "sha512-/84cYRd0W1hfUOY08UhphDXgs/Cnzapvb7Vb0ZmND+4IAq9V6SpdbQHlwinNucOxTbIku6hrd2tROiYdrmD/kg==" + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/@gitgraph/core/-/core-1.4.5.tgz", + "integrity": "sha512-GFXJBfxPyHQOUmKtdlefozSAuQ/4xSg3QWsEJCK+y5YidQVxHWn4wLNUOPXoD7QDScvUOlJq8gOGTsVSpYQGoQ==" }, "@gitgraph/js": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@gitgraph/js/-/js-1.3.3.tgz", - "integrity": "sha512-x2sdT5GDlInQhW9bKbZ6lvqHD1vhSTnAQXIOfy0OVtcjjmvmFZ5UBEl4AgY/7LvWC5WgPdgWE7GvPI21kenN7w==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@gitgraph/js/-/js-1.3.5.tgz", + "integrity": "sha512-xGBYfmfiNkwlC3hjnUHI0EbmatUMf5pePbgPetanJZnhwJ/1c79U83iEJWa6pbgXgCRiaawYb03xYaHqxgck8Q==", "requires": { - "@gitgraph/core": "1.4.3" + "@gitgraph/core": "1.4.5" } }, "@ngrx/core": { @@ -773,15 +923,15 @@ "integrity": "sha512-ZmPpquprBYUozbLuLMLZzUhI+LnMNGMNg8x1ij9yDxXWQADcJm1Zu7kouYE1r5SoCYxKfwJ3Ia1VQfS3A5S8dw==" }, "@ngtools/webpack": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.9.tgz", - "integrity": "sha512-+ROpqfCXLdQwfP+UNDLk4p959ZrocpStkdd2Iy9CeOJ8yDkityqpstTwQC3oHzzu/95BiyZ0hrHbM6AsPPIvJg==", + "version": "7.3.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.10.tgz", + "integrity": "sha512-2NVylZt3ybnBCRky+R4JTMXUGeJjoqRQ2OzCd5STjyyWE5tjPKbxMjF4claO3kl2ep09ML0QPi7ngZrZVTcEqA==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.9", + "@angular-devkit/core": "7.3.10", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", - "tree-kill": "1.2.1", + "tree-kill": "1.2.2", "webpack-sources": "1.3.0" }, "dependencies": { @@ -814,24 +964,24 @@ } }, "@schematics/angular": { - "version": "7.3.9", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.9.tgz", - "integrity": "sha512-B3lytFtFeYNLfWdlrIzvy3ulFRccD2/zkoL0734J+DAGfUz7vbysJ50RwYL46sQUcKdZdvb48ktfu1S8yooP6Q==", + "version": "7.3.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.10.tgz", + "integrity": "sha512-R/oBE5Nbs/meMVqLLFjeVf3G+ROJAPtRbiJ+22EZ6V63RQfLbW37zX+z3Wv7yD9URtYE7X9Ojtz9WEfmSzBPUg==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.9", - "@angular-devkit/schematics": "7.3.9", + "@angular-devkit/core": "7.3.10", + "@angular-devkit/schematics": "7.3.10", "typescript": "3.2.4" } }, "@schematics/update": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.9.tgz", - "integrity": "sha512-4MQcaKFxhMzZyE//+DknDh3h3duy3avg2oxSHxdwXlCZ8Q92+4lpegjJcSRiqlEwO4qeJ5XnrjrvzfIiaIZOmA==", + "version": "0.13.10", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.10.tgz", + "integrity": "sha512-X02qa+rpeD6+eacR0fy+Yr+OKrj3FTpod9TkfshMa1WwIFoWlshF/bpPmLoMGXOD+zCYoHrPimpkvEFPjOvCDQ==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.9", - "@angular-devkit/schematics": "7.3.9", + "@angular-devkit/core": "7.3.10", + "@angular-devkit/schematics": "7.3.10", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "pacote": "9.4.0", @@ -848,6 +998,12 @@ "requires": { "tslib": "^1.9.0" } + }, + "semver": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true } } }, @@ -877,9 +1033,9 @@ "integrity": "sha1-MiC7vZL8DnKLpTBr+kSwBIghYS0=" }, "@types/lodash": { - "version": "4.14.144", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.144.tgz", - "integrity": "sha512-ogI4g9W5qIQQUhXAclq6zhqgqNUr7UlFaqDHbch7WLSLeeM/7d3CRaw7GLajxvyFvhJqw4Rpcz5bhoaYtIx6Tg==", + "version": "4.14.155", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.155.tgz", + "integrity": "sha512-vEcX7S7aPhsBCivxMwAANQburHBtfN9RdyXFk84IJmu2Z4Hkg1tOFgaslRiEqqvoLtbCBi6ika1EMspE+NZ9Lg==", "dev": true }, "@types/node": { @@ -889,9 +1045,9 @@ "dev": true }, "@types/prismjs": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.0.tgz", - "integrity": "sha512-mEyuziLrfDCQ4juQP1k706BUU/c8OGn/ZFl69AXXY6dStHClKX4P+N8+rhqpul1vRDA2VOygzMRSJJZHyDEOfw==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.16.1.tgz", + "integrity": "sha512-RNgcK3FEc1GpeOkamGDq42EYkb6yZW5OWQwTS56NJIB8WL0QGISQglA7En7NUx9RGP8AC52DOe+squqbAckXlA==", "dev": true }, "@types/q": { @@ -901,9 +1057,9 @@ "dev": true }, "@types/selenium-webdriver": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.15.tgz", - "integrity": "sha512-5nh8/K2u9p4bk95GGCJB7KBvewaB0TUziZ9DTr+mR2I6RoO4OJVqx7rxK83hs2J1tomwtCGkhiW+Dy8EUnfB+Q==", + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz", + "integrity": "sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw==", "dev": true }, "@types/source-list-map": { @@ -918,22 +1074,14 @@ "integrity": "sha512-mOsqurEtFEzwgkVc/jDVE2XrjZBYTbrmDUyCr9GXmnfc6q5otokxFtKvSY/B21zgz9LVRIvRTawKczjKi57wrA==" }, "@types/webpack-sources": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", - "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.8.tgz", + "integrity": "sha512-JHB2/xZlXOjzjBB6fMOpH1eQAfsrpqVVIbneE0Rok16WXwFaznaI5vfg75U5WgGJm7V9W1c4xeRQDjX/zwvghA==", "dev": true, "requires": { "@types/node": "*", "@types/source-list-map": "*", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "@webassemblyjs/ast": { @@ -1147,20 +1295,19 @@ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==", - "dev": true + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" }, "acorn-dynamic-import": { "version": "4.0.0", @@ -1174,19 +1321,12 @@ "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=", "requires": { "acorn": "^2.1.0" - }, - "dependencies": { - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - } } }, "adm-zip": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz", - "integrity": "sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.14.tgz", + "integrity": "sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g==", "dev": true }, "after": { @@ -1196,9 +1336,9 @@ "dev": true }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -1214,11 +1354,11 @@ } }, "ajv": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", - "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -1291,9 +1431,9 @@ } }, "app-root-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.1.0.tgz", - "integrity": "sha1-mL9lmTJ+zqGZMJhm6BQDaP0uZGo=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz", + "integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA==", "dev": true }, "append-transform": { @@ -1323,9 +1463,9 @@ } }, "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { @@ -1436,6 +1576,14 @@ "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "assert": { @@ -1486,9 +1634,9 @@ } }, "async-each": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.2.tgz", - "integrity": "sha512-6xrbvN0MOBKSJDdonmSSz2OwFSgxRaVtBDes26mj9KIGtDo+g9xosFRSC+i1gQh2oAN/tQ62AI/pGZGQjVOiRg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-foreach": { @@ -1499,9 +1647,9 @@ "optional": 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": { @@ -1535,9 +1683,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "babel-code-frame": { "version": "6.26.0", @@ -1735,9 +1883,9 @@ } }, "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" }, "base64-js": { "version": "1.3.1", @@ -1781,11 +1929,21 @@ "dev": true }, "binary-extensions": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz", - "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "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" + } + }, "binpacking": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/binpacking/-/binpacking-0.0.1.tgz", @@ -1817,33 +1975,47 @@ } }, "bluebird": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", - "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "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": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { - "bytes": "3.0.0", + "bytes": "3.1.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } } }, "bonjour": { @@ -1949,21 +2121,44 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "browserify-zlib": { @@ -1976,29 +2171,30 @@ } }, "browserslist": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.7.0.tgz", - "integrity": "sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30000989", - "electron-to-chromium": "^1.3.247", - "node-releases": "^1.1.29" + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "browserstack": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.2.tgz", - "integrity": "sha512-+6AFt9HzhKykcPF79W6yjEUJcdvZOV0lIXdkORXMJftGrDl0OKWqRF4GHqpDNkxiceDT/uB7Fb/aDwktvXX7dg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.6.0.tgz", + "integrity": "sha512-HJDJ0TSlmkwnt9RZ+v5gFpa1XZTBYTj0ywvLwJ3241J7vMw2jAsGNVhKHtmCOyg+VxeLZyaibO9UL71AsUeDIw==", "dev": true, "requires": { "https-proxy-agent": "^2.2.1" } }, "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "requires": { "base64-js": "^1.0.2", @@ -2071,24 +2267,52 @@ "dev": true }, "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.1", - "mississippi": "^2.0.0", + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", "mkdirp": "^0.5.1", "move-concurrently": "^1.0.1", "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^5.2.4", - "unique-filename": "^1.1.0", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } } }, "cache-base": { @@ -2157,9 +2381,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000989", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz", - "integrity": "sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==", + "version": "1.0.30001079", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz", + "integrity": "sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q==", "dev": true }, "canonical-path": { @@ -2241,15 +2465,18 @@ } }, "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.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, "chroma-js": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.0.6.tgz", - "integrity": "sha512-IiiClbBRkRwuXNl6impq5ssEhUGpmWvc5zzImZbDUWLWcFbj6ZbtsdZEx6sIXMKes7azgYaUpnmsY1T8BL6PqQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.0.tgz", + "integrity": "sha512-uiRdh4ZZy+UTPSrAdp8hqEdVb1EllLtTHOt5TMaOjJUvi+O54/83Fc5K2ld1P+TJX+dw5B+8/sCgzI6eaur/lg==", + "requires": { + "cross-env": "^6.0.3" + } }, "chrome-trace-event": { "version": "1.0.2", @@ -2312,14 +2539,6 @@ "dev": true, "requires": { "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "cli-cursor": { @@ -2332,9 +2551,9 @@ } }, "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", "dev": true }, "clipboard": { @@ -2353,6 +2572,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, + "optional": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", @@ -2458,17 +2678,17 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { "delayed-stream": "~1.0.0" } }, "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" + "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==" }, "commondir": { "version": "1.0.1", @@ -2477,9 +2697,9 @@ "dev": true }, "compare-versions": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.5.1.tgz", - "integrity": "sha512-9fGPIB7C6AyM18CJJBHt5EnCZDG3oiTJYy0NjfIAGjKpzv0tkxWko7TNQHF5ymqm7IH03tqmeuBxtvD+Izh6mg==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", "dev": true }, "component-bind": { @@ -2489,9 +2709,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "component-inherit": { @@ -2501,20 +2721,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" - }, - "dependencies": { - "mime-db": { - "version": "1.41.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.41.0.tgz", - "integrity": "sha512-B5gxBI+2K431XW8C2rcc/lhppbuji67nf9v39eH8pkWoZDxnAL0PxdpH32KYRScniF8qDHBDlI+ipgg5WrCUYw==", - "dev": true - } + "mime-db": ">= 1.43.0 < 2" } }, "compression": { @@ -2530,6 +2742,14 @@ "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "concat-map": { @@ -2559,38 +2779,15 @@ } }, "connect": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", - "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "requires": { "debug": "2.6.9", - "finalhandler": "1.1.0", - "parseurl": "~1.3.2", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", "utils-merge": "1.0.1" - }, - "dependencies": { - "finalhandler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", - "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.1", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.3.1", - "unpipe": "~1.0.0" - } - }, - "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", - "dev": true - } } }, "connect-history-api-fallback": { @@ -2600,13 +2797,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 }, "console-control-strings": { "version": "1.1.0", @@ -2628,6 +2822,14 @@ "dev": true, "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "content-type": { @@ -2637,18 +2839,26 @@ "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" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, "cookie-signature": { @@ -2669,6 +2879,17 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "copy-descriptor": { @@ -2678,25 +2899,52 @@ "dev": true }, "copy-webpack-plugin": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", - "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "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": "^10.0.4", - "find-cache-dir": "^1.0.0", + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", "globby": "^7.1.1", - "is-glob": "^4.0.0", - "loader-utils": "^1.1.0", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", "minimatch": "^3.0.4", - "p-limit": "^1.0.0", - "serialize-javascript": "^1.4.0" + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^2.1.2", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.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==", + "dev": true + } } }, "core-js": { - "version": "2.6.10", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", - "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==" + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" }, "core-util-is": { "version": "1.0.2", @@ -2735,6 +2983,14 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "create-hash": { @@ -2764,15 +3020,22 @@ "sha.js": "^2.4.8" } }, + "cross-env": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz", + "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==", + "requires": { + "cross-spawn": "^7.0.0" + } + }, "cross-spawn": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", - "dev": true, - "optional": true, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "requires": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, "crypto-browserify": { @@ -2800,13 +3063,6 @@ "integrity": "sha512-1feNVaM4Fyzdj4mKPIQNL2n70MmuYzAXZ1aytlROFX1JsOo070OsugwGjj7nl6jnDJWHDM8zRZswkmeYVWZJQA==", "requires": { "base64-arraybuffer": "^0.2.0" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==" - } } }, "css-parse": { @@ -2816,14 +3072,14 @@ "dev": true }, "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", + "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", "dev": true, "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" + "cssesc": "^3.0.0", + "fastparse": "^1.1.2", + "regexpu-core": "^4.6.0" } }, "cssauron": { @@ -2836,9 +3092,9 @@ } }, "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "cssom": { @@ -2890,12 +3146,6 @@ "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", "dev": true }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true - }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2918,9 +3168,9 @@ "dev": true }, "deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.0.tgz", - "integrity": "sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw==", + "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", @@ -3047,6 +3297,12 @@ "dev": true } } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -3081,9 +3337,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", @@ -3132,6 +3388,14 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "dir-glob": { @@ -3225,15 +3489,15 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.260", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.260.tgz", - "integrity": "sha512-wGt+OivF1C1MPwaSv3LJ96ebNbLAWlx3HndivDDWqwIVSQxmhL17Y/YmwUdEMtS/bPyommELt47Dct0/VZNQBQ==", + "version": "1.3.464", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.464.tgz", + "integrity": "sha512-Oo+0+CN9d2z6FToQW6Hwvi9ez09Y/usKwr0tsDsyg43a871zVJCi1nR0v03djLbRNcaCKjtrnVf2XJhTxEpPCg==", "dev": true }, "elliptic": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", - "integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", + "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", @@ -3243,8 +3507,22 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, + "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 + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -3267,9 +3545,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" @@ -3289,6 +3567,12 @@ "ws": "~3.3.1" }, "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3319,6 +3603,12 @@ "yeast": "0.1.2" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -3341,6 +3631,14 @@ "base64-arraybuffer": "0.1.5", "blob": "0.0.5", "has-binary2": "~1.0.2" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + } } }, "enhanced-resolve": { @@ -3384,10 +3682,40 @@ "is-arrayish": "^0.2.1" } }, + "es-abstract": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "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.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", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { @@ -3412,23 +3740,15 @@ "dev": true }, "escodegen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.1.tgz", - "integrity": "sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.2.tgz", + "integrity": "sha512-InuOIiKk8wwuOFg6x9BQXbzjrQhtyXh46K9bqVTPzSo2FnyMBaYGBMC6PhQy7yxxil9vIedFBweQBMK74/7o8A==", "requires": { "esprima": "^4.0.1", "estraverse": "^4.2.0", "esutils": "^2.0.2", "optionator": "^0.8.1", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } } }, "eslint-scope": { @@ -3461,9 +3781,9 @@ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -3472,15 +3792,15 @@ "dev": true }, "eventemitter3": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", - "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", "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": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", "dev": true }, "eventsource": { @@ -3529,14 +3849,44 @@ "shebang-command": "^1.2.0", "which": "^1.2.9" } - } - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true }, "expand-braces": { "version": "0.1.2", @@ -3663,146 +4013,23 @@ "vary": "~1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - } - }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } } } }, @@ -3841,17 +4068,6 @@ "chardet": "^0.7.0", "iconv-lite": "^0.4.24", "tmp": "^0.0.33" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, "extglob": { @@ -3925,14 +4141,14 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -3955,9 +4171,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, "figures": { @@ -3983,6 +4199,13 @@ "version": "github:eligrey/FileSaver.js#e865e37af9f9947ddcced76b549e27dc45c1cb2e", "from": "github:eligrey/FileSaver.js#1.3.8" }, + "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 + }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -4029,31 +4252,17 @@ "parseurl": "~1.3.3", "statuses": "~1.5.0", "unpipe": "~1.0.0" - }, - "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - } } }, "find-cache-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", - "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "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": "^1.0.0", - "pkg-dir": "^2.0.0" + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { @@ -4066,9 +4275,9 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "flush-write-stream": { @@ -4082,12 +4291,12 @@ } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", + "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", "dev": true, "requires": { - "debug": "^3.2.6" + "debug": "^3.0.0" }, "dependencies": { "debug": { @@ -4100,9 +4309,9 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -4178,12 +4387,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": { @@ -4204,668 +4413,143 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "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.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "optional": true, "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" + "minimist": "^1.2.5" } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "optional": true, + "requires": { + "globule": "^1.0.0" + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true, + "optional": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "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" + } + }, + "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, - "optional": true, "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "optional": true, - "requires": { - "globule": "^1.0.0" - } - }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true, - "optional": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "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" + "is-extglob": "^2.1.0" } } } @@ -4888,17 +4572,25 @@ "ignore": "^3.3.5", "pify": "^3.0.0", "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", "dev": true, "optional": true, "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "~4.17.12", "minimatch": "~3.0.2" } }, @@ -4912,9 +4604,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, "hammerjs": { @@ -4923,31 +4615,11 @@ "integrity": "sha1-BO93hiz/K7edMPdpIJWTAiK/YPE=" }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "handlebars": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.4.3.tgz", - "integrity": "sha512-B0W4A2U1ww3q7VVthTKfh+epHx+q4mCt6iK+zEAzbMBpWQAwxCeKxEGpj/1oQTpzPXDNSOG7hmG14TsISH50yw==", - "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", @@ -5009,6 +4681,12 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "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-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", @@ -5049,13 +4727,27 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "hash.js": { @@ -5080,9 +4772,9 @@ } }, "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", "dev": true }, "hpack.js": { @@ -5098,9 +4790,15 @@ } }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html2canvas": { @@ -5124,30 +4822,39 @@ "dev": true }, "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.2.tgz", + "integrity": "sha512-opCO9ASqg5Wy2FNo7A0sxy71yGbbkJJXLdgMK04Tcypw9jr2MgWbyubb0+WdmDmGnFflO7fRbqbaihh/ENDlRQ==", "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.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "^3.0.0", + "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } @@ -5196,9 +4903,9 @@ } }, "http-status-codes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.3.2.tgz", - "integrity": "sha512-nDUtj0ltIt08tGi2VWSpSzNNFye0v3YSe9lX3lIqLTuVvvRiYCvs4QQBSHo0eomFYw1wlUuofurUAlTm+vHnXg==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-1.4.0.tgz", + "integrity": "sha512-JrT3ua+WgH8zBD3HEJYbeEgnuQaAnUeRRko/YojPAJjGmIfGD3KPU/asLdsLwKjfxOmQe5nXMQ0pt/7MyapVbQ==" }, "https-browserify": { "version": "1.0.0", @@ -5216,15 +4923,6 @@ "debug": "^3.1.0" }, "dependencies": { - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -5252,9 +4950,9 @@ } }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -5278,9 +4976,9 @@ "dev": true }, "ignore-walk": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.2.tgz", - "integrity": "sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw==", + "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" @@ -5301,94 +4999,40 @@ }, "import-cwd": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", - "dev": true, - "requires": { - "import-from": "^2.1.0" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", - "dev": true, - "requires": { - "resolve-from": "^3.0.0" - } - }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", - "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, - "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" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "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" - } - } + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, "imurmurhash": { @@ -5398,9 +5042,9 @@ "dev": true }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", "dev": true, "optional": true }, @@ -5420,6 +5064,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", @@ -5430,9 +5080,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { "version": "1.3.5", @@ -5523,9 +5173,9 @@ } }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, "invariant": { @@ -5541,7 +5191,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "dev": true, + "optional": true }, "ip": { "version": "1.1.5", @@ -5556,9 +5207,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-accessor-descriptor": { @@ -5608,6 +5259,12 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -5629,9 +5286,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": { @@ -5672,13 +5329,10 @@ "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" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -5690,9 +5344,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -5751,19 +5405,13 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", "dev": true, "requires": { - "has": "^1.0.1" + "has-symbols": "^1.0.1" } }, "is-stream": { @@ -5772,6 +5420,15 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-symbol": { + "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.1" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -5814,8 +5471,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -5829,9 +5485,9 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-api": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.6.tgz", - "integrity": "sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-2.1.7.tgz", + "integrity": "sha512-LYTOa2UrYFyJ/aSczZi/6lBykVMjCCvUmT64gOe+jPZFy4w6FYfPGqFT2IiQ2BxVHHDOvCD7qrIXb0EOh4uGWw==", "dev": true, "requires": { "async": "^2.6.2", @@ -5842,7 +5498,7 @@ "istanbul-lib-instrument": "^3.3.0", "istanbul-lib-report": "^2.0.8", "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^2.2.4", + "istanbul-reports": "^2.2.5", "js-yaml": "^3.13.1", "make-dir": "^2.1.0", "minimatch": "^3.0.4", @@ -5870,30 +5526,6 @@ "semver": "^6.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==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -5995,22 +5627,6 @@ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true - }, - "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" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true } } }, @@ -6042,43 +5658,21 @@ "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", "dev": true }, - "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" - } - }, "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 - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "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" } }, "jasmine": { @@ -6122,38 +5716,27 @@ "dev": true }, "jquery": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.0.tgz", - "integrity": "sha512-Xb7SVYMvygPxbFMpTFQiHh1J7HClEaThguL15N/Gg37Lri/qKyhRGZYzHRyLH8Stq3Aow0LsHO2O2ci86fCrNQ==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.5.1.tgz", + "integrity": "sha512-XwIBPqcMn57FxfT+Go5pzySnm4KWkT1Tv7gjrpT1srtf8Weynl6R273VJ5GjkRb51IzMp5nbaPjJXMWeju2MKg==" }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==", "dev": true, "optional": true }, "js-beautify": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.9.0.tgz", - "integrity": "sha512-P0skmY4IDjfLiVrx+GLDeme8w5G0R1IGXgccVU5HP2VM3lRblH7qN2LTea5vZAxrDjpZBD0Jv+ahpjwVcbz/rw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.11.0.tgz", + "integrity": "sha512-a26B+Cx7USQGSWnz9YxgJNMmML/QG2nqIaL7VVYPCXbqiKz8PN0waSNvroMtvAK6tY7g/wPdNWGEP+JTNIBr6A==", "requires": { "config-chain": "^1.1.12", - "editorconfig": "^0.15.2", + "editorconfig": "^0.15.3", "glob": "^7.1.3", - "mkdirp": "~0.5.0", - "nopt": "~4.0.1" - }, - "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } + "mkdirp": "~1.0.3", + "nopt": "^4.0.3" } }, "js-tokens": { @@ -6163,9 +5746,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -6201,20 +5784,10 @@ "xml-name-validator": ">= 2.0.1 < 3.0.0" }, "dependencies": { - "acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" - }, "parse5": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz", "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=" - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" } } }, @@ -6279,6 +5852,11 @@ "stackblur-canvas": "2.2.0" }, "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" + }, "css-line-break": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-1.0.1.tgz", @@ -6309,9 +5887,9 @@ } }, "jszip": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.2.0.tgz", - "integrity": "sha512-4WjbsaEtBK/DHeDZOPiPw5nzSGLDEDDreFRDEgnoMwmknPjTqa+23XuYFk6NiGbeiAeZCctiQ/X/z0lQBmDVOQ==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.4.0.tgz", + "integrity": "sha512-gZAOYuPl4EhPTXT0GjhI3o+ZAz3su6EhLrKUoAivcKqyqC7laS5JEv4XWZND9BgcDcF83vI85yGbDmDR6UhrIg==", "dev": true, "requires": { "lie": "~3.3.0", @@ -6357,15 +5935,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", - "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==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } @@ -6378,12 +5950,23 @@ "requires": { "fs-access": "^1.0.0", "which": "^1.2.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, "karma-coverage-istanbul-reporter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.0.tgz", - "integrity": "sha512-UH0mXPJFJyK5uiK7EkwGtQ8f30lCBAfqRResnZ4pzLJ04SOp4SPlYkmwbbZ6iVJ6sQFVzlDUXlntBEsLRdgZpg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.1.tgz", + "integrity": "sha512-CH8lTi8+kKXGvrhy94+EkEMldLCiUA0xMOiL31vvli9qK0T+qcXJAwWBRVJWnVWxYkTmyWar8lPz63dxX6/z1A==", "dev": true, "requires": { "istanbul-api": "^2.1.6", @@ -6421,9 +6004,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "lcid": { @@ -6431,6 +6014,7 @@ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, + "optional": true, "requires": { "invert-kv": "^1.0.0" } @@ -6452,12 +6036,15 @@ "source-map": "~0.6.0" }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, - "optional": true + "optional": true, + "requires": { + "minimist": "^1.2.5" + } } } }, @@ -6470,6 +6057,14 @@ "clone": "^2.1.1", "loader-utils": "^1.1.0", "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 + } } }, "levn": { @@ -6596,17 +6191,17 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } }, "loglevel": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.4.tgz", - "integrity": "sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", "dev": true }, "loose-envify": { @@ -6639,27 +6234,28 @@ } }, "magic-string": { - "version": "0.25.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", - "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", "dev": true, "requires": { "sourcemap-codec": "^1.4.4" } }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "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": "^3.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "make-fetch-happen": { @@ -6681,12 +6277,6 @@ "ssri": "^6.0.0" }, "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, "cacache": { "version": "11.3.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", @@ -6709,20 +6299,6 @@ "y18n": "^4.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" - } - }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6732,47 +6308,19 @@ "yallist": "^3.0.2" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minimist": "^1.2.5" } }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -6906,6 +6454,14 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "mime": { @@ -6915,16 +6471,16 @@ "dev": true }, "mime-db": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", - "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.22", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", - "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "~1.38.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -6965,15 +6521,15 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "minipass": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.6.0.tgz", - "integrity": "sha512-OuNZ0OHrrI+jswzmgivYBZ+fAAGHZA4293d5q0z631/I9QSw3yumKB92njxHIHiB1eAdGRsE+3CcOPkoEyV5FQ==", + "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", @@ -6981,26 +6537,26 @@ }, "dependencies": { "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "minizlib": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz", - "integrity": "sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ==", + "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": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, "requires": { "concat-stream": "^1.5.0", @@ -7009,7 +6565,7 @@ "flush-write-stream": "^1.0.0", "from2": "^2.1.0", "parallel-transform": "^1.1.0", - "pump": "^2.0.1", + "pump": "^3.0.0", "pumpify": "^1.3.3", "stream-each": "^1.1.0", "through2": "^2.0.0" @@ -7055,24 +6611,14 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz", + "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw==" }, "move-concurrently": { "version": "1.0.1", @@ -7086,6 +6632,17 @@ "mkdirp": "^0.5.1", "rimraf": "^2.5.4", "run-queue": "^1.0.3" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "ms": { @@ -7117,9 +6674,9 @@ "dev": true }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", "dev": true, "optional": true }, @@ -7143,9 +6700,9 @@ } }, "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true }, "neo-async": { @@ -7168,9 +6725,9 @@ } }, "ngx-pinch-zoom": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/ngx-pinch-zoom/-/ngx-pinch-zoom-2.3.4.tgz", - "integrity": "sha512-cC6R/WwQsbGRAp9CslDrw6gQobz3cb7+MQILv1++lxE1FmpI7OhT/2uMrPJwvxsLbZyBFJM44W923yJjdzqTmA==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/ngx-pinch-zoom/-/ngx-pinch-zoom-2.4.4.tgz", + "integrity": "sha512-36GZ+ck16m5xrDSz8c/ZX0u5grAelPbi6/hL/UvNSpkgkolamlsg5p+FwMwPgoHiOmwsYQpTo5FPeWmwrS9cHg==", "requires": { "tslib": "^1.9.0" } @@ -7182,9 +6739,9 @@ "dev": true }, "node-fetch-npm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", - "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", "dev": true, "requires": { "encoding": "^0.1.11", @@ -7193,9 +6750,9 @@ } }, "node-forge": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.8.2.tgz", - "integrity": "sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", "dev": true }, "node-gyp": { @@ -7219,12 +6776,42 @@ "which": "1" }, "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "optional": true, + "requires": { + "abbrev": "1" + } + }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true, "optional": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } } } }, @@ -7268,18 +6855,15 @@ } }, "node-releases": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.30.tgz", - "integrity": "sha512-BHcr1g6NeUH12IL+X3Flvs4IOnl1TL0JczUhEZjDE+FXXPQcVCNr8NEPb01zqGxzhTpdyJL5GXemaCW7aw6Khw==", - "dev": true, - "requires": { - "semver": "^5.3.0" - } + "version": "1.1.58", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", + "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "dev": true }, "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz", + "integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==", "dev": true, "optional": true, "requires": { @@ -7290,7 +6874,7 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash": "^4.17.11", + "lodash": "^4.17.15", "meow": "^3.7.0", "mkdirp": "^0.5.1", "nan": "^2.13.2", @@ -7316,37 +6900,60 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "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" + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.5" } }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", - "dev": true, - "optional": true - }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true, "optional": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "optional": true, + "requires": { + "isexe": "^2.0.0" + } } } }, "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "optional": true, + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", "requires": { - "abbrev": "1" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { @@ -7377,9 +6984,18 @@ "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-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": { @@ -7395,13 +7011,14 @@ } }, "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.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", "dev": true, "requires": { "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" } }, "npm-pick-manifest": { @@ -7439,9 +7056,9 @@ } }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } @@ -7453,6 +7070,14 @@ "dev": true, "requires": { "path-key": "^2.0.0" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + } } }, "npmlog": { @@ -7539,12 +7164,22 @@ } } }, - "object-is": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "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.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -7560,6 +7195,18 @@ "isobject": "^3.0.0" } }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -7816,28 +7463,6 @@ "ssri": "^6.0.1", "unique-filename": "^1.1.1", "y18n": "^4.0.0" - }, - "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, - "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" - } - } } }, "get-stream": { @@ -7858,70 +7483,51 @@ "yallist": "^3.0.2" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "minimist": "^1.2.5" } }, "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", + "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.3.5", + "minipass": "^2.8.6", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", "yallist": "^3.0.3" } }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true } } }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, "parallel-transform": { @@ -7936,9 +7542,9 @@ } }, "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", @@ -7954,15 +7560,16 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, + "optional": true, "requires": { "error-ex": "^1.2.0" } }, "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true + "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", @@ -7983,9 +7590,9 @@ } }, "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascalcase": { @@ -8024,10 +7631,9 @@ "dev": true }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.6", @@ -8048,12 +7654,20 @@ "dev": true, "requires": { "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } } }, "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -8068,10 +7682,17 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true + }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pinkie": { @@ -8090,29 +7711,101 @@ } }, "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" + }, + "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" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "pkg-up": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "requires": { "find-up": "^2.1.0" } }, "portfinder": { - "version": "1.0.24", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.24.tgz", - "integrity": "sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", "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": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "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" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "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 } } @@ -8132,14 +7825,6 @@ "chalk": "^2.4.2", "source-map": "^0.6.1", "supports-color": "^6.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "postcss-import": { @@ -8202,9 +7887,9 @@ "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "promise": { @@ -8253,9 +7938,9 @@ } }, "protractor": { - "version": "5.4.2", - "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.2.tgz", - "integrity": "sha512-zlIj64Cr6IOWP7RwxVeD8O4UskLYPoyIcg0HboWJL9T79F1F0VWtKkGTr/9GN6BKL+/Q/GmM7C9kFVCfDbP5sA==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/protractor/-/protractor-5.4.4.tgz", + "integrity": "sha512-BaL4vePgu3Vfa/whvTUAlgaCAId4uNSGxIFSCXMgj7LMYENPWLp85h5RBi9pdpX/bWQ8SF6flP7afmi2TC4eHw==", "dev": true, "requires": { "@types/q": "^0.0.32", @@ -8266,47 +7951,127 @@ "glob": "^7.0.3", "jasmine": "2.8.0", "jasminewd2": "^2.1.0", - "optimist": "~0.6.0", "q": "1.4.1", "saucelabs": "^1.5.0", "selenium-webdriver": "3.6.0", "source-map-support": "~0.4.0", "webdriver-js-extender": "2.1.0", - "webdriver-manager": "^12.0.6" + "webdriver-manager": "^12.0.6", + "yargs": "^12.0.5" }, "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "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" + "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" + } + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "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" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "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" } }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "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": { - "globby": "^5.0.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "rimraf": "^2.2.8" + "pump": "^3.0.0" } }, "globby": { @@ -8323,12 +8088,99 @@ "pinkie-promise": "^2.0.0" } }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "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 + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -8344,6 +8196,27 @@ "source-map": "^0.5.6" } }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -8351,9 +8224,9 @@ "dev": true }, "webdriver-manager": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", - "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", + "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", @@ -8368,17 +8241,62 @@ "semver": "^5.3.0", "xml2js": "^0.4.17" } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "dev": true, "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "prr": { @@ -8393,9 +8311,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -8409,12 +8327,20 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -8430,6 +8356,18 @@ "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "punycode": { @@ -8492,21 +8430,29 @@ } }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } } }, "raw-loader": { @@ -8604,9 +8550,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", @@ -8616,6 +8562,14 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "readdirp": { @@ -8656,11 +8610,20 @@ "dev": true }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", "dev": true }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -8678,35 +8641,39 @@ } }, "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", + "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.2" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "dev": true, "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -8748,9 +8715,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -8759,7 +8726,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -8769,7 +8736,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } @@ -8798,9 +8765,9 @@ "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA==" }, "resolve": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", - "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -8850,9 +8817,9 @@ "dev": true }, "rfdc": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.2.tgz", - "integrity": "sha512-92ktAgvZhBzYTIK0Mja9uen5q5J3NRVMoDkJL2VMwq6SXjVCgqvQeVP2XAaUY6HT+XpQYeLSjb3UoitBryKmdA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, "rgbcolor": { @@ -8861,9 +8828,9 @@ "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=" }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "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" @@ -8880,13 +8847,10 @@ } }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "run-queue": { "version": "1.0.3", @@ -8906,9 +8870,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safe-regex": { "version": "1.1.0", @@ -8925,9 +8889,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.6.tgz", + "integrity": "sha512-MKuEYXFSGuRSi8FZ3A7imN1CeVn9Gpw0/SFJKdL1ejXJneI9a5rwlEZrKejhEFAA3O6yr3eIyl/WuvASvlT36g==", "dev": true, "optional": true, "requires": { @@ -8949,6 +8913,14 @@ "neo-async": "^2.5.0", "pify": "^3.0.0", "semver": "^5.5.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 + } } }, "saucelabs": { @@ -8961,10 +8933,9 @@ } }, "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", - "dev": true + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { "version": "1.0.0", @@ -9036,18 +9007,18 @@ } }, "selfsigned": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.6.tgz", - "integrity": "sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w==", + "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.8.2" + "node-forge": "0.9.0" } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, "semver-dsl": { "version": "1.0.1", @@ -9088,55 +9059,18 @@ "statuses": "~1.5.0" }, "dependencies": { - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true } } }, "serialize-javascript": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.9.1.tgz", - "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "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": { @@ -9152,6 +9086,32 @@ "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" + }, + "dependencies": { + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } } }, "serve-static": { @@ -9164,14 +9124,6 @@ "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.17.1" - }, - "dependencies": { - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - } } }, "set-blocking": { @@ -9216,9 +9168,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, "sha.js": { @@ -9251,24 +9203,22 @@ } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", "dev": true, "requires": { "glob": "^7.0.0", @@ -9282,9 +9232,9 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, "slash": { @@ -9294,9 +9244,9 @@ "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": { @@ -9438,9 +9388,9 @@ } }, "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": { @@ -9465,6 +9415,18 @@ "to-array": "0.1.4" }, "dependencies": { + "base64-arraybuffer": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", + "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -9487,6 +9449,12 @@ "isarray": "2.0.1" }, "dependencies": { + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", @@ -9555,13 +9523,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": { @@ -9572,6 +9540,17 @@ "requires": { "agent-base": "~4.2.1", "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } } }, "sonar-scanner": { @@ -9587,10 +9566,9 @@ "dev": true }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-loader": { "version": "0.2.4", @@ -9603,12 +9581,12 @@ } }, "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", @@ -9623,14 +9601,6 @@ "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "source-map-url": { @@ -9640,15 +9610,15 @@ "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.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -9656,15 +9626,15 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -9678,9 +9648,9 @@ "dev": true }, "spdy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz", - "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", @@ -9737,9 +9707,9 @@ "dev": true }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -9790,12 +9760,12 @@ } }, "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "dev": true, "requires": { - "safe-buffer": "^5.1.1" + "figgy-pudding": "^3.5.1" } }, "stackblur-canvas": { @@ -9834,9 +9804,9 @@ } }, "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, "stdout-stream": { @@ -9883,9 +9853,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 }, "streamroller": { @@ -9909,10 +9879,19 @@ "ms": "^2.1.1" } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true } } @@ -9928,6 +9907,48 @@ "strip-ansi": "^3.0.0" } }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" + } + }, + "string.prototype.trimright": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -9935,6 +9956,14 @@ "dev": true, "requires": { "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "strip-ansi": { @@ -10010,6 +10039,21 @@ "path-is-absolute": "^1.0.0" } }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=", + "dev": true + }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", @@ -10060,229 +10104,65 @@ }, "tar": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "optional": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", - "dev": true, - "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-1DMkTk286BzmfylAvLXwpJrI7dWa5BnFmscV/2dCr8+c56egFcbaeFAl7+sujAjdmpLam21XRdhA4oifLyiWWg==", - "dev": true, - "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" - }, - "dependencies": { - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, - "cacache": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.3.tgz", - "integrity": "sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "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" - } - }, - "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" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "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" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "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" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "optional": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "terser": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.7.0.tgz", + "integrity": "sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + } + } + }, + "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" + }, + "dependencies": { + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } - }, - "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 } } }, @@ -10322,9 +10202,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 }, "timers-browserify": { @@ -10418,19 +10298,12 @@ "dev": true }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "tr46": { @@ -10439,9 +10312,9 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, "tree-kill": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.1.tgz", - "integrity": "sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true }, "trim-newlines": { @@ -10481,9 +10354,9 @@ } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "tslint": { "version": "5.14.0", @@ -10504,6 +10377,17 @@ "semver": "^5.3.0", "tslib": "^1.8.0", "tsutils": "^2.29.0" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } } }, "tsutils": { @@ -10549,13 +10433,13 @@ } }, "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "~2.1.18" + "mime-types": "~2.1.24" } }, "typedarray": { @@ -10570,39 +10454,40 @@ "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", "dev": true }, - "uglify-js": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.2.tgz", - "integrity": "sha512-+gh/xFte41GPrgSMJ/oJVq15zYmqr74pY9VoM69UzMzq9NFk4YDylclb1/bhEzZSaUQjbW5RvniHeq1cdtRYjw==", - "dev": true, - "optional": true, - "requires": { - "commander": "2.20.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "ultron": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -10680,9 +10565,9 @@ } }, "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 }, "uri-js": { @@ -10750,6 +10635,14 @@ "dev": true, "requires": { "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "util-deprecate": { @@ -10765,9 +10658,9 @@ "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.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -10805,9 +10698,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 }, "void-elements": { @@ -10817,14 +10710,173 @@ "dev": true }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", + "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", "dev": true, "requires": { - "chokidar": "^2.0.2", + "chokidar": "^3.4.0", "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": 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, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "optional": 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.4.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, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": 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, + "optional": 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, + "optional": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "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, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + } } }, "wbuf": { @@ -10883,6 +10935,21 @@ "webpack-sources": "^1.3.0" }, "dependencies": { + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, "schema-utils": { "version": "0.4.7", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", @@ -10935,9 +11002,9 @@ }, "dependencies": { "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true } } @@ -11110,9 +11177,9 @@ } }, "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", "dev": true }, "ms": { @@ -11133,9 +11200,9 @@ } }, "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.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" @@ -11156,16 +11223,27 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "shebang-regex": "^1.0.0" } }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -11208,6 +11286,15 @@ "webpack-log": "^2.0.0" } }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", @@ -11272,14 +11359,6 @@ "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, "webpack-subresource-integrity": { @@ -11292,12 +11371,12 @@ } }, "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", + "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } @@ -11324,10 +11403,9 @@ "dev": true }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } @@ -11393,6 +11471,14 @@ "async-limiter": "~1.0.0", "safe-buffer": "~5.1.0", "ultron": "~1.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "xml-name-validator": { @@ -11401,27 +11487,19 @@ "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=" }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", "dev": true, "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - } + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true }, "xmldom": { @@ -11459,9 +11537,9 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", + "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", "dev": true, "optional": true, "requires": { @@ -11477,7 +11555,7 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "yargs-parser": "5.0.0-security.0" }, "dependencies": { "camelcase": { @@ -11497,13 +11575,14 @@ } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", "dev": true, "optional": true, "requires": { - "camelcase": "^3.0.0" + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" }, "dependencies": { "camelcase": { @@ -11522,9 +11601,9 @@ "dev": true }, "yn": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz", - "integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "zone.js": { diff --git a/coderadar-ui/src/app/city-map/autosuggest-wrapper/autosuggest-wrapper.component.scss b/coderadar-ui/src/app/city-map/autosuggest-wrapper/autosuggest-wrapper.component.scss index 4786de6d7..e5ab0bf59 100644 --- a/coderadar-ui/src/app/city-map/autosuggest-wrapper/autosuggest-wrapper.component.scss +++ b/coderadar-ui/src/app/city-map/autosuggest-wrapper/autosuggest-wrapper.component.scss @@ -25,18 +25,4 @@ button:disabled { display: none; } - - // allow a greater width for suggestions - ngui-auto-complete { - min-width: 100%; - width: auto !important; - } - - // align the suggestion dropdown to the right - &.align-right { - ngui-auto-complete { - left: auto !important; - right: 0; - } - } } diff --git a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html index 70b0cf09e..988b16c6f 100644 --- a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html +++ b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html @@ -1,13 +1,13 @@
{{elementName}}
- +
- + - + diff --git a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html index 9132bf37b..41e9761b3 100644 --- a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html +++ b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html @@ -1,6 +1,10 @@
{{(content$ | async)?.elementName}}
-
MetricMetric {{leftCommit?.name}} {{rightCommit?.name}}ChangeChange
+
+ + + +
MetricValue
{{metric.key}} diff --git a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts index b1143487d..45d0abd30 100644 --- a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts @@ -27,7 +27,7 @@ export class TooltipComponent implements OnInit { const readableMetrics = {}; if (tooltipObject.metrics) { - Object.keys(tooltipObject.metrics).map((key) => { + Object.keys(tooltipObject.metrics).forEach((key) => { readableMetrics[VisualizationConfig.getShortNameByMetricName(key).shortName] = tooltipObject.metrics[key]; }); } diff --git a/coderadar-ui/src/app/view/file-view/file-view.component.html b/coderadar-ui/src/app/view/file-view/file-view.component.html index 00ebd7ace..1f4cd0cb4 100644 --- a/coderadar-ui/src/app/view/file-view/file-view.component.html +++ b/coderadar-ui/src/app/view/file-view/file-view.component.html @@ -30,15 +30,15 @@

-
  • + -
  • +
    -
  • +
  • +
    diff --git a/coderadar-ui/src/app/view/main-dashboard/delete-project-dialog.html b/coderadar-ui/src/app/view/main-dashboard/delete-project-dialog.html index dce0be573..e2d292259 100644 --- a/coderadar-ui/src/app/view/main-dashboard/delete-project-dialog.html +++ b/coderadar-ui/src/app/view/main-dashboard/delete-project-dialog.html @@ -1,5 +1,5 @@
    -

    Are you sure you want to delete {{data.project.name}}?

    +

    Are you sure you want to delete {{data.project.name}}?

    diff --git a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html index 7ba42ee12..258586beb 100644 --- a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html +++ b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html @@ -40,7 +40,7 @@
    Project URL: {{project.vcsUrl}}
    -
    Project start date:   {{project.startDate}}
    +
    Project start date:   {{project.startDate}}
    diff --git a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts index 8809332ee..84c85f5f8 100644 --- a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts +++ b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts @@ -228,7 +228,7 @@ export class ListViewComponent implements OnInit, OnChanges { } if (selectedCommit1Id != null) { this.selectedCommit1 = this.commitsFiltered.find(value => value.name === selectedCommit1Id); - }`` + } if (selectedCommit2Id != null) { this.selectedCommit2 = this.commitsFiltered.find(value => value.name === selectedCommit2Id); } diff --git a/coderadar-ui/src/app/view/view-commit/view-commit.component.html b/coderadar-ui/src/app/view/view-commit/view-commit.component.html index 46a6c2759..a98b19295 100644 --- a/coderadar-ui/src/app/view/view-commit/view-commit.component.html +++ b/coderadar-ui/src/app/view/view-commit/view-commit.component.html @@ -11,16 +11,16 @@ - {{commit.name}} + {{commit.name}}

    - Metrics: + Metrics:

    Not yet analyzed or no metrics are available
    {{metric.metricName.split('.').pop() + ' : '}} - {{metric.value}} + {{metric.value}}
    From 0a96fc5db69fabb8ced72dbf6374acbc6115eb9d Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 8 Jun 2020 16:11:41 +0200 Subject: [PATCH 02/16] remove technical debt --- coderadar-ui/src/app/app.component.scss | 0 coderadar-ui/src/app/app.component.ts | 3 +- .../app/city-map/helper/element-analyzer.ts | 2 +- .../comparison-panel.component.ts | 3 +- .../interaction-handler.ts | 4 +- .../visualization/legend/legend.component.ts | 13 ++- .../screen/screen.component.scss | 0 .../visualization/screen/screen.component.ts | 5 +- .../tooltip/tooltip.component.ts | 2 +- .../visualization/visualization.component.ts | 2 +- .../dependency-base.ts | 8 +- .../tree-node/tree-node.component.scss | 4 - .../add-project/add-project.component.html | 2 +- .../add-project/add-project.component.scss | 3 + .../view/add-project/add-project.component.ts | 2 +- .../view/city-view/city-view.component.scss | 0 .../app/view/city-view/city-view.component.ts | 2 - .../configure-project.component.html | 2 +- .../configure-project.component.scss | 3 + .../edit-project/edit-project.component.html | 2 +- .../edit-project/edit-project.component.scss | 4 + .../edit-project/edit-project.component.ts | 4 +- .../src/app/view/footer/footer.component.scss | 0 .../src/app/view/footer/footer.component.ts | 3 +- .../src/app/view/login/login.component.html | 2 +- .../src/app/view/login/login.component.scss | 3 + .../src/app/view/login/login.component.ts | 2 +- .../main-dashboard.component.html | 2 +- .../main-dashboard.component.scss | 4 + .../app/view/register/register.component.html | 2 +- .../app/view/register/register.component.scss | 3 + .../user-settings.component.html | 2 +- .../user-settings.component.scss | 3 + coderadar-ui/src/styles.scss | 96 +++++++++---------- 34 files changed, 102 insertions(+), 90 deletions(-) delete mode 100644 coderadar-ui/src/app/app.component.scss delete mode 100644 coderadar-ui/src/app/city-map/visualization/screen/screen.component.scss delete mode 100644 coderadar-ui/src/app/view/city-view/city-view.component.scss delete mode 100644 coderadar-ui/src/app/view/footer/footer.component.scss diff --git a/coderadar-ui/src/app/app.component.scss b/coderadar-ui/src/app/app.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/app.component.ts b/coderadar-ui/src/app/app.component.ts index 501830729..756810cbf 100644 --- a/coderadar-ui/src/app/app.component.ts +++ b/coderadar-ui/src/app/app.component.ts @@ -2,8 +2,7 @@ import {Component} from '@angular/core'; @Component({ selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.scss'] + templateUrl: './app.component.html' }) export class AppComponent { private static apiUrl = 'http://localhost:8080/api/'; diff --git a/coderadar-ui/src/app/city-map/helper/element-analyzer.ts b/coderadar-ui/src/app/city-map/helper/element-analyzer.ts index 1a19ffe90..8e45f6402 100644 --- a/coderadar-ui/src/app/city-map/helper/element-analyzer.ts +++ b/coderadar-ui/src/app/city-map/helper/element-analyzer.ts @@ -198,7 +198,7 @@ export class ElementAnalyzer { } } - static getValueFromMetric(metrics: MetricValue[], metricName: String) { + static getValueFromMetric(metrics: MetricValue[], metricName: string) { let index = metrics ? Object.values(metrics).findIndex(object => object.metricName === metricName): -1; return index >= 0 ? Number(metrics[index].value) : undefined; } diff --git a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.ts b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.ts index 603c702f0..05b3eae54 100644 --- a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.ts @@ -8,7 +8,6 @@ import {ComparisonPanelService} from '../../service/comparison-panel.service'; import {VisualizationConfig} from '../../VisualizationConfig'; import {Subscription} from 'rxjs'; import {Commit} from '../../../model/commit'; -import {MetricValue} from '../../../model/metric-value'; import {ElementAnalyzer} from '../../helper/element-analyzer'; @Component({ @@ -40,7 +39,7 @@ export class ComparisonPanelComponent implements OnInit, OnDestroy { } ngOnInit() { - this.comparisonPanel = document.querySelector('#comparison-panel') as HTMLElement; + this.comparisonPanel = document.querySelector('#comparison-panel'); this.subscriptions.push( this.comparisonPanelService.showComparisonPanel$.subscribe((params) => { this.elementName = params.elementName; diff --git a/coderadar-ui/src/app/city-map/visualization/interaction-handler/interaction-handler.ts b/coderadar-ui/src/app/city-map/visualization/interaction-handler/interaction-handler.ts index 73d1a0688..a94151ffe 100644 --- a/coderadar-ui/src/app/city-map/visualization/interaction-handler/interaction-handler.ts +++ b/coderadar-ui/src/app/city-map/visualization/interaction-handler/interaction-handler.ts @@ -196,8 +196,8 @@ export class InteractionHandler { private worldPositionToScreenPosition(worldPosition: Vector3, camera: Camera): Vector2 { const screenCoordinate: Vector3 = worldPosition.project(camera); const screenPosition: Vector2 = new Vector2( - this.screenOffset.x + (( (screenCoordinate.x + 1) * this.screenDimensions.x / 2)), - this.screenOffset.y + ((-(screenCoordinate.y - 1) * this.screenDimensions.y / 2))); + this.screenOffset.x + ( (screenCoordinate.x + 1) * this.screenDimensions.x / 2), + this.screenOffset.y + (-(screenCoordinate.y - 1) * this.screenDimensions.y / 2)); return screenPosition; } diff --git a/coderadar-ui/src/app/city-map/visualization/legend/legend.component.ts b/coderadar-ui/src/app/city-map/visualization/legend/legend.component.ts index a04eb4890..359fc075b 100644 --- a/coderadar-ui/src/app/city-map/visualization/legend/legend.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/legend/legend.component.ts @@ -7,7 +7,6 @@ import * as fromRoot from '../../shared/reducers'; import {IMetricMapping} from '../../interfaces/IMetricMapping'; import {Observable} from 'rxjs'; import {ViewType} from '../../enum/ViewType'; -import {map} from 'rxjs/operators'; @Component({ selector: 'app-legend', @@ -65,11 +64,11 @@ export class LegendComponent implements OnInit { this.colorDeletedFile = VisualizationConfig.COLOR_DELETED_FILE; this.colorUnchangedFile = VisualizationConfig.COLOR_UNCHANGED_FILE; - this.legendItemCommit1 = document.querySelector('#legend-item-commit-1') as HTMLElement; - this.legendItemCommit2 = document.querySelector('#legend-item-commit-2') as HTMLElement; - this.legendItemColorCode = document.querySelector('#legend-item-color-code') as HTMLElement; - this.legendItemAddedFiles = document.querySelector('#legend-item-added-files') as HTMLElement; - this.legendItemDeletedFiles = document.querySelector('#legend-item-deleted-files') as HTMLElement; - this.legendItemUnchangedFiles = document.querySelector('#legend-item-unchanged-files') as HTMLElement; + this.legendItemCommit1 = document.querySelector('#legend-item-commit-1'); + this.legendItemCommit2 = document.querySelector('#legend-item-commit-2'); + this.legendItemColorCode = document.querySelector('#legend-item-color-code'); + this.legendItemAddedFiles = document.querySelector('#legend-item-added-files'); + this.legendItemDeletedFiles = document.querySelector('#legend-item-deleted-files'); + this.legendItemUnchangedFiles = document.querySelector('#legend-item-unchanged-files'); } } diff --git a/coderadar-ui/src/app/city-map/visualization/screen/screen.component.scss b/coderadar-ui/src/app/city-map/visualization/screen/screen.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/visualization/screen/screen.component.ts b/coderadar-ui/src/app/city-map/visualization/screen/screen.component.ts index f8f36f65b..af38c9fe7 100644 --- a/coderadar-ui/src/app/city-map/visualization/screen/screen.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/screen/screen.component.ts @@ -24,8 +24,7 @@ import {ElementAnalyzer} from '../../helper/element-analyzer'; @Component({ selector: 'app-screen', - templateUrl: './screen.component.html', - styleUrls: ['./screen.component.scss'] + templateUrl: './screen.component.html' }) export class ScreenComponent implements OnInit, OnChanges, OnDestroy { @@ -176,7 +175,7 @@ export class ScreenComponent implements OnInit, OnChanges, OnDestroy { } createControls() { - this.controls = new OrbitControls(this.camera, document.querySelector('#stage') as HTMLElement); + this.controls = new OrbitControls(this.camera, document.querySelector('#stage')); } resetControls() { diff --git a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts index 45d0abd30..e04dbec30 100644 --- a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.ts @@ -19,7 +19,7 @@ export class TooltipComponent implements OnInit { } ngOnInit() { - this.tooltipElement = document.querySelector('#tooltip') as HTMLElement; + this.tooltipElement = document.querySelector('#tooltip'); this.content$ = this.tooltipService.tooltipContent$ .pipe( diff --git a/coderadar-ui/src/app/city-map/visualization/visualization.component.ts b/coderadar-ui/src/app/city-map/visualization/visualization.component.ts index eb41bcee7..38b5e44fe 100644 --- a/coderadar-ui/src/app/city-map/visualization/visualization.component.ts +++ b/coderadar-ui/src/app/city-map/visualization/visualization.component.ts @@ -3,7 +3,7 @@ import {combineLatest, Observable, Subscription} from 'rxjs'; import {filter} from 'rxjs/operators'; import {Store} from '@ngrx/store'; import * as fromRoot from '../shared/reducers'; -import {loadAvailableMetrics, loadMetricTree} from './visualization.actions'; +import {loadMetricTree} from './visualization.actions'; import {IFilter} from '../interfaces/IFilter'; import {INode} from '../interfaces/INode'; import {IMetricMapping} from '../interfaces/IMetricMapping'; diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts index bccc071ad..e1169925f 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts @@ -1,4 +1,4 @@ -import {ElementRef, HostListener, ViewChild} from '@angular/core'; +import {HostListener, ViewChild} from '@angular/core'; import html2canvas from 'html2canvas'; import * as $ from 'jquery'; import * as jspdf from 'jspdf'; @@ -86,7 +86,7 @@ export abstract class DependencyBase { while (element.offsetParent === null) { element = element.parentNode.parentNode.parentNode.parentNode.parentNode.firstElementChild as HTMLElement; } - return element as HTMLElement; + return element; } loadDependencies(node, checkChanged?): void { @@ -178,7 +178,7 @@ export abstract class DependencyBase { // calculate positions for arrows of currentNode and its dependencies if (currentNode.dependencies.length > 0) { // find last visible element for currentNode as start - let start = this.findLastHTMLElement(currentNode.path) as HTMLElement; + let start = this.findLastHTMLElement(currentNode.path); let toDraw; if (this.activeDependency !== undefined) { // activeDependency is set is not start @@ -195,7 +195,7 @@ export abstract class DependencyBase { currentNode.dependencies.forEach(dependency => { // find last visible element for dependency as end - let end = this.findLastHTMLElement(dependency.path) as HTMLElement; + let end = this.findLastHTMLElement(dependency.path); // if activeDependency is set, draw only activeDependency related dependencies if (this.activeDependency !== undefined) { diff --git a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.scss b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.scss index 9581d760d..fb20f428a 100644 --- a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.scss +++ b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.scss @@ -91,7 +91,3 @@ ul { font-weight: normal; font-style: normal; } - -.clickable { - cursor: pointer; -} diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.html b/coderadar-ui/src/app/view/add-project/add-project.component.html index 9196d8619..0ef33b563 100644 --- a/coderadar-ui/src/app/view/add-project/add-project.component.html +++ b/coderadar-ui/src/app/view/add-project/add-project.component.html @@ -43,7 +43,7 @@ The VCS URL is invalid! -
    +
    diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.scss b/coderadar-ui/src/app/view/add-project/add-project.component.scss index e69de29bb..15ba23f73 100644 --- a/coderadar-ui/src/app/view/add-project/add-project.component.scss +++ b/coderadar-ui/src/app/view/add-project/add-project.component.scss @@ -0,0 +1,3 @@ +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.ts b/coderadar-ui/src/app/view/add-project/add-project.component.ts index c7fffc27b..c06f99d1b 100644 --- a/coderadar-ui/src/app/view/add-project/add-project.component.ts +++ b/coderadar-ui/src/app/view/add-project/add-project.component.ts @@ -3,7 +3,7 @@ import {Project} from '../../model/project'; import {ProjectService} from '../../service/project.service'; import {Router} from '@angular/router'; import {UserService} from '../../service/user.service'; -import {BAD_REQUEST, CONFLICT, FORBIDDEN, INTERNAL_SERVER_ERROR} from 'http-status-codes'; +import {BAD_REQUEST, CONFLICT, FORBIDDEN} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; @Component({ diff --git a/coderadar-ui/src/app/view/city-view/city-view.component.scss b/coderadar-ui/src/app/view/city-view/city-view.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/view/city-view/city-view.component.ts b/coderadar-ui/src/app/view/city-view/city-view.component.ts index edc9bf7ef..6d1124cde 100644 --- a/coderadar-ui/src/app/view/city-view/city-view.component.ts +++ b/coderadar-ui/src/app/view/city-view/city-view.component.ts @@ -2,7 +2,6 @@ import {Component, OnInit} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; import {AppEffects} from '../../city-map/shared/effects'; import {Title} from '@angular/platform-browser'; -import {Project} from '../../model/project'; import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; import {ProjectService} from '../../service/project.service'; import {UserService} from '../../service/user.service'; @@ -11,7 +10,6 @@ import {AppComponent} from '../../app.component'; @Component({ selector: 'app-city-view', templateUrl: './city-view.component.html', - styleUrls: ['./city-view.component.scss'] }) export class CityViewComponent implements OnInit { diff --git a/coderadar-ui/src/app/view/configure-project/configure-project.component.html b/coderadar-ui/src/app/view/configure-project/configure-project.component.html index 4fbb15af8..235954479 100644 --- a/coderadar-ui/src/app/view/configure-project/configure-project.component.html +++ b/coderadar-ui/src/app/view/configure-project/configure-project.component.html @@ -109,7 +109,7 @@
    -
    +
    diff --git a/coderadar-ui/src/app/view/configure-project/configure-project.component.scss b/coderadar-ui/src/app/view/configure-project/configure-project.component.scss index 3d48f0e38..2061c3b3e 100644 --- a/coderadar-ui/src/app/view/configure-project/configure-project.component.scss +++ b/coderadar-ui/src/app/view/configure-project/configure-project.component.scss @@ -28,3 +28,6 @@ min-height: calc(100vh); } +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.html b/coderadar-ui/src/app/view/edit-project/edit-project.component.html index b8735ebcf..95ffd587f 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.html +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.html @@ -44,7 +44,7 @@ The VCS URL is invalid! -
    +
    diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.scss b/coderadar-ui/src/app/view/edit-project/edit-project.component.scss index 90f9bb118..ebc2fb37c 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.scss +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.scss @@ -7,3 +7,7 @@ z-index: 3; min-height: calc(100vh); } + +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index cc02ce4dd..23d94b33b 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -3,7 +3,7 @@ import {Project} from '../../model/project'; import {ActivatedRoute, Router} from '@angular/router'; import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; -import {BAD_REQUEST, CONFLICT, FORBIDDEN, INTERNAL_SERVER_ERROR, NOT_FOUND, UNPROCESSABLE_ENTITY} from 'http-status-codes'; +import {BAD_REQUEST, CONFLICT, FORBIDDEN, NOT_FOUND, UNPROCESSABLE_ENTITY} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; import {MatSnackBar} from '@angular/material'; @@ -109,7 +109,7 @@ export class EditProjectComponent implements OnInit { private validateInput(): boolean { this.incorrectURL = this.project.vcsUrl.trim().length === 0; this.nameEmpty = this.project.name.trim().length === 0; - + if (this.project.startDate === 'first commit') { this.project.startDate = null; } diff --git a/coderadar-ui/src/app/view/footer/footer.component.scss b/coderadar-ui/src/app/view/footer/footer.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/view/footer/footer.component.ts b/coderadar-ui/src/app/view/footer/footer.component.ts index 04659973f..6d78156bb 100644 --- a/coderadar-ui/src/app/view/footer/footer.component.ts +++ b/coderadar-ui/src/app/view/footer/footer.component.ts @@ -4,8 +4,7 @@ import {DomSanitizer} from '@angular/platform-browser'; @Component({ selector: 'app-footer', - templateUrl: './footer.component.html', - styleUrls: ['./footer.component.scss'] + templateUrl: './footer.component.html' }) export class FooterComponent { diff --git a/coderadar-ui/src/app/view/login/login.component.html b/coderadar-ui/src/app/view/login/login.component.html index fd7739eed..31deaced2 100644 --- a/coderadar-ui/src/app/view/login/login.component.html +++ b/coderadar-ui/src/app/view/login/login.component.html @@ -25,7 +25,7 @@ -
    +
    diff --git a/coderadar-ui/src/app/view/login/login.component.scss b/coderadar-ui/src/app/view/login/login.component.scss index e69de29bb..15ba23f73 100644 --- a/coderadar-ui/src/app/view/login/login.component.scss +++ b/coderadar-ui/src/app/view/login/login.component.scss @@ -0,0 +1,3 @@ +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/login/login.component.ts b/coderadar-ui/src/app/view/login/login.component.ts index ac20356ce..cb982a8dd 100644 --- a/coderadar-ui/src/app/view/login/login.component.ts +++ b/coderadar-ui/src/app/view/login/login.component.ts @@ -1,7 +1,7 @@ import {Component} from '@angular/core'; import {Router} from '@angular/router'; import {UserService} from '../../service/user.service'; -import {FORBIDDEN, INTERNAL_SERVER_ERROR, NOT_FOUND} from 'http-status-codes'; +import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; @Component({ diff --git a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html index 258586beb..8ad489b80 100644 --- a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html +++ b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html @@ -7,7 +7,7 @@
    -
    +
    Hello there, it looks like you haven't added any projects yet.
    Click on the plus button to add one.
    diff --git a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.scss b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.scss index d58b62d50..8525efd68 100644 --- a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.scss +++ b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.scss @@ -57,3 +57,7 @@ margin-right: 100px; margin-top: 2px; } + +#noProjectsMessage { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/register/register.component.html b/coderadar-ui/src/app/view/register/register.component.html index 8e90457d8..3a3391327 100644 --- a/coderadar-ui/src/app/view/register/register.component.html +++ b/coderadar-ui/src/app/view/register/register.component.html @@ -31,7 +31,7 @@ Passwords do not match! -
    +
    diff --git a/coderadar-ui/src/app/view/register/register.component.scss b/coderadar-ui/src/app/view/register/register.component.scss index 823af28a7..fa4e1a201 100644 --- a/coderadar-ui/src/app/view/register/register.component.scss +++ b/coderadar-ui/src/app/view/register/register.component.scss @@ -10,3 +10,6 @@ form { min-width: 22%; } +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/app/view/user-settings/user-settings.component.html b/coderadar-ui/src/app/view/user-settings/user-settings.component.html index 84d23b356..54ba1ec06 100644 --- a/coderadar-ui/src/app/view/user-settings/user-settings.component.html +++ b/coderadar-ui/src/app/view/user-settings/user-settings.component.html @@ -40,7 +40,7 @@ -
    +
    diff --git a/coderadar-ui/src/app/view/user-settings/user-settings.component.scss b/coderadar-ui/src/app/view/user-settings/user-settings.component.scss index e69de29bb..15ba23f73 100644 --- a/coderadar-ui/src/app/view/user-settings/user-settings.component.scss +++ b/coderadar-ui/src/app/view/user-settings/user-settings.component.scss @@ -0,0 +1,3 @@ +#cardButtons { + text-align: center; +} diff --git a/coderadar-ui/src/styles.scss b/coderadar-ui/src/styles.scss index b4b32dfd6..4cd306989 100644 --- a/coderadar-ui/src/styles.scss +++ b/coderadar-ui/src/styles.scss @@ -100,54 +100,54 @@ Styles for the login and register forms min-width: 22%; } -#stage canvas { - position: absolute; - cursor: -webkit-grab; - transition: all 1s ease -} - -#stage canvas:first-child { - left: 0 -} - -#stage canvas:last-child { - opacity: 0; - left: 100% -} - -#stage.split canvas:last-child { - opacity: 1; - left: 50% -} - -.dropdown-menu { - padding: 1.25rem -} - -.ngui-auto-complete > ul { - min-width: 100%; - box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0; - white-space: nowrap; - max-height: 250px -} - -.ngui-auto-complete > ul li { - cursor: pointer; - padding: 10px 15px !important; - max-width: 400px; - overflow: hidden; - text-overflow: ellipsis -} - -.ngui-auto-complete > ul li.selected { - color: #000; - background-color: #f3f3f3 !important -} - -.ngui-auto-complete > ul li:hover { - color: #000; - background-color: #f3f3f3 !important -} +//#stage canvas { +// position: absolute; +// cursor: -webkit-grab; +// transition: all 1s ease +//} +// +//#stage canvas:first-child { +// left: 0 +//} +// +//#stage canvas:last-child { +// opacity: 0; +// left: 100% +//} +// +//#stage.split canvas:last-child { +// opacity: 1; +// left: 50% +//} +// +//.dropdown-menu { +// padding: 1.25rem +//} +// +//.ngui-auto-complete > ul { +// min-width: 100%; +// box-shadow: rgba(0, 0, 0, 0.2) 0 2px 6px 0; +// white-space: nowrap; +// max-height: 250px +//} +// +//.ngui-auto-complete > ul li { +// cursor: pointer; +// padding: 10px 15px !important; +// max-width: 400px; +// overflow: hidden; +// text-overflow: ellipsis +//} +// +//.ngui-auto-complete > ul li.selected { +// color: #000; +// background-color: #f3f3f3 !important +//} +// +//.ngui-auto-complete > ul li:hover { +// color: #000; +// background-color: #f3f3f3 !important +//} #stage { canvas { From 604f233767e6f73f883534ef9434f83be0130012 Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 8 Jun 2020 17:59:33 +0200 Subject: [PATCH 03/16] add caption to table and hide it --- .../comparison-panel/comparison-panel.component.html | 3 ++- .../comparison-panel/comparison-panel.component.scss | 4 ++++ .../app/city-map/visualization/tooltip/tooltip.component.html | 3 ++- .../app/city-map/visualization/tooltip/tooltip.component.scss | 4 ++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html index 988b16c6f..1bd36a178 100644 --- a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html +++ b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.html @@ -1,7 +1,8 @@
    {{elementName}}
    - +
    + diff --git a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.scss b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.scss index 3aa7d486f..f75d978c1 100644 --- a/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.scss +++ b/coderadar-ui/src/app/city-map/visualization/comparison-panel/comparison-panel.component.scss @@ -45,3 +45,7 @@ right: 12px; } } + +caption { + visibility: hidden; +} diff --git a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html index 41e9761b3..28471ca68 100644 --- a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html +++ b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.html @@ -1,6 +1,7 @@
    {{(content$ | async)?.elementName}}
    -
    Comparison of the metric values between the selected commits.
    Metric
    +
    + diff --git a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.scss b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.scss index 1d06e466a..b18740f93 100644 --- a/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.scss +++ b/coderadar-ui/src/app/city-map/visualization/tooltip/tooltip.component.scss @@ -34,3 +34,7 @@ } } } + +caption { + visibility: hidden; +} From e89e00cc116285b1b08270a3f88f3c0cc6c1cf3c Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 9 Jun 2020 17:34:12 +0200 Subject: [PATCH 04/16] merge tree and compare view to reduce duplicate code --- coderadar-ui/src/app/app.module.ts | 4 +- .../dependency-base.component.html | 20 +++++++++ .../dependency-base.component.scss | 0 .../dependency-base.component.spec.ts | 25 +++++++++++ .../dependency-base.component.ts} | 45 ++++++++++++------- .../dependency-compare.component.ts | 4 +- .../dependency-root.component.html | 20 +-------- .../dependency-root.component.ts | 8 ++-- 8 files changed, 84 insertions(+), 42 deletions(-) create mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html create mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss create mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts rename coderadar-ui/src/app/levelized-structure-map/{dependency-base.ts => dependency-base/dependency-base.component.ts} (89%) diff --git a/coderadar-ui/src/app/app.module.ts b/coderadar-ui/src/app/app.module.ts index 424b17db6..b01a78b31 100644 --- a/coderadar-ui/src/app/app.module.ts +++ b/coderadar-ui/src/app/app.module.ts @@ -65,6 +65,7 @@ import {ScrollingModule} from '@angular/cdk/scrolling'; import { ListViewComponent } from './view/project-dashboard/list-view/list-view.component'; import { BranchViewComponent } from './view/project-dashboard/branch-view/branch-view.component'; import { FileViewComponent } from './view/file-view/file-view.component'; +import { DependencyBaseComponent } from './levelized-structure-map/dependency-base/dependency-base.component'; const appRoutes: Routes = [ {path: 'login', component: LoginComponent}, @@ -106,7 +107,8 @@ const appRoutes: Routes = [ CityViewHeaderComponent, ListViewComponent, BranchViewComponent, - FileViewComponent + FileViewComponent, + DependencyBaseComponent ], imports: [ BrowserModule, diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html new file mode 100644 index 000000000..3c551cce9 --- /dev/null +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html @@ -0,0 +1,20 @@ +
    + + +
    +
    + +
    +
    +
    + + + + +
    +
    +
    + +
    +
    +
    diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts new file mode 100644 index 000000000..e41b5273a --- /dev/null +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DependencyBaseComponent } from './dependency-base.component'; + +describe('DependencyBaseComponent', () => { + let component: DependencyBaseComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ DependencyBaseComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(DependencyBaseComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts similarity index 89% rename from coderadar-ui/src/app/levelized-structure-map/dependency-base.ts rename to coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts index e1169925f..100de6a5b 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-base.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts @@ -1,13 +1,20 @@ -import {HostListener, ViewChild} from '@angular/core'; -import html2canvas from 'html2canvas'; +import {Component, HostListener, OnInit, ViewChild} from '@angular/core'; +import {AppComponent} from '../../app.component'; +import {Project} from '../../model/project'; +import {EdgeModel} from '../edge.model'; import * as $ from 'jquery'; import * as jspdf from 'jspdf'; -import {AppComponent} from "../app.component"; -import {Project} from "../model/project"; -import {FORBIDDEN, NOT_FOUND} from "http-status-codes"; -import {EdgeModel} from "./edge.model"; +import html2canvas from 'html2canvas'; +import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; -export abstract class DependencyBase { +@Component({ + selector: 'app-dependency-base', + templateUrl: './dependency-base.component.html', + styleUrls: ['./dependency-base.component.scss'] +}) +export class DependencyBaseComponent { + + constructor() { } appComponent = AppComponent; projectService: any; @@ -138,9 +145,12 @@ export abstract class DependencyBase { draw(callback): void { // clear svg - $("#3svg").empty(); + $('#3svg').empty(); this.drawn = []; + console.log('start drawing'); + console.log(this.node ? 'node' : 'null'); const rootList = document.getElementById('3list__root'); + console.log(rootList); this.svg = document.getElementById('3svg'); const zoom = document.getElementById('3zoom'); const scroll = document.querySelector('[id="3scroll"] > div') as HTMLElement; @@ -178,7 +188,7 @@ export abstract class DependencyBase { // calculate positions for arrows of currentNode and its dependencies if (currentNode.dependencies.length > 0) { // find last visible element for currentNode as start - let start = this.findLastHTMLElement(currentNode.path); + const start = this.findLastHTMLElement(currentNode.path); let toDraw; if (this.activeDependency !== undefined) { // activeDependency is set is not start @@ -189,13 +199,13 @@ export abstract class DependencyBase { // different values for chrome and firefox // (ref: https://stackoverflow.com/questions/1472842/firefox-and-chrome-give-different-values-for-offsettop). const startx = ($(start).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + start.offsetWidth / 2; - let starty = ($(start).offset().top - $(this.svg).offset().top) / this.zoomElement.scale + start.offsetHeight + ($(start).css('padding-top') !== '0px' ? 0 : 5); - let startTop = starty - start.offsetHeight - ($(start).css('padding-top') !== '0px' ? 0 : 10); + const starty = ($(start).offset().top - $(this.svg).offset().top) / this.zoomElement.scale + start.offsetHeight + ($(start).css('padding-top') !== '0px' ? 0 : 5); + const startTop = starty - start.offsetHeight - ($(start).css('padding-top') !== '0px' ? 0 : 10); console.log(parseFloat($(start).css('padding-top'))); currentNode.dependencies.forEach(dependency => { // find last visible element for dependency as end - let end = this.findLastHTMLElement(dependency.path); + const end = this.findLastHTMLElement(dependency.path); // if activeDependency is set, draw only activeDependency related dependencies if (this.activeDependency !== undefined) { @@ -210,8 +220,8 @@ export abstract class DependencyBase { // end = end.parentNode as HTMLElement; const endx = ($(end).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + end.offsetWidth / 2; - let endy = ($(end).offset().top - $(this.svg).offset().top) / this.zoomElement.scale - ($(end).css('padding-bottom') !== '0px' ? 0 : 7); - let endBottom = endy + end.offsetHeight + ($(end).css('padding-bottom') !== '0px' ? 0 : 14); + const endy = ($(end).offset().top - $(this.svg).offset().top) / this.zoomElement.scale - ($(end).css('padding-bottom') !== '0px' ? 0 : 7); + const endBottom = endy + end.offsetHeight + ($(end).css('padding-bottom') !== '0px' ? 0 : 14); if (start !== end) { if (dependency.changed === 'ADD') { @@ -250,7 +260,7 @@ export abstract class DependencyBase { svgArrow(startx, starty, endx, endy, color, width?, dashed?) { // reduce number of nodes - let edge = new EdgeModel(startx, starty, endx, endy, color, width, dashed); + const edge = new EdgeModel(startx, starty, endx, endy, color, width, dashed); if (this.drawn.filter(existingEdge => existingEdge.equals(edge)).length > 0) { return; } @@ -301,8 +311,8 @@ export abstract class DependencyBase { ); } - drawFigure(figureDefinition: string, width: number, color: string, dashed? : boolean) { - const figure = document.createElementNS("http://www.w3.org/2000/svg", 'path'); + drawFigure(figureDefinition: string, width: number, color: string, dashed?: boolean) { + const figure = document.createElementNS('http://www.w3.org/2000/svg', 'path'); figure.setAttribute('d', figureDefinition); figure.style.stroke = color; figure.style.fill = 'transparent'; @@ -326,4 +336,5 @@ export abstract class DependencyBase { } }); } + } diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts index 2e984d07d..682f1d735 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts @@ -3,7 +3,7 @@ import {ActivatedRoute, Router} from '@angular/router'; import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; import {FORBIDDEN} from 'http-status-codes'; -import {DependencyBase} from '../dependency-base'; +import {DependencyBaseComponent} from '../dependency-base/dependency-base.component'; @Component({ selector: 'app-dependency-compare', @@ -11,7 +11,7 @@ import {DependencyBase} from '../dependency-base'; styleUrls: ['./dependency-compare.component.scss'], encapsulation: ViewEncapsulation.None }) -export class DependencyCompareComponent extends DependencyBase implements OnInit, AfterViewInit { +export class DependencyCompareComponent extends DependencyBaseComponent implements OnInit, AfterViewInit { commitName2: any; @ViewChild('3showChanged') showChangedContainer; diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html index 7b44d44a6..d223f737c 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html @@ -9,22 +9,4 @@ No active dependency chosen. -
    - - -
    -
    - -
    -
    -
    - - - -
    -
    -
    - -
    -
    -
    + diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts index 4079178d0..4596771ca 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts @@ -3,7 +3,7 @@ import {ActivatedRoute, Router} from '@angular/router'; import {ProjectService} from '../../service/project.service'; import {FORBIDDEN} from 'http-status-codes'; import {UserService} from '../../service/user.service'; -import {DependencyBase} from '../dependency-base'; +import {DependencyBaseComponent} from '../dependency-base/dependency-base.component'; @Component({ selector: 'app-tree-root', @@ -11,7 +11,7 @@ import {DependencyBase} from '../dependency-base'; styleUrls: ['./dependency-root.component.scss'], encapsulation: ViewEncapsulation.None }) -export class DependencyRootComponent extends DependencyBase implements OnInit, AfterViewInit { +export class DependencyRootComponent extends DependencyBaseComponent implements OnInit, AfterViewInit { constructor(router: Router, userService: UserService, projectService: ProjectService, private route: ActivatedRoute) { super(); @@ -35,9 +35,11 @@ export class DependencyRootComponent extends DependencyBase implements OnInit, A getData(): void { this.projectService.getDependencyTree(this.projectId, this.commitName).then(response => { this.node = response.body; + console.log('got data'); this.svg = document.getElementById('3svg'); this.checkDown = this.checkUp = true; - setTimeout(() => this.draw(() => this.loadDependencies(this.node)), 50); + console.log('wait for rendering'); + setTimeout(() => this.draw(() => this.loadDependencies(this.node)), 500); }) .catch(e => { if (e.status && e.status === FORBIDDEN) { From e1302f119e222347c251a67112a5f46e9b104c5a Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 15 Jun 2020 18:41:54 +0200 Subject: [PATCH 05/16] use compare component with checks for everything to reduce duplicates --- coderadar-ui/src/app/app.module.ts | 7 +- .../dependency-base.component.html | 20 - .../dependency-base.component.scss | 0 .../dependency-base.component.spec.ts | 25 -- .../dependency-base.component.ts | 340 ---------------- .../dependency-compare.component.html | 10 +- .../dependency-compare.component.ts | 372 +++++++++++++++++- .../dependency-root.component.html | 12 - .../dependency-root.component.scss | 27 -- .../dependency-root.component.spec.ts | 332 ---------------- .../dependency-root.component.ts | 50 --- .../tree-node/tree-node.component.ts | 4 +- .../list-view/list-view.component.html | 2 +- 13 files changed, 367 insertions(+), 834 deletions(-) delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.scss delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.spec.ts delete mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts diff --git a/coderadar-ui/src/app/app.module.ts b/coderadar-ui/src/app/app.module.ts index b01a78b31..bb07bb36a 100644 --- a/coderadar-ui/src/app/app.module.ts +++ b/coderadar-ui/src/app/app.module.ts @@ -55,7 +55,6 @@ import {environment} from '../environments/environment'; import {CityViewComponent} from './view/city-view/city-view.component'; import {CityViewHeaderComponent} from './view/city-view/city-view-header/city-view-header.component'; import {FontAwesomeModule} from '@fortawesome/angular-fontawesome'; -import {DependencyRootComponent} from './levelized-structure-map/dependency-root/dependency-root.component'; import {DependencyCompareComponent} from './levelized-structure-map/dependency-compare/dependency-compare.component'; import {TreeNodeComponent} from './levelized-structure-map/tree-node/tree-node.component'; import {MatSelectModule} from '@angular/material/select'; @@ -65,7 +64,6 @@ import {ScrollingModule} from '@angular/cdk/scrolling'; import { ListViewComponent } from './view/project-dashboard/list-view/list-view.component'; import { BranchViewComponent } from './view/project-dashboard/branch-view/branch-view.component'; import { FileViewComponent } from './view/file-view/file-view.component'; -import { DependencyBaseComponent } from './levelized-structure-map/dependency-base/dependency-base.component'; const appRoutes: Routes = [ {path: 'login', component: LoginComponent}, @@ -78,7 +76,6 @@ const appRoutes: Routes = [ {path: 'project-edit/:id', component: EditProjectComponent}, {path: 'project/:id', component: ProjectDashboardComponent}, {path: 'project/:id/:name', component: ViewCommitComponent}, - {path: 'project/:projectId/:commitName/dependency-map', component: DependencyRootComponent}, {path: 'project/:projectId/:commitName1/:commitName2/dependency-map', component: DependencyCompareComponent}, {path: 'project/:projectId/:commitHash/files', component: FileViewComponent}, {path: '', redirectTo: '/dashboard', pathMatch: 'full'} @@ -100,15 +97,13 @@ const appRoutes: Routes = [ ProjectDashboardComponent, ViewCommitComponent, CityViewComponent, - DependencyRootComponent, MergeDialogComponent, DependencyCompareComponent, TreeNodeComponent, CityViewHeaderComponent, ListViewComponent, BranchViewComponent, - FileViewComponent, - DependencyBaseComponent + FileViewComponent ], imports: [ BrowserModule, diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html deleted file mode 100644 index 3c551cce9..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.html +++ /dev/null @@ -1,20 +0,0 @@ -
    - - -
    -
    - -
    -
    -
    - - - - -
    -
    -
    - -
    -
    -
    diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts deleted file mode 100644 index e41b5273a..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - -import { DependencyBaseComponent } from './dependency-base.component'; - -describe('DependencyBaseComponent', () => { - let component: DependencyBaseComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [ DependencyBaseComponent ] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(DependencyBaseComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts deleted file mode 100644 index 100de6a5b..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-base/dependency-base.component.ts +++ /dev/null @@ -1,340 +0,0 @@ -import {Component, HostListener, OnInit, ViewChild} from '@angular/core'; -import {AppComponent} from '../../app.component'; -import {Project} from '../../model/project'; -import {EdgeModel} from '../edge.model'; -import * as $ from 'jquery'; -import * as jspdf from 'jspdf'; -import html2canvas from 'html2canvas'; -import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; - -@Component({ - selector: 'app-dependency-base', - templateUrl: './dependency-base.component.html', - styleUrls: ['./dependency-base.component.scss'] -}) -export class DependencyBaseComponent { - - constructor() { } - - appComponent = AppComponent; - projectService: any; - userService: any; - router: any; - project: Project = new Project(); - node: any; - projectId: number; - commitName: any; - checkDown: boolean; - checkChanged: boolean; - checkUp: boolean; - activeDependency: any; - formats = [ - { format: 'image/png', value: 'png' }, - { format: 'image/jpeg', value: 'jpg' }, - { format: 'application/pdf', value: 'pdf' } - ]; - selected = 0; - svg: any; - readonly headLength = 10; - drawn: EdgeModel[] = []; - @ViewChild('3activeDependency') activeDependencyContainer; - @ViewChild('3canvasContainer') canvasContainer; - @ViewChild('3zoom') zoomElement; - - public onShowUpwardChanged(): void { - this.checkUp = !this.checkUp; - this.draw(() => this.loadDependencies(this.node, this.checkChanged)); - } - - public onShowDownwardChanged(): void { - this.checkDown = !this.checkDown; - this.draw(() => this.loadDependencies(this.node, this.checkChanged)); - } - - public screenshotListener(): void { - const rootList = document.getElementById('3list__root'); - html2canvas(this.canvasContainer.nativeElement, { - width: rootList.offsetWidth, - height: rootList.offsetHeight - }).then(canvas => { - const dataUrl = canvas.toDataURL(this.formats[this.selected].format, 1.0); - if (this.selected === 0 || this.selected === 1) { - // png and jpeg - const link = document.createElement('a'); - link.setAttribute('href', dataUrl); - link.setAttribute('download', 'dependencyStructure.' + this.formats[this.selected].value); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } else if (this.selected === 2) { - // pdf - const pdf = new jspdf({ - orientation: 'l', - unit: 'pt', - format: [rootList.offsetWidth, rootList.offsetHeight] - }); - pdf.addImage(dataUrl, 'PNG', 0, 0, rootList.offsetWidth, rootList.offsetHeight); - pdf.save('dependencyStructure.pdf'); - } - }); - } - - @HostListener('window:resize', ['$event']) - onResize() { - this.draw(() => this.loadDependencies(this.node, this.checkChanged)); - } - - checkOnActiveDependency(tmp): boolean { - return tmp.id.indexOf(this.activeDependency.id) >= 0; - } - - findLastHTMLElement(node): HTMLElement { - let element = document.getElementById(node); - while (element.offsetParent === null) { - element = element.parentNode.parentNode.parentNode.parentNode.parentNode.firstElementChild as HTMLElement; - } - return element; - } - - loadDependencies(node, checkChanged?): void { - if (node.dependencies.length > 0 && node.children.length === 0) { - this.listDependencies(node, checkChanged); - } - if (node.children.length > 0) { - for (const child of node.children) { - this.loadDependencies(child, checkChanged); - } - } - } - - toggle(currentNode): void { - const nextSibling = currentNode.nextElementSibling; - if (nextSibling.classList.contains('nested')) { - nextSibling.classList.remove('nested'); - if (nextSibling.classList.contains('list__root')) { - nextSibling.classList.add('active__root'); - } else { - nextSibling.classList.add('active'); - } - } else if (nextSibling.classList.contains('active')) { - this.collapseChildren(currentNode); - nextSibling.classList.add('nested'); - if (nextSibling.classList.contains('list__root')) { - nextSibling.classList.remove('active__root'); - } else { - nextSibling.classList.remove('active'); - } - } - } - - collapseChildren(currentNode): void { - if (currentNode.nextElementSibling) { - const toCollapse = currentNode.nextElementSibling.getElementsByClassName('clickable'); - for (const collapsible of toCollapse) { - if (collapsible === this.activeDependency) { - this.activeDependency = undefined; - this.activeDependencyContainer.nativeElement.textContent = 'No active dependency chosen.'; - } - if (collapsible.nextElementSibling) { - collapsible.nextElementSibling.classList.add('nested'); - collapsible.nextElementSibling.classList.remove('active'); - } - } - } - } - - draw(callback): void { - // clear svg - $('#3svg').empty(); - this.drawn = []; - console.log('start drawing'); - console.log(this.node ? 'node' : 'null'); - const rootList = document.getElementById('3list__root'); - console.log(rootList); - this.svg = document.getElementById('3svg'); - const zoom = document.getElementById('3zoom'); - const scroll = document.querySelector('[id="3scroll"] > div') as HTMLElement; - const drawHeight = rootList.offsetHeight; - const drawWidth = rootList.offsetWidth + 20; - const containerHeight = window.innerHeight - document.getElementById('3canvasContainer').offsetTop; - const containerWidth = window.innerWidth; - (document.querySelector('drag-scroll[id="3scroll"] > div > div') as HTMLElement).style.overflow = 'hidden'; - - // set dimensions of zoom and scroll element - zoom.style.height = containerHeight + 'px'; - zoom.style.width = containerWidth + 'px'; - scroll.style.height = (containerHeight < drawHeight ? containerHeight : drawHeight) + 20 + 'px'; - scroll.style.width = (containerWidth < drawWidth ? containerWidth : drawWidth) + 'px'; - - // set styling and dimensions of svg element - this.svg.style.height = drawHeight + 'px'; - this.svg.style.width = drawWidth + 'px'; - this.svg.style.top = -rootList.offsetHeight + 'px'; - this.svg.style.marginBottom = -rootList.offsetHeight + 10 + 'px'; - if (drawWidth > containerWidth && drawHeight > containerHeight) { - rootList.style.cursor = 'move'; - zoom.style.cursor = 'move'; - } else if (drawWidth > containerWidth && drawHeight <= containerHeight) { - rootList.style.cursor = 'ew-resize'; - zoom.style.cursor = 'ew-resize'; - } else if (drawWidth <= containerWidth && drawHeight > containerHeight) { - rootList.style.cursor = 'ns-resize'; - zoom.style.cursor = 'ns-resize'; - } - callback.call(); - } - - listDependencies(currentNode, checkChanged?): void { - // calculate positions for arrows of currentNode and its dependencies - if (currentNode.dependencies.length > 0) { - // find last visible element for currentNode as start - const start = this.findLastHTMLElement(currentNode.path); - let toDraw; - if (this.activeDependency !== undefined) { - // activeDependency is set is not start - toDraw = this.checkOnActiveDependency(start); - } - // start = start.parentNode as HTMLElement; - // use jquery for position calculation because plain js position calculation working with offsets returns - // different values for chrome and firefox - // (ref: https://stackoverflow.com/questions/1472842/firefox-and-chrome-give-different-values-for-offsettop). - const startx = ($(start).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + start.offsetWidth / 2; - const starty = ($(start).offset().top - $(this.svg).offset().top) / this.zoomElement.scale + start.offsetHeight + ($(start).css('padding-top') !== '0px' ? 0 : 5); - const startTop = starty - start.offsetHeight - ($(start).css('padding-top') !== '0px' ? 0 : 10); - console.log(parseFloat($(start).css('padding-top'))); - - currentNode.dependencies.forEach(dependency => { - // find last visible element for dependency as end - const end = this.findLastHTMLElement(dependency.path); - - // if activeDependency is set, draw only activeDependency related dependencies - if (this.activeDependency !== undefined) { - // activeDependency is set and is not end - if (!toDraw) { - toDraw = this.checkOnActiveDependency(end); - } - if (!toDraw) { - return; - } - } - - // end = end.parentNode as HTMLElement; - const endx = ($(end).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + end.offsetWidth / 2; - const endy = ($(end).offset().top - $(this.svg).offset().top) / this.zoomElement.scale - ($(end).css('padding-bottom') !== '0px' ? 0 : 7); - const endBottom = endy + end.offsetHeight + ($(end).css('padding-bottom') !== '0px' ? 0 : 14); - - if (start !== end) { - if (dependency.changed === 'ADD') { - // check if downward dependencies should be shown - if (this.checkDown && starty < endy) { - this.svgArrow(startx, starty, endx, endy, 'blue', 1, false); - } - // check if upward Dependencies should be shown - if (this.checkUp && starty > endy) { - this.svgArrow(startx, startTop, endx, endBottom, 'blue', 3, true); - } - } else if (dependency.changed === 'DELETE') { - // check if downward dependencies should be shown - if (this.checkDown && starty < endy) { - this.svgArrow(startx, starty, endx, endy, 'red', 1, false); - } - // check if upward Dependencies should be shown - if (this.checkUp && starty > endy) { - this.svgArrow(startx, startTop, endx, endBottom, 'red', 3, true); - } - // TODO add more color codes for more change types? - } else if (!checkChanged) { - // check if downward dependencies should be shown - if (this.checkDown && starty < endy) { - this.svgArrow(startx, starty, endx, endy, 'black', 1, false); - } - // check if upward Dependencies should be shown - if (this.checkUp && starty > endy) { - this.svgArrow(startx, startTop, endx, endBottom, 'black', 3, true); - } - } - } - }); - } - } - - svgArrow(startx, starty, endx, endy, color, width?, dashed?) { - // reduce number of nodes - const edge = new EdgeModel(startx, starty, endx, endy, color, width, dashed); - if (this.drawn.filter(existingEdge => existingEdge.equals(edge)).length > 0) { - return; - } - - // angle of arrowhead in relation to the line - let angle; - // definition of teh figure to draw, either a line or a curve - let figureDefinition; - - if (Math.abs(parseInt(startx) - parseInt(endx)) < 10) { - // draw straight line because there is not enough space for a curve - figureDefinition = `M ${startx} ${starty} L ${endx} ${endy}`; - angle = Math.atan2(endy - starty, endx - startx); - } else { - // draw a quadratic curve over point Z which builds a right triangle with start and end - const x = Math.abs(startx - endx); - const y = Math.abs(starty - endy); - let zx; - let zy; - - // calculate position of Z - if (startx <= endx && starty <= endy) { - zx = Math.max(startx, endx) - x; - zy = Math.max(starty, endy); - } else if (startx <= endx && starty > endy) { - zx = Math.max(startx, endx); - zy = Math.min(starty, endy) + y; - } else if (startx > endx && starty <= endy) { - zx = Math.min(startx, endx) + x; - zy = Math.max(starty, endy); - } else if (startx > endx && starty > endy) { - zx = Math.min(startx, endx); - zy = Math.min(starty, endy) + y; - } - figureDefinition = `M ${startx} ${starty} Q ${zx} ${zy} ${endx} ${endy}`; - angle = Math.atan2(endy - zy, endx - zx); - } - this.drawFigure(figureDefinition, width, color, dashed); - this.drawArrowHead(endx, endy, angle, width, color); - this.drawn.push(edge); - } - - drawArrowHead(endx, endy, angle, width, color) { - this.drawFigure('M ' + (endx - this.headLength * Math.cos(angle - Math.PI / 6)) + ' ' - + (endy - this.headLength * Math.sin(angle - Math.PI / 6)) + ' ' + 'L ' + endx + ' ' + endy + ' ' + - (endx - this.headLength * Math.cos(angle + Math.PI / 6)) + ' ' + (endy - this.headLength * Math.sin(angle + Math.PI / 6)), - width, color - ); - } - - drawFigure(figureDefinition: string, width: number, color: string, dashed?: boolean) { - const figure = document.createElementNS('http://www.w3.org/2000/svg', 'path'); - figure.setAttribute('d', figureDefinition); - figure.style.stroke = color; - figure.style.fill = 'transparent'; - figure.style.strokeWidth = `${width}px`; - if (dashed) { - figure.style.strokeDasharray = '10'; - } - this.svg.appendChild(figure); - } - - getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } - -} diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.html b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.html index 2ccab864b..c0761e667 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.html +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.html @@ -1,8 +1,14 @@ - + Show upward Dependencies Show downward Dependencies -Show only changed Dependencies +Show only changed Dependencies {{format.value}} diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts index 682f1d735..e3b428b23 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts @@ -1,9 +1,14 @@ -import {AfterViewInit, Component, OnInit, ViewChild, ViewEncapsulation} from '@angular/core'; +import {AfterViewInit, Component, HostListener, OnInit, ViewChild, ViewEncapsulation} from '@angular/core'; import {ActivatedRoute, Router} from '@angular/router'; import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; -import {FORBIDDEN} from 'http-status-codes'; -import {DependencyBaseComponent} from '../dependency-base/dependency-base.component'; +import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; +import * as $ from 'jquery'; +import * as jspdf from 'jspdf'; +import {AppComponent} from '../../app.component'; +import {Project} from '../../model/project'; +import {EdgeModel} from '../edge.model'; +import html2canvas from 'html2canvas'; @Component({ selector: 'app-dependency-compare', @@ -11,13 +16,36 @@ import {DependencyBaseComponent} from '../dependency-base/dependency-base.compon styleUrls: ['./dependency-compare.component.scss'], encapsulation: ViewEncapsulation.None }) -export class DependencyCompareComponent extends DependencyBaseComponent implements OnInit, AfterViewInit { +export class DependencyCompareComponent implements OnInit, AfterViewInit { + appComponent = AppComponent; + projectService: any; + userService: any; + router: any; + project: Project = new Project(); + node: any; + projectId: number; + commitName: any; commitName2: any; + checkDown: boolean; + checkChanged: boolean; + checkUp: boolean; + activeDependency: any; + formats = [ + { format: 'image/png', value: 'png' }, + { format: 'image/jpeg', value: 'jpg' }, + { format: 'application/pdf', value: 'pdf' } + ]; + selected = 0; + svg: any; + readonly headLength = 10; + drawn: EdgeModel[] = []; + @ViewChild('3activeDependency') activeDependencyContainer; + @ViewChild('3canvasContainer') canvasContainer; + @ViewChild('3zoom') zoomElement; @ViewChild('3showChanged') showChangedContainer; constructor(router: Router, userService: UserService, projectService: ProjectService, private route: ActivatedRoute) { - super(); this.projectService = projectService; this.userService = userService; this.router = router; @@ -37,22 +65,332 @@ export class DependencyCompareComponent extends DependencyBaseComponent implemen } getData(): void { - this.projectService.getCompareTree(this.projectId, this.commitName, this.commitName2).then(response => { - this.node = response.body; - this.checkChanged = false; - this.svg = document.getElementById('3svg'); - this.checkDown = this.checkUp = true; - setTimeout(() => this.draw(() => this.loadDependencies(this.node, this.checkChanged)), 50); - }) - .catch(e => { - if (e.status && e.status === FORBIDDEN) { - this.userService.refresh(() => this.getData()); - } - }); + if (this.commitName2 && this.commitName2 !== 'null') { + console.log('get compare'); + this.projectService.getCompareTree(this.projectId, this.commitName, this.commitName2).then(response => { + this.node = response.body; + this.checkChanged = false; + this.svg = document.getElementById('3svg'); + this.checkDown = this.checkUp = true; + setTimeout(() => this.draw(() => this.loadDependencies(this.node, this.checkChanged)), 50); + }) + .catch(e => { + if (e.status && e.status === FORBIDDEN) { + this.userService.refresh(() => this.getData()); + } + }); + } else { + console.log('get tree'); + this.projectService.getDependencyTree(this.projectId, this.commitName).then(response => { + this.node = response.body; + this.svg = document.getElementById('3svg'); + this.checkDown = this.checkUp = true; + console.log(this.node); + console.log(this.node.path); + setTimeout(() => this.draw(() => this.loadDependencies(this.node)), 50); + }) + .catch(e => { + if (e.status && e.status === FORBIDDEN) { + this.userService.refresh(() => this.getData()); + } + }); + } } public onShowChangedChanged(): void { this.checkChanged = !this.checkChanged; this.draw(() => this.loadDependencies(this.node, this.checkChanged)); } + public onShowUpwardChanged(): void { + this.checkUp = !this.checkUp; + this.draw(() => this.loadDependencies(this.node, this.checkChanged)); + } + + public onShowDownwardChanged(): void { + this.checkDown = !this.checkDown; + this.draw(() => this.loadDependencies(this.node, this.checkChanged)); + } + + @HostListener('window:resize', ['$event']) + onResize() { + this.draw(() => this.loadDependencies(this.node, this.checkChanged)); + } + + public screenshotListener(): void { + const rootList = document.getElementById('3list__root'); + html2canvas(this.canvasContainer.nativeElement, { + width: rootList.offsetWidth, + height: rootList.offsetHeight + }).then(canvas => { + const dataUrl = canvas.toDataURL(this.formats[this.selected].format, 1.0); + if (this.selected === 0 || this.selected === 1) { + // png and jpeg + const link = document.createElement('a'); + link.setAttribute('href', dataUrl); + link.setAttribute('download', 'dependencyStructure.' + this.formats[this.selected].value); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else if (this.selected === 2) { + // pdf + const pdf = new jspdf({ + orientation: 'l', + unit: 'pt', + format: [rootList.offsetWidth, rootList.offsetHeight] + }); + pdf.addImage(dataUrl, 'PNG', 0, 0, rootList.offsetWidth, rootList.offsetHeight); + pdf.save('dependencyStructure.pdf'); + } + }); + } + + checkOnActiveDependency(tmp): boolean { + return tmp.id.indexOf(this.activeDependency.id) >= 0; + } + + findLastHTMLElement(node): HTMLElement { + let element = document.getElementById(node); + while (element.offsetParent === null) { + element = element.parentNode.parentNode.parentNode.parentNode.parentNode.firstElementChild as HTMLElement; + } + return element as HTMLElement; + } + + loadDependencies(node, checkChanged?): void { + if (node.dependencies.length > 0 && node.children.length === 0) { + this.listDependencies(node, checkChanged); + } + if (node.children.length > 0) { + for (const child of node.children) { + this.loadDependencies(child, checkChanged); + } + } + } + + toggle(currentNode): void { + const nextSibling = currentNode.nextElementSibling; + if (nextSibling.classList.contains('nested')) { + nextSibling.classList.remove('nested'); + if (nextSibling.classList.contains('list__root')) { + nextSibling.classList.add('active__root'); + } else { + nextSibling.classList.add('active'); + } + } else if (nextSibling.classList.contains('active')) { + this.collapseChildren(currentNode); + nextSibling.classList.add('nested'); + if (nextSibling.classList.contains('list__root')) { + nextSibling.classList.remove('active__root'); + } else { + nextSibling.classList.remove('active'); + } + } + } + + collapseChildren(currentNode): void { + if (currentNode.nextElementSibling) { + const toCollapse = currentNode.nextElementSibling.getElementsByClassName('clickable'); + for (const collapsible of toCollapse) { + if (collapsible === this.activeDependency) { + this.activeDependency = undefined; + this.activeDependencyContainer.nativeElement.textContent = 'No active dependency chosen.'; + } + if (collapsible.nextElementSibling) { + collapsible.nextElementSibling.classList.add('nested'); + collapsible.nextElementSibling.classList.remove('active'); + } + } + } + } + + draw(callback): void { + // clear svg + $('#3svg').empty(); + this.drawn = []; + const rootList = document.getElementById('3list__root'); + this.svg = document.getElementById('3svg'); + const zoom = document.getElementById('3zoom'); + const scroll = document.querySelector('[id="3scroll"] > div') as HTMLElement; + const drawHeight = rootList.offsetHeight; + const drawWidth = rootList.offsetWidth + 20; + const containerHeight = window.innerHeight - document.getElementById('3canvasContainer').offsetTop; + const containerWidth = window.innerWidth; + (document.querySelector('drag-scroll[id="3scroll"] > div > div') as HTMLElement).style.overflow = 'hidden'; + + // set dimensions of zoom and scroll element + zoom.style.height = containerHeight + 'px'; + zoom.style.width = containerWidth + 'px'; + scroll.style.height = (containerHeight < drawHeight ? containerHeight : drawHeight) + 20 + 'px'; + scroll.style.width = (containerWidth < drawWidth ? containerWidth : drawWidth) + 'px'; + + // set styling and dimensions of svg element + this.svg.style.height = drawHeight + 'px'; + this.svg.style.width = drawWidth + 'px'; + this.svg.style.top = -rootList.offsetHeight + 'px'; + this.svg.style.marginBottom = -rootList.offsetHeight + 10 + 'px'; + if (drawWidth > containerWidth && drawHeight > containerHeight) { + rootList.style.cursor = 'move'; + zoom.style.cursor = 'move'; + } else if (drawWidth > containerWidth && drawHeight <= containerHeight) { + rootList.style.cursor = 'ew-resize'; + zoom.style.cursor = 'ew-resize'; + } else if (drawWidth <= containerWidth && drawHeight > containerHeight) { + rootList.style.cursor = 'ns-resize'; + zoom.style.cursor = 'ns-resize'; + } + callback.call(); + } + + listDependencies(currentNode, checkChanged?): void { + // calculate positions for arrows of currentNode and its dependencies + if (currentNode.dependencies.length > 0) { + // find last visible element for currentNode as start + const start = this.findLastHTMLElement(currentNode.path) as HTMLElement; + let toDraw; + if (this.activeDependency !== undefined) { + // activeDependency is set is not start + toDraw = this.checkOnActiveDependency(start); + } + // start = start.parentNode as HTMLElement; + // use jquery for position calculation because plain js position calculation working with offsets returns + // different values for chrome and firefox + // (ref: https://stackoverflow.com/questions/1472842/firefox-and-chrome-give-different-values-for-offsettop). + const startx = ($(start).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + start.offsetWidth / 2; + const starty = ($(start).offset().top - $(this.svg).offset().top) / this.zoomElement.scale + start.offsetHeight + ($(start).css('padding-top') !== '0px' ? 0 : 5); + const startTop = starty - start.offsetHeight - ($(start).css('padding-top') !== '0px' ? 0 : 10); + console.log(parseFloat($(start).css('padding-top'))); + + currentNode.dependencies.forEach(dependency => { + // find last visible element for dependency as end + const end = this.findLastHTMLElement(dependency.path) as HTMLElement; + + // if activeDependency is set, draw only activeDependency related dependencies + if (this.activeDependency !== undefined) { + // activeDependency is set and is not end + if (!toDraw) { + toDraw = this.checkOnActiveDependency(end); + } + if (!toDraw) { + return; + } + } + + // end = end.parentNode as HTMLElement; + const endx = ($(end).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + end.offsetWidth / 2; + const endy = ($(end).offset().top - $(this.svg).offset().top) / this.zoomElement.scale - ($(end).css('padding-bottom') !== '0px' ? 0 : 7); + const endBottom = endy + end.offsetHeight + ($(end).css('padding-bottom') !== '0px' ? 0 : 14); + + if (start !== end) { + if (dependency.changed === 'ADD') { + // check if downward dependencies should be shown + if (this.checkDown && starty < endy) { + this.svgArrow(startx, starty, endx, endy, 'blue', 1, false); + } + // check if upward Dependencies should be shown + if (this.checkUp && starty > endy) { + this.svgArrow(startx, startTop, endx, endBottom, 'blue', 3, true); + } + } else if (dependency.changed === 'DELETE') { + // check if downward dependencies should be shown + if (this.checkDown && starty < endy) { + this.svgArrow(startx, starty, endx, endy, 'red', 1, false); + } + // check if upward Dependencies should be shown + if (this.checkUp && starty > endy) { + this.svgArrow(startx, startTop, endx, endBottom, 'red', 3, true); + } + // TODO add more color codes for more change types? + } else if (!checkChanged) { + // check if downward dependencies should be shown + if (this.checkDown && starty < endy) { + this.svgArrow(startx, starty, endx, endy, 'black', 1, false); + } + // check if upward Dependencies should be shown + if (this.checkUp && starty > endy) { + this.svgArrow(startx, startTop, endx, endBottom, 'black', 3, true); + } + } + } + }); + } + } + + svgArrow(startx, starty, endx, endy, color, width?, dashed?) { + // reduce number of nodes + const edge = new EdgeModel(startx, starty, endx, endy, color, width, dashed); + if (this.drawn.filter(existingEdge => existingEdge.equals(edge)).length > 0) { + return; + } + + // angle of arrowhead in relation to the line + let angle; + // definition of teh figure to draw, either a line or a curve + let figureDefinition; + + if (Math.abs(parseInt(startx) - parseInt(endx)) < 10) { + // draw straight line because there is not enough space for a curve + figureDefinition = `M ${startx} ${starty} L ${endx} ${endy}`; + angle = Math.atan2(endy - starty, endx - startx); + } else { + // draw a quadratic curve over point Z which builds a right triangle with start and end + const x = Math.abs(startx - endx); + const y = Math.abs(starty - endy); + let zx; + let zy; + + // calculate position of Z + if (startx <= endx && starty <= endy) { + zx = Math.max(startx, endx) - x; + zy = Math.max(starty, endy); + } else if (startx <= endx && starty > endy) { + zx = Math.max(startx, endx); + zy = Math.min(starty, endy) + y; + } else if (startx > endx && starty <= endy) { + zx = Math.min(startx, endx) + x; + zy = Math.max(starty, endy); + } else if (startx > endx && starty > endy) { + zx = Math.min(startx, endx); + zy = Math.min(starty, endy) + y; + } + figureDefinition = `M ${startx} ${starty} Q ${zx} ${zy} ${endx} ${endy}`; + angle = Math.atan2(endy - zy, endx - zx); + } + this.drawFigure(figureDefinition, width, color, dashed); + this.drawArrowHead(endx, endy, angle, width, color); + this.drawn.push(edge); + } + + drawArrowHead(endx, endy, angle, width, color) { + this.drawFigure('M ' + (endx - this.headLength * Math.cos(angle - Math.PI / 6)) + ' ' + + (endy - this.headLength * Math.sin(angle - Math.PI / 6)) + ' ' + 'L ' + endx + ' ' + endy + ' ' + + (endx - this.headLength * Math.cos(angle + Math.PI / 6)) + ' ' + (endy - this.headLength * Math.sin(angle + Math.PI / 6)), + width, color + ); + } + + drawFigure(figureDefinition: string, width: number, color: string, dashed?: boolean) { + const figure = document.createElementNS('http://www.w3.org/2000/svg', 'path'); + figure.setAttribute('d', figureDefinition); + figure.style.stroke = color; + figure.style.fill = 'transparent'; + figure.style.strokeWidth = `${width}px`; + if (dashed) { + figure.style.strokeDasharray = '10'; + } + this.svg.appendChild(figure); + } + + getProject(): void { + this.projectService.getProject(this.projectId) + .then(response => { + this.project = new Project(response.body); + }) + .catch(error => { + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.getProject()); + } else if (error.status && error.status === NOT_FOUND) { + this.router.navigate(['/dashboard']); + } + }); + } } diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html deleted file mode 100644 index d223f737c..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.html +++ /dev/null @@ -1,12 +0,0 @@ - - -Show upward Dependencies -Show downward Dependencies - - - {{format.value}} - - - -No active dependency chosen. - diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.scss b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.scss deleted file mode 100644 index 7276ecb3f..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.scss +++ /dev/null @@ -1,27 +0,0 @@ -[id='3svg'] { - position: relative; - z-index: -1; -} - -[id='3list__root'] { - padding-left: 0; - margin: 0; - width: max-content; - text-align: center; -} - -.filename-span { - width: min-content; -} - -.margin-right { - margin-right: 10px; -} - -.margin-left { - margin-left: 10px; -} - -.spinner-center { - margin: 0 auto; -} diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.spec.ts deleted file mode 100644 index 9066c2f67..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.spec.ts +++ /dev/null @@ -1,332 +0,0 @@ -import {TestBed} from '@angular/core/testing'; -import {DependencyRootComponent} from './dependency-root.component'; -import {BrowserModule} from '@angular/platform-browser'; -import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; -import {ProjectService} from '../../service/project.service'; -import {HeaderComponent} from '../../view/header/header.component'; -import { - MatButtonModule, - MatIconModule, - MatInputModule, - MatMenuModule, - MatProgressSpinnerModule, - MatToolbarModule, - MatCheckboxModule, - MatCardModule, - MatFormFieldModule, - MatGridListModule -} from '@angular/material'; -import {RouterModule, Routes} from '@angular/router'; -import {LoginComponent} from '../../view/login/login.component'; -import {FormsModule} from '@angular/forms'; -import {FooterComponent} from '../../view/footer/footer.component'; - -const appRoutes: Routes = [ - {path: 'login', component: LoginComponent}, - {path: 'structure-map/:projectId/:commitName', component: DependencyRootComponent}, - {path: '', redirectTo: '/dashboard', pathMatch: 'full'} -]; - -describe('DependencyRootComponent', () => { - let httpTestingController: HttpTestingController; - let service: ProjectService; - - beforeEach(() => { - TestBed.configureTestingModule({ - declarations: [ - HeaderComponent, - FooterComponent, - LoginComponent, - DependencyRootComponent - ], - imports: [ - BrowserModule, - MatMenuModule, - RouterModule.forRoot(appRoutes), - MatToolbarModule, - MatInputModule, - MatCardModule, - MatFormFieldModule, - MatCheckboxModule, - FormsModule, - MatProgressSpinnerModule, - MatButtonModule, - MatGridListModule, - MatIconModule, - HttpClientTestingModule - ], - providers: [ - ProjectService - ] - }); - - httpTestingController = TestBed.get(HttpTestingController); - service = TestBed.get(ProjectService); - }); - - afterEach(() => { - httpTestingController.verify(); - }); - - // Angular default test added when you generate a service using the CLI - it('should be created', () => { - expect(service).toBeTruthy(); - }); - - describe('getDependencyTree()', () => { - it('should return a dependencyTree made from test data', () => { - const mockResponse = { - filename: 'testSrc', - path: '', - packageName: '', - level: -1, - children: [ - { - filename: 'org', - path: 'org', - packageName: 'org', - level: 0, - children: [ - { - filename: 'wickedsource', - path: 'org/wickedsource', - packageName: 'org.wickedsource', - level: 0, - children: [ - { - filename: 'dependencytree', - path: 'org/wickedsource/dependencytree', - packageName: 'org.wickedsource.dependencytree', - level: 0, - children: [ - { - filename: 'example', - path: 'org/wickedsource/dependencytree/example', - packageName: 'org.wickedsource.dependencytree.example', - level: 0, - children: [ - { - filename: 'CoreTest.java', - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - packageName: 'org.wickedsource.dependencytree.example.CoreTest.java', - level: 0, - children: [], - dependencies: [ - 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java' - ] - }, - { - filename: 'somepackage', - path: 'org/wickedsource/dependencytree/example/somepackage', - packageName: 'org.wickedsource.dependencytree.example.somepackage', - level: 1, - children: [ - { - filename: 'CircularDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/CircularDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.CircularDependencyTest.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'CoreDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.CoreDependencyTest.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'DuplicateDependencies2Test.java', - path: 'org/wickedsource/dependencytree/example/somepackage/DuplicateDependencies2Test.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.DuplicateDependencies2Test.java', - level: 0, - children: [], - dependencies: [ - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java' - ] - }, - { - filename: 'DuplicateDependenciesTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/DuplicateDependenciesTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.DuplicateDependenciesTest.java', - level: 0, - children: [], - dependencies: [ - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java' - ] - }, - { - filename: 'FullyClassifiedDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.FullyClassifiedDependencyTest.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'InvalidDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/InvalidDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.InvalidDependencyTest.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'NotADependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.NotADependencyTest.java', - level: 0, - children: [], - dependencies: [] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java' - ] - }, - { - filename: 'wildcardpackage', - path: 'org/wickedsource/dependencytree/example/wildcardpackage', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage', - level: 2, - children: [ - { - filename: 'WildcardImport1Test.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport1Test.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'WildcardImport2Test.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport2Test.java', - level: 0, - children: [], - dependencies: [] - }, - { - filename: 'WildcardImportCircularDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImportCircularDependencyTest.java', - level: 0, - children: [], - dependencies: [ - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [ - 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - 'org/wickedsource/dependencytree/example/CoreTest.java' - ] - } - ], - dependencies: [] - }; - - service.getDependencyTree(1, 'ad48c754991107af9bd0113c45cd009040296f71') - .then(data => { - // @ts-ignore - expect(data.body.filename).toEqual('testSrc'); - // @ts-ignore - const example = data.body.children[0].children[0].children[0].children[0]; - expect(example.children.length).toBe(3); - }); - const req = httpTestingController. - expectOne('http://localhost:8080/analyzers/1/structureMap/ad48c754991107af9bd0113c45cd009040296f71'); - expect(req.request.method).toEqual('GET'); - req.flush(mockResponse); - }); - }); -}); diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts deleted file mode 100644 index 4596771ca..000000000 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-root/dependency-root.component.ts +++ /dev/null @@ -1,50 +0,0 @@ -import {AfterViewInit, Component, OnInit, ViewEncapsulation} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; -import {ProjectService} from '../../service/project.service'; -import {FORBIDDEN} from 'http-status-codes'; -import {UserService} from '../../service/user.service'; -import {DependencyBaseComponent} from '../dependency-base/dependency-base.component'; - -@Component({ - selector: 'app-tree-root', - templateUrl: './dependency-root.component.html', - styleUrls: ['./dependency-root.component.scss'], - encapsulation: ViewEncapsulation.None -}) -export class DependencyRootComponent extends DependencyBaseComponent implements OnInit, AfterViewInit { - - constructor(router: Router, userService: UserService, projectService: ProjectService, private route: ActivatedRoute) { - super(); - this.projectService = projectService; - this.userService = userService; - this.router = router; - } - - ngOnInit(): void { - this.route.params.subscribe(params => { - this.projectId = params.projectId; - this.commitName = params.commitName; - this.getProject(); - }); - } - - ngAfterViewInit(): void { - this.getData(); - } - - getData(): void { - this.projectService.getDependencyTree(this.projectId, this.commitName).then(response => { - this.node = response.body; - console.log('got data'); - this.svg = document.getElementById('3svg'); - this.checkDown = this.checkUp = true; - console.log('wait for rendering'); - setTimeout(() => this.draw(() => this.loadDependencies(this.node)), 500); - }) - .catch(e => { - if (e.status && e.status === FORBIDDEN) { - this.userService.refresh(() => this.getData()); - } - }); - } -} diff --git a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.ts b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.ts index 6a4cecb7b..10f39c0f0 100644 --- a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.ts +++ b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.ts @@ -1,5 +1,5 @@ import {Component, Input, OnInit} from '@angular/core'; -import {DependencyRootComponent} from '../dependency-root/dependency-root.component'; +import {DependencyCompareComponent} from '../dependency-compare/dependency-compare.component'; @Component({ selector: 'app-tree-node', @@ -12,7 +12,7 @@ export class TreeNodeComponent implements OnInit { timer: any; preventSimpleClick: boolean; @Input() node: any; - @Input() root: DependencyRootComponent; + @Input() root: DependencyCompareComponent; @Input() hasSiblings: boolean; constructor() { diff --git a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html index 5e2d7bb29..2dbc07484 100644 --- a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html +++ b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html @@ -76,7 +76,7 @@ Analyzed: {{booleanToString(commit.analyzed)}}
    - +
    From 193ffb2b9ff3505cfd17acda54b9b4a74243e54f Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 15 Jun 2020 20:04:12 +0200 Subject: [PATCH 06/16] start merging add project and edit project --- .../edit-project/edit-project.component.html | 11 ++- .../edit-project/edit-project.component.ts | 76 +++++++++++++------ 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.html b/coderadar-ui/src/app/view/edit-project/edit-project.component.html index 95ffd587f..1aad55ef1 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.html +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.html @@ -1,4 +1,7 @@ - +
    @@ -12,7 +15,7 @@ - Edit {{projectName}} + Edit {{projectName}}Add project @@ -38,6 +41,8 @@
    + + The project name must not be empty! A project with this name already exists! Please choose another name. @@ -46,7 +51,7 @@
    - +
    diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index 23d94b33b..3ba541296 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -35,7 +35,9 @@ export class EditProjectComponent implements OnInit { ngOnInit(): void { this.route.params.subscribe(params => { this.projectId = params.id; - this.getProject(); + if (this.projectId) { + this.getProject(); + } }); } @@ -48,31 +50,55 @@ export class EditProjectComponent implements OnInit { submitForm(): void { if (!this.validateInput()) { this.waiting = true; - this.projectService.editProject(this.project) - .then(() => { - this.router.navigate(['/dashboard']); - this.openSnackBar('Project successfully edited!', '🞩'); - this.waiting = false; - }) - .catch(error => { - this.waiting = false; - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.submitForm()); - } else if (error.status && error.status === BAD_REQUEST) { - if (error.error && error.error.errorMessage === 'Validation Error') { - error.error.fieldErrors.forEach(field => { - if (field.field === 'vcsUrl') { - this.incorrectURL = true; - } - }); + if (this.projectId) { + this.projectService.editProject(this.project) + .then(() => { + this.router.navigate(['/dashboard']); + this.openSnackBar('Project successfully edited!', '🞩'); + this.waiting = false; + }) + .catch(error => { + this.waiting = false; + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.submitForm()); + } else if (error.status && error.status === BAD_REQUEST) { + if (error.error && error.error.errorMessage === 'Validation Error') { + error.error.fieldErrors.forEach(field => { + if (field.field === 'vcsUrl') { + this.incorrectURL = true; + } + }); + } + } else if (error.status === CONFLICT && + error.errorMessage === 'Project with name \'' + this.project.name + '\' already exists. Please choose another name.') { + this.projectExists = true; + } else if (error.status === UNPROCESSABLE_ENTITY) { + this.openSnackBar('Project cannot be edited! Try again later!', '🞩'); + } + }); + } else { + this.projectService.addProject(this.project) + .then(response => { + this.project.id = response.body.id; + this.router.navigate(['/project-configure', this.project.id]); + }) + .catch(error => { + if (error.status && error.status === FORBIDDEN) { // If access is denied + this.userService.refresh(() => this.submitForm()); + } else if (error.status && error.status === BAD_REQUEST) { // If there is a field error + if (error.error && error.error.errorMessage === 'Validation Error') { + error.error.fieldErrors.forEach(field => { // Check which field + if (field.field === 'vcsUrl') { + this.incorrectURL = true; + } + }); + } + } else if (error.status === CONFLICT && + error.error.errorMessage === 'The project ' + this.project.name + ' already exists.') { + this.projectExists = true; } - } else if (error.status === CONFLICT && - error.errorMessage === 'Project with name \'' + this.project.name + '\' already exists. Please choose another name.') { - this.projectExists = true; - } else if (error.status === UNPROCESSABLE_ENTITY) { - this.openSnackBar('Project cannot be edited! Try again later!', '🞩'); - } - }); + }); + } } } From 927cd58189abc6d256fd3f4ad23465536d9d9ae2 Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Tue, 16 Jun 2020 10:10:38 +0200 Subject: [PATCH 07/16] merge add and edit component, start using utils service for get project --- coderadar-ui/src/app/app.module.ts | 3 - coderadar-ui/src/app/service/utils.service.ts | 37 ++++++++++ .../add-project/add-project.component.html | 58 --------------- .../add-project/add-project.component.scss | 3 - .../add-project/add-project.component.spec.ts | 25 ------- .../view/add-project/add-project.component.ts | 74 ------------------- .../edit-project/edit-project.component.ts | 41 ++++------ .../main-dashboard.component.html | 2 +- 8 files changed, 52 insertions(+), 191 deletions(-) create mode 100644 coderadar-ui/src/app/service/utils.service.ts delete mode 100644 coderadar-ui/src/app/view/add-project/add-project.component.html delete mode 100644 coderadar-ui/src/app/view/add-project/add-project.component.scss delete mode 100644 coderadar-ui/src/app/view/add-project/add-project.component.spec.ts delete mode 100644 coderadar-ui/src/app/view/add-project/add-project.component.ts diff --git a/coderadar-ui/src/app/app.module.ts b/coderadar-ui/src/app/app.module.ts index bb07bb36a..720cd03fe 100644 --- a/coderadar-ui/src/app/app.module.ts +++ b/coderadar-ui/src/app/app.module.ts @@ -6,7 +6,6 @@ import {LoginComponent} from './view/login/login.component'; import {RegisterComponent} from './view/register/register.component'; import {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http'; import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {AddProjectComponent} from './view/add-project/add-project.component'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {FlexLayoutModule} from '@angular/flex-layout'; import {MainDashboardComponent, ConfirmDeleteProjectDialogComponent} from './view/main-dashboard/main-dashboard.component'; @@ -70,7 +69,6 @@ const appRoutes: Routes = [ {path: 'register', component: RegisterComponent}, {path: 'dashboard', component: MainDashboardComponent}, {path: 'user-settings', component: UserSettingsComponent}, - {path: 'add-project', component: AddProjectComponent}, {path: 'project-configure/:id', component: ConfigureProjectComponent}, {path: 'city/:id', component: CityViewComponent}, {path: 'project-edit/:id', component: EditProjectComponent}, @@ -86,7 +84,6 @@ const appRoutes: Routes = [ AppComponent, LoginComponent, RegisterComponent, - AddProjectComponent, MainDashboardComponent, ConfirmDeleteProjectDialogComponent, ConfigureProjectComponent, diff --git a/coderadar-ui/src/app/service/utils.service.ts b/coderadar-ui/src/app/service/utils.service.ts new file mode 100644 index 000000000..12fcfaa29 --- /dev/null +++ b/coderadar-ui/src/app/service/utils.service.ts @@ -0,0 +1,37 @@ +import {Project} from "../model/project"; +import {FORBIDDEN, NOT_FOUND} from "http-status-codes"; +import {ProjectService} from "./project.service"; +import {Title} from "@angular/platform-browser"; +import {UserService} from "./user.service"; +import {Router} from "@angular/router"; + +export class UtilsService { + + project: Project; + + constructor(private projectService: ProjectService, private titleService: Title, private userService: UserService, + private router: Router) { + } + + /** + * Gets the project from the service and saves it this.project. + * If access is denied (403) sends the refresh token and tries to submit again. + * If the project does not exists (404) redirects to the dashboard. + */ + public getProject(title: string, projectId: number): Promise { + return this.projectService.getProject(projectId) + .then(response => { + const project = new Project(response.body); + this.titleService.setTitle(title + ' ' + this.project.name); + console.log('return project'); + return project; + }) + .catch(error => { + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.getProject(title, projectId)); + } else if (error.status && error.status === NOT_FOUND) { + this.router.navigate(['/dashboard']); + } + }); + } +} diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.html b/coderadar-ui/src/app/view/add-project/add-project.component.html deleted file mode 100644 index 0ef33b563..000000000 --- a/coderadar-ui/src/app/view/add-project/add-project.component.html +++ /dev/null @@ -1,58 +0,0 @@ - - -
    -
    -
    -
    - - - - - - Add project - - - - - - - - - - - - - - - - - - - - - - - - The project name must not be empty! - A project with this name already exists! Please choose another name. - - The VCS URL is invalid! - - -
    - - -
    - -
    -
    - -
    -
    -
    - - diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.scss b/coderadar-ui/src/app/view/add-project/add-project.component.scss deleted file mode 100644 index 15ba23f73..000000000 --- a/coderadar-ui/src/app/view/add-project/add-project.component.scss +++ /dev/null @@ -1,3 +0,0 @@ -#cardButtons { - text-align: center; -} diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.spec.ts b/coderadar-ui/src/app/view/add-project/add-project.component.spec.ts deleted file mode 100644 index c0560ddcd..000000000 --- a/coderadar-ui/src/app/view/add-project/add-project.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {AddProjectComponent} from './add-project.component'; - -describe('AddProjectComponent', () => { - let component: AddProjectComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [AddProjectComponent] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(AddProjectComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/coderadar-ui/src/app/view/add-project/add-project.component.ts b/coderadar-ui/src/app/view/add-project/add-project.component.ts deleted file mode 100644 index c06f99d1b..000000000 --- a/coderadar-ui/src/app/view/add-project/add-project.component.ts +++ /dev/null @@ -1,74 +0,0 @@ -import {Component} from '@angular/core'; -import {Project} from '../../model/project'; -import {ProjectService} from '../../service/project.service'; -import {Router} from '@angular/router'; -import {UserService} from '../../service/user.service'; -import {BAD_REQUEST, CONFLICT, FORBIDDEN} from 'http-status-codes'; -import {Title} from '@angular/platform-browser'; - -@Component({ - selector: 'app-add-project', - templateUrl: './add-project.component.html', - styleUrls: ['./add-project.component.scss'] -}) -export class AddProjectComponent { - - project: Project; - - incorrectURL = false; - projectExists = false; - nameEmpty = false; - - constructor(private router: Router, private userService: UserService, private projectService: ProjectService, - private titleService: Title) { - this.project = new Project(); - this.project.name = ''; - this.project.vcsUrl = ''; - titleService.setTitle('Coderadar - Add project'); - } - - /** - * Validates user input and calls ProjectService.addProject(). - * Handles server errors. - * If access is denied (403) sends the refresh token and tries to submit again. - */ - submitForm() { - if (this.validateInput()) { - return; - } - - this.projectService.addProject(this.project) - .then(response => { - this.project.id = response.body.id; - this.router.navigate(['/project-configure', this.project.id]); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { // If access is denied - this.userService.refresh(() => this.submitForm()); - } else if (error.status && error.status === BAD_REQUEST) { // If there is a field error - if (error.error && error.error.errorMessage === 'Validation Error') { - error.error.fieldErrors.forEach(field => { // Check which field - if (field.field === 'vcsUrl') { - this.incorrectURL = true; - } - }); - } - } else if (error.status === CONFLICT && - error.error.errorMessage === 'The project ' + this.project.name + ' already exists.') { - this.projectExists = true; - } - }); - } - - /** - * Checks for empty form fields. - */ - private validateInput(): boolean { - this.projectExists = false; - - this.incorrectURL = this.project.vcsUrl.trim().length === 0; - this.nameEmpty = this.project.name.trim().length === 0; - - return this.nameEmpty || this.incorrectURL; - } -} diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index 3ba541296..e70e83908 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -6,6 +6,7 @@ import {ProjectService} from '../../service/project.service'; import {BAD_REQUEST, CONFLICT, FORBIDDEN, NOT_FOUND, UNPROCESSABLE_ENTITY} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; import {MatSnackBar} from '@angular/material'; +import {UtilsService} from "../../service/utils.service"; @Component({ selector: 'app-edit-project', @@ -15,10 +16,7 @@ import {MatSnackBar} from '@angular/material'; export class EditProjectComponent implements OnInit { projectName: string; - - // I need all project at the moment, project: Project; - // Error fields incorrectURL = false; projectExists = false; nameEmpty = false; @@ -26,17 +24,25 @@ export class EditProjectComponent implements OnInit { waiting = false; constructor(private snackBar: MatSnackBar, private router: Router, private userService: UserService, private titleService: Title, - private projectService: ProjectService, private route: ActivatedRoute) { + private projectService: ProjectService, private route: ActivatedRoute, private utilsService: UtilsService) { this.project = new Project(); this.projectName = ''; } ngOnInit(): void { + console.log('call on init'); this.route.params.subscribe(params => { - this.projectId = params.id; - if (this.projectId) { - this.getProject(); + if (params.id && params.id !== 'null') { + this.projectId = params.id; + console.log('get project from utils'); + this.utilsService.getProject('Coderadar - Edit', this.projectId).then(project => { + this.project = project; + this.projectName = this.project.name; + }); + } else { + console.log('no project id'); + this.projectId = null; } }); } @@ -108,26 +114,7 @@ export class EditProjectComponent implements OnInit { }); } - /** - * Gets the project from the service and saves it this.project. - * If access is denied (403) sends the refresh token and tries to submit again. - * If the project does not exists (404) redirects to the dashboard. - */ - private getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - this.projectName = this.project.name; - this.titleService.setTitle('Coderadar - Edit ' + this.projectName); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } + /** * Checks for empty form fields. diff --git a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html index 8ad489b80..ad280ae44 100644 --- a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html +++ b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.html @@ -46,7 +46,7 @@ - + + From 26f8ff16a93d167666461f9f81ba66b79a05d930 Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 16 Jun 2020 13:18:40 +0200 Subject: [PATCH 08/16] fix getProject, remove getProject from components --- .../src/app/service/utils.service.spec.ts | 12 ++++ coderadar-ui/src/app/service/utils.service.ts | 14 +++-- .../edit-project/edit-project.component.ts | 8 +-- .../app/view/file-view/file-view.component.ts | 55 +++++++------------ .../project-dashboard.component.ts | 36 ++++-------- .../view/view-commit/view-commit.component.ts | 28 ++-------- 6 files changed, 60 insertions(+), 93 deletions(-) create mode 100644 coderadar-ui/src/app/service/utils.service.spec.ts diff --git a/coderadar-ui/src/app/service/utils.service.spec.ts b/coderadar-ui/src/app/service/utils.service.spec.ts new file mode 100644 index 000000000..102bf3d43 --- /dev/null +++ b/coderadar-ui/src/app/service/utils.service.spec.ts @@ -0,0 +1,12 @@ +import { TestBed } from '@angular/core/testing'; + +import { UtilsService } from './utils.service'; + +describe('UtilsService', () => { + beforeEach(() => TestBed.configureTestingModule({})); + + it('should be created', () => { + const service: UtilsService = TestBed.get(UtilsService); + expect(service).toBeTruthy(); + }); +}); diff --git a/coderadar-ui/src/app/service/utils.service.ts b/coderadar-ui/src/app/service/utils.service.ts index 12fcfaa29..c58f73e90 100644 --- a/coderadar-ui/src/app/service/utils.service.ts +++ b/coderadar-ui/src/app/service/utils.service.ts @@ -1,14 +1,17 @@ -import {Project} from "../model/project"; -import {FORBIDDEN, NOT_FOUND} from "http-status-codes"; +import { Injectable } from '@angular/core'; import {ProjectService} from "./project.service"; import {Title} from "@angular/platform-browser"; import {UserService} from "./user.service"; import {Router} from "@angular/router"; +import {Project} from "../model/project"; +import {FORBIDDEN, NOT_FOUND} from "http-status-codes"; +import {AppComponent} from "../app.component"; +@Injectable({ + providedIn: 'root' +}) export class UtilsService { - project: Project; - constructor(private projectService: ProjectService, private titleService: Title, private userService: UserService, private router: Router) { } @@ -22,8 +25,7 @@ export class UtilsService { return this.projectService.getProject(projectId) .then(response => { const project = new Project(response.body); - this.titleService.setTitle(title + ' ' + this.project.name); - console.log('return project'); + this.titleService.setTitle(title + ' ' + AppComponent.trimProjectName(project.name)); return project; }) .catch(error => { diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index e70e83908..008328d4f 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -6,7 +6,7 @@ import {ProjectService} from '../../service/project.service'; import {BAD_REQUEST, CONFLICT, FORBIDDEN, NOT_FOUND, UNPROCESSABLE_ENTITY} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; import {MatSnackBar} from '@angular/material'; -import {UtilsService} from "../../service/utils.service"; +import {UtilsService} from '../../service/utils.service'; @Component({ selector: 'app-edit-project', @@ -31,14 +31,12 @@ export class EditProjectComponent implements OnInit { ngOnInit(): void { - console.log('call on init'); this.route.params.subscribe(params => { if (params.id && params.id !== 'null') { this.projectId = params.id; - console.log('get project from utils'); this.utilsService.getProject('Coderadar - Edit', this.projectId).then(project => { this.project = project; - this.projectName = this.project.name; + this.projectName = project.name; }); } else { console.log('no project id'); @@ -114,8 +112,6 @@ export class EditProjectComponent implements OnInit { }); } - - /** * Checks for empty form fields. */ diff --git a/coderadar-ui/src/app/view/file-view/file-view.component.ts b/coderadar-ui/src/app/view/file-view/file-view.component.ts index 79ad359d2..96546bf30 100644 --- a/coderadar-ui/src/app/view/file-view/file-view.component.ts +++ b/coderadar-ui/src/app/view/file-view/file-view.component.ts @@ -23,12 +23,12 @@ import 'prismjs/plugins/diff-highlight/prism-diff-highlight'; import 'prismjs/plugins/line-numbers/prism-line-numbers'; import 'prismjs/plugins/line-highlight/prism-line-highlight'; import {Project} from '../../model/project'; -import {AppComponent} from '../../app.component'; import {Title} from '@angular/platform-browser'; import {ContributorService} from '../../service/contributor.service'; import {Contributor} from '../../model/contributor'; -import {HttpResponse} from "@angular/common/http"; -import {FileContentWithMetrics} from "../../model/file-content-with-metrics"; +import {HttpResponse} from '@angular/common/http'; +import {FileContentWithMetrics} from '../../model/file-content-with-metrics'; +import {UtilsService} from '../../service/utils.service'; @Component({ selector: 'app-file-view', @@ -63,7 +63,8 @@ export class FileViewComponent implements OnInit, AfterViewChecked { private router: Router, private userService: UserService, private route: ActivatedRoute, - private titleService: Title) { + private titleService: Title, + private utilsService: UtilsService) { } ngOnInit() { @@ -72,7 +73,9 @@ export class FileViewComponent implements OnInit, AfterViewChecked { this.projectId = params.projectId; this.commitHash = params.commitHash; this.commitHashAbbrev = this.commitHash.substr(0, 7); - this.getProject(); + this.utilsService.getProject('Coderadar -', this.projectId).then(project => { + this.project = project; + }); this.getFileTree(); }); } @@ -80,7 +83,7 @@ export class FileViewComponent implements OnInit, AfterViewChecked { hasChild = (_: number, node: FileTreeNode) => node.children !== null; public getFileTree() { - if(!this.showOnlyChangedFiles){ + if (!this.showOnlyChangedFiles) { this.showDiff = false; this.updateSelectedFile(null, this.currentSelectedFilepath); } @@ -107,23 +110,23 @@ export class FileViewComponent implements OnInit, AfterViewChecked { public updateSelectedFile(node: any, path: string): void { this.highlighted = false; this.currentFileContent = ''; - if(node === null && path === null){ + if (node === null && path === null) { return; } - if(path === null) { + if (path === null) { this.currentSelectedFilepath = this.getFullPath(this.tree.children, node, ''); this.currentSelectedFilepath = this.currentSelectedFilepath.substr(1, this.currentSelectedFilepath.length); } else { this.currentSelectedFilepath = path; } - if(this.currentSelectedFilepath === ''){ + if (this.currentSelectedFilepath === '') { return; } let promise: Promise> ; - if(this.showDiff){ - promise = this.projectService.getFileDiff(this.projectId, this.commitHash, this.currentSelectedFilepath) + if (this.showDiff) { + promise = this.projectService.getFileDiff(this.projectId, this.commitHash, this.currentSelectedFilepath); } else { - promise = this.projectService.getFileContentWithMetrics(this.projectId, this.commitHash, this.currentSelectedFilepath) + promise = this.projectService.getFileContentWithMetrics(this.projectId, this.commitHash, this.currentSelectedFilepath); } promise.then(value => { this.currentFileContent = value.body.content; @@ -153,7 +156,7 @@ export class FileViewComponent implements OnInit, AfterViewChecked { @HostListener('window:resize', ['$event']) onResize(event) { - if(this.showDiff){ + if (this.showDiff) { this.fileView.nativeElement.children.item(0).lastChild.remove(); } else { this.fileView.nativeElement.children.item(1).remove(); @@ -212,7 +215,7 @@ export class FileViewComponent implements OnInit, AfterViewChecked { const lineStart = +range.value.split('-')[0]; let findings = ''; this.currentFileMetrics.forEach(value => { - let found = false; + const found = false; for (const finding of value.findings) { if (finding.lineStart === lineStart) { findings += finding.message + '\n'; @@ -226,11 +229,11 @@ export class FileViewComponent implements OnInit, AfterViewChecked { getCodeClass() { const temp = this.currentSelectedFilepath.split('.'); const fileExtension = temp[temp.length - 1]; - if(this.showDiff) { + if (this.showDiff) { if (fileExtension === 'gradle') { return 'language-diff-groovy diff-highlight'; } - return 'language-diff-'+ fileExtension + ' diff-highlight'; + return 'language-diff-' + fileExtension + ' diff-highlight'; } else { if (fileExtension === 'gradle') { return 'line-numbers language-groovy'; @@ -240,7 +243,7 @@ export class FileViewComponent implements OnInit, AfterViewChecked { } getAllFindings(metrics: MetricWithFindings[]) { - if(metrics === null){ + if (metrics === null) { return '0'; } let result = ''; @@ -250,24 +253,8 @@ export class FileViewComponent implements OnInit, AfterViewChecked { return result.length === 0 ? '0' : result.substr(0, result.length - 1); } - - private getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - this.titleService.setTitle('Coderadar - ' + AppComponent.trimProjectName(this.project.name)); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } - getPreClass() { - if(!this.showDiff){ + if (!this.showDiff) { return 'line-numbers file-content'; } else { return 'file-content'; diff --git a/coderadar-ui/src/app/view/project-dashboard/project-dashboard.component.ts b/coderadar-ui/src/app/view/project-dashboard/project-dashboard.component.ts index e71873309..b05dffd4b 100644 --- a/coderadar-ui/src/app/view/project-dashboard/project-dashboard.component.ts +++ b/coderadar-ui/src/app/view/project-dashboard/project-dashboard.component.ts @@ -4,7 +4,7 @@ import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; import {Commit} from '../../model/commit'; import {Project} from '../../model/project'; -import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; +import {FORBIDDEN} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; import {AppComponent} from '../../app.component'; import {Branch} from '../../model/branch'; @@ -14,8 +14,9 @@ import * as fromRoot from '../../city-map/shared/reducers'; import {Store} from '@ngrx/store'; import {loadAvailableMetrics} from '../../city-map/visualization/visualization.actions'; import {CommitLog} from '../../model/commit-log'; -import {Contributor} from "../../model/contributor"; -import {ContributorService} from "../../service/contributor.service"; +import {Contributor} from '../../model/contributor'; +import {ContributorService} from '../../service/contributor.service'; +import {UtilsService} from '../../service/utils.service'; @Component({ selector: 'app-project-dashboard', @@ -40,7 +41,8 @@ export class ProjectDashboardComponent implements OnInit, OnDestroy { constructor(private router: Router, private userService: UserService, private titleService: Title, private projectService: ProjectService, private route: ActivatedRoute, private cityEffects: AppEffects, - private store: Store, private contributorService: ContributorService) { + private store: Store, private contributorService: ContributorService, + private utilsService: UtilsService) { this.project = new Project(); this.commits = []; this.selectedContributor.emailAddresses = ['']; @@ -54,7 +56,9 @@ export class ProjectDashboardComponent implements OnInit, OnDestroy { if (this.commits.length === 0) { this.waiting = true; } - this.getProject(); + this.utilsService.getProject('Coderadar -', this.projectId).then(project => { + this.project = project; + }); this.getBranchesInProject(); this.getContributors(); // Schedule a task to check if all commits are analyzed and update them if they're not @@ -112,24 +116,6 @@ export class ProjectDashboardComponent implements OnInit, OnDestroy { }); } - /** - * Gets the project from the service and saves it in this.project - */ - private getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - this.titleService.setTitle('Coderadar - ' + AppComponent.trimProjectName(this.project.name)); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } - ngOnDestroy(): void { this.updateCommitsTimer.unsubscribe(); } @@ -164,11 +150,11 @@ export class ProjectDashboardComponent implements OnInit, OnDestroy { if (error.status && error.status === FORBIDDEN) { this.userService.refresh(() => this.getContributors()); } - }) + }); } handleContributorChange($event: any) { - if($event == undefined) { + if ($event === undefined) { this.selectedContributor = new Contributor(); this.selectedContributor.emailAddresses = ['']; } else { diff --git a/coderadar-ui/src/app/view/view-commit/view-commit.component.ts b/coderadar-ui/src/app/view/view-commit/view-commit.component.ts index 5f48a81ca..7d66e2332 100644 --- a/coderadar-ui/src/app/view/view-commit/view-commit.component.ts +++ b/coderadar-ui/src/app/view/view-commit/view-commit.component.ts @@ -3,12 +3,13 @@ import {ActivatedRoute, Router} from '@angular/router'; import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; import {Commit} from '../../model/commit'; -import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; +import {FORBIDDEN} from 'http-status-codes'; import {HttpResponse} from '@angular/common/http'; import {Title} from '@angular/platform-browser'; import {Project} from '../../model/project'; import {AppComponent} from '../../app.component'; import {MetricValue} from '../../model/metric-value'; +import {UtilsService} from '../../service/utils.service'; @Component({ selector: 'app-view-commit', @@ -27,7 +28,7 @@ export class ViewCommitComponent implements OnInit { constructor(private router: Router, private userService: UserService, private titleService: Title, - private projectService: ProjectService, private route: ActivatedRoute) { + private projectService: ProjectService, private route: ActivatedRoute, private utilsService: UtilsService) { this.project = new Project(); } @@ -36,7 +37,9 @@ export class ViewCommitComponent implements OnInit { this.commit.name = params.name; this.projectId = params.id; this.getCommitInfo(); - this.getProject(); + this.utilsService.getProject('Coderadar - ' + this.commit.name.substring(0, 7) + ' -' , this.projectId).then(project => { + this.project = project; + }); }); } @@ -70,23 +73,4 @@ export class ViewCommitComponent implements OnInit { private getMetrics(): Promise> { return this.projectService.getAvailableMetrics(this.projectId); } - - /** - * Gets the project from the service and saves it in this.project - */ - private getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - this.titleService.setTitle('Coderadar - ' + this.commit.name.substring(0, 7) + ' - ' + - AppComponent.trimProjectName(this.project.name)); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } } From fcbf9708a3b2e3affa8e2ebf3951ff39e3207851 Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 16 Jun 2020 18:17:52 +0200 Subject: [PATCH 09/16] merging header and city view header --- coderadar-ui/src/app/app.module.ts | 2 -- .../view/city-view/city-view.component.css | 26 +++++++++++++++++++ .../view/city-view/city-view.component.html | 16 +++++++++++- .../app/view/city-view/city-view.component.ts | 21 ++++++++++----- .../src/app/view/header/header.component.html | 21 ++++++++------- 5 files changed, 68 insertions(+), 18 deletions(-) create mode 100644 coderadar-ui/src/app/view/city-view/city-view.component.css diff --git a/coderadar-ui/src/app/app.module.ts b/coderadar-ui/src/app/app.module.ts index 720cd03fe..1061fda87 100644 --- a/coderadar-ui/src/app/app.module.ts +++ b/coderadar-ui/src/app/app.module.ts @@ -52,7 +52,6 @@ import {TooltipService} from './city-map/service/tooltip.service'; import {ComparisonPanelService} from './city-map/service/comparison-panel.service'; import {environment} from '../environments/environment'; import {CityViewComponent} from './view/city-view/city-view.component'; -import {CityViewHeaderComponent} from './view/city-view/city-view-header/city-view-header.component'; import {FontAwesomeModule} from '@fortawesome/angular-fontawesome'; import {DependencyCompareComponent} from './levelized-structure-map/dependency-compare/dependency-compare.component'; import {TreeNodeComponent} from './levelized-structure-map/tree-node/tree-node.component'; @@ -97,7 +96,6 @@ const appRoutes: Routes = [ MergeDialogComponent, DependencyCompareComponent, TreeNodeComponent, - CityViewHeaderComponent, ListViewComponent, BranchViewComponent, FileViewComponent diff --git a/coderadar-ui/src/app/view/city-view/city-view.component.css b/coderadar-ui/src/app/view/city-view/city-view.component.css new file mode 100644 index 000000000..d32d0cd4a --- /dev/null +++ b/coderadar-ui/src/app/view/city-view/city-view.component.css @@ -0,0 +1,26 @@ +header .toolbar { + top: 0; + position: fixed; + height: 60px; + z-index: 6; +} + +header #dashboardLink { + font-size: 25pt; +} + +header button { + font-size: 15pt; + position: fixed; + right: 30px +} + +header .spacer { + top: 0; + height: 60px +} + +mat-toolbar:last-child { + height: 80px; + z-index: 5; +} diff --git a/coderadar-ui/src/app/view/city-view/city-view.component.html b/coderadar-ui/src/app/view/city-view/city-view.component.html index 2f540929f..675f78ce4 100644 --- a/coderadar-ui/src/app/view/city-view/city-view.component.html +++ b/coderadar-ui/src/app/view/city-view/city-view.component.html @@ -1,2 +1,16 @@ - + + + + + arrow_back_ios + + {{appComponent.trimProjectNameToLength(project.name, 16)}} + + + + + + + + diff --git a/coderadar-ui/src/app/view/city-view/city-view.component.ts b/coderadar-ui/src/app/view/city-view/city-view.component.ts index 6d1124cde..709bb0bf2 100644 --- a/coderadar-ui/src/app/view/city-view/city-view.component.ts +++ b/coderadar-ui/src/app/view/city-view/city-view.component.ts @@ -6,33 +6,42 @@ import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; import {ProjectService} from '../../service/project.service'; import {UserService} from '../../service/user.service'; import {AppComponent} from '../../app.component'; +import {Project} from '../../model/project'; @Component({ selector: 'app-city-view', templateUrl: './city-view.component.html', + styleUrls: ['./city-view.component.css'], }) export class CityViewComponent implements OnInit { + appComponent = AppComponent; + project: Project; + projectId: number; + constructor(private projectService: ProjectService, private route: ActivatedRoute, - private cityEffects: AppEffects, private titleService: Title, + private cityEffects: AppEffects, private titleService: Title, private userService: UserService, private router: Router) { + this.project = new Project(); } ngOnInit() { this.route.params.subscribe(params => { this.cityEffects.currentProjectId = params.id; - this.setTitle(params.id); + this.projectId = params.id; + this.setTitle(); }); } - private setTitle(id: number) { - this.projectService.getProject(id) + private setTitle() { + this.projectService.getProject(this.projectId) .then(response => { - this.titleService.setTitle('Coderadar - ' + AppComponent.trimProjectName(response.body.name) + ' - 3D view'); + this.project = new Project(response.body); + this.titleService.setTitle('Coderadar - ' + AppComponent.trimProjectName(this.project.name) + ' - 3D view'); }) .catch(error => { if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.setTitle(id)); + this.userService.refresh(() => this.setTitle()); } else if (error.status && error.status === NOT_FOUND) { this.router.navigate(['/dashboard']); } diff --git a/coderadar-ui/src/app/view/header/header.component.html b/coderadar-ui/src/app/view/header/header.component.html index b5dd202f8..9f31a1f19 100644 --- a/coderadar-ui/src/app/view/header/header.component.html +++ b/coderadar-ui/src/app/view/header/header.component.html @@ -14,14 +14,17 @@
    - - - {{breadcrumb.name}} - - arrow_forward_ios - - - + + + + + {{breadcrumb.name}} + + arrow_forward_ios + + + + From ce35df0ff1d27269415fd1c9f985304e16a3fbe7 Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 16 Jun 2020 18:23:43 +0200 Subject: [PATCH 10/16] remove city view header files --- .../city-view-header.component.css | 26 -------- .../city-view-header.component.html | 32 ---------- .../city-view-header.component.spec.ts | 25 -------- .../city-view-header.component.ts | 59 ------------------- 4 files changed, 142 deletions(-) delete mode 100644 coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.css delete mode 100644 coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.html delete mode 100644 coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.spec.ts delete mode 100644 coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.ts diff --git a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.css b/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.css deleted file mode 100644 index d32d0cd4a..000000000 --- a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.css +++ /dev/null @@ -1,26 +0,0 @@ -header .toolbar { - top: 0; - position: fixed; - height: 60px; - z-index: 6; -} - -header #dashboardLink { - font-size: 25pt; -} - -header button { - font-size: 15pt; - position: fixed; - right: 30px -} - -header .spacer { - top: 0; - height: 60px -} - -mat-toolbar:last-child { - height: 80px; - z-index: 5; -} diff --git a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.html b/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.html deleted file mode 100644 index 098a2d97b..000000000 --- a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.html +++ /dev/null @@ -1,32 +0,0 @@ -
    - - - logo -  Coderadar - - - -
    - - - - arrow_back_ios - - {{appComponent.trimProjectNameToLength(project.name, 16)}} - - - - - - - - -
    - diff --git a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.spec.ts b/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.spec.ts deleted file mode 100644 index c5ea4f8fa..000000000 --- a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.spec.ts +++ /dev/null @@ -1,25 +0,0 @@ -import {async, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {CityViewHeaderComponent} from './city-view-header.component'; - -describe('CityViewHeaderComponent', () => { - let component: CityViewHeaderComponent; - let fixture: ComponentFixture; - - beforeEach(async(() => { - TestBed.configureTestingModule({ - declarations: [CityViewHeaderComponent] - }) - .compileComponents(); - })); - - beforeEach(() => { - fixture = TestBed.createComponent(CityViewHeaderComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.ts b/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.ts deleted file mode 100644 index 0820efecb..000000000 --- a/coderadar-ui/src/app/view/city-view/city-view-header/city-view-header.component.ts +++ /dev/null @@ -1,59 +0,0 @@ -import {Component, OnInit} from '@angular/core'; -import {UserService} from '../../../service/user.service'; -import {AppEffects} from '../../../city-map/shared/effects'; -import {Project} from '../../../model/project'; -import {FORBIDDEN, NOT_FOUND} from 'http-status-codes'; -import {ProjectService} from '../../../service/project.service'; -import {Router} from '@angular/router'; -import {AppComponent} from '../../../app.component'; - -@Component({ - selector: 'app-city-view-header', - templateUrl: './city-view-header.component.html', - styleUrls: ['./city-view-header.component.css'] -}) -export class CityViewHeaderComponent implements OnInit { - appComponent = AppComponent; - - projectId: number; - project: Project; - - constructor(private userService: UserService, private appEffects: AppEffects, - private projectService: ProjectService, private router: Router) { - this.project = new Project(); - } - - ngOnInit() { - this.projectId = this.appEffects.currentProjectId; - this.getProject(); - } - - /** - * Gets the project from the service and saves it in this.project - */ - private getProject(): void { - this.projectService.getProject(this.projectId) - .then(response => { - this.project = new Project(response.body); - }) - .catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.getProject()); - } else if (error.status && error.status === NOT_FOUND) { - this.router.navigate(['/dashboard']); - } - }); - } - - - logout(): void { - this.userService.logout(); - } - - /** - * Gets the current username from the user service. - */ - getUsername(): string { - return UserService.getLoggedInUser().username; - } -} From e4110acbb44dcf5f6222c2eb7462d0ea2d1ec08d Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 16 Jun 2020 19:19:09 +0200 Subject: [PATCH 11/16] remove logs and leftovers and more clean up --- .../dependency-compare.component.ts | 11 +++-------- .../app/view/edit-project/edit-project.component.ts | 1 - .../list-view/list-view.component.html | 2 +- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts index e3b428b23..b509d0e91 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.ts @@ -66,7 +66,6 @@ export class DependencyCompareComponent implements OnInit, AfterViewInit { getData(): void { if (this.commitName2 && this.commitName2 !== 'null') { - console.log('get compare'); this.projectService.getCompareTree(this.projectId, this.commitName, this.commitName2).then(response => { this.node = response.body; this.checkChanged = false; @@ -80,13 +79,10 @@ export class DependencyCompareComponent implements OnInit, AfterViewInit { } }); } else { - console.log('get tree'); this.projectService.getDependencyTree(this.projectId, this.commitName).then(response => { this.node = response.body; this.svg = document.getElementById('3svg'); this.checkDown = this.checkUp = true; - console.log(this.node); - console.log(this.node.path); setTimeout(() => this.draw(() => this.loadDependencies(this.node)), 50); }) .catch(e => { @@ -153,7 +149,7 @@ export class DependencyCompareComponent implements OnInit, AfterViewInit { while (element.offsetParent === null) { element = element.parentNode.parentNode.parentNode.parentNode.parentNode.firstElementChild as HTMLElement; } - return element as HTMLElement; + return element; } loadDependencies(node, checkChanged?): void { @@ -245,7 +241,7 @@ export class DependencyCompareComponent implements OnInit, AfterViewInit { // calculate positions for arrows of currentNode and its dependencies if (currentNode.dependencies.length > 0) { // find last visible element for currentNode as start - const start = this.findLastHTMLElement(currentNode.path) as HTMLElement; + const start = this.findLastHTMLElement(currentNode.path); let toDraw; if (this.activeDependency !== undefined) { // activeDependency is set is not start @@ -258,11 +254,10 @@ export class DependencyCompareComponent implements OnInit, AfterViewInit { const startx = ($(start).offset().left - $(this.svg).offset().left) / this.zoomElement.scale + start.offsetWidth / 2; const starty = ($(start).offset().top - $(this.svg).offset().top) / this.zoomElement.scale + start.offsetHeight + ($(start).css('padding-top') !== '0px' ? 0 : 5); const startTop = starty - start.offsetHeight - ($(start).css('padding-top') !== '0px' ? 0 : 10); - console.log(parseFloat($(start).css('padding-top'))); currentNode.dependencies.forEach(dependency => { // find last visible element for dependency as end - const end = this.findLastHTMLElement(dependency.path) as HTMLElement; + const end = this.findLastHTMLElement(dependency.path); // if activeDependency is set, draw only activeDependency related dependencies if (this.activeDependency !== undefined) { diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index 008328d4f..5cc3c4ea6 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -39,7 +39,6 @@ export class EditProjectComponent implements OnInit { this.projectName = project.name; }); } else { - console.log('no project id'); this.projectId = null; } }); diff --git a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html index 2dbc07484..46ba5d9a9 100644 --- a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html +++ b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.html @@ -76,7 +76,7 @@ Analyzed: {{booleanToString(commit.analyzed)}}
    - +
    From 023bba0edf9d5b97d62e691ae5666b13ef4de730 Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 16 Jun 2020 19:50:33 +0200 Subject: [PATCH 12/16] remove code smells, ts lint --- .../commit-chooser.component.css | 1 - .../commit-chooser.component.css.map | 7 --- .../commit-chooser.component.scss | 0 .../commit-chooser.component.ts | 33 ++++++------- .../control-panel.component.scss | 0 .../control-panel/control-panel.component.ts | 5 +- .../control-panel/search/search.component.css | 1 - .../search/search.component.css.map | 7 --- .../search/search.component.scss | 0 .../control-panel/search/search.component.ts | 47 +++++++++---------- .../settings/filter/filter.component.css | 1 - .../settings/filter/filter.component.css.map | 7 --- .../settings/filter/filter.component.scss | 0 .../settings/filter/filter.component.ts | 9 +--- .../settings/settings.component.css | 1 - .../settings/settings.component.css.map | 7 --- .../settings/settings.component.scss | 0 .../settings/settings.component.ts | 3 +- .../edit-project/edit-project.component.ts | 2 +- 19 files changed, 41 insertions(+), 90 deletions(-) delete mode 100644 coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css delete mode 100644 coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css.map delete mode 100644 coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.scss delete mode 100644 coderadar-ui/src/app/city-map/control-panel/control-panel.component.scss delete mode 100644 coderadar-ui/src/app/city-map/control-panel/search/search.component.css delete mode 100644 coderadar-ui/src/app/city-map/control-panel/search/search.component.css.map delete mode 100644 coderadar-ui/src/app/city-map/control-panel/search/search.component.scss delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css.map delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.scss delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css.map delete mode 100644 coderadar-ui/src/app/city-map/control-panel/settings/settings.component.scss diff --git a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css b/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css deleted file mode 100644 index b0b5f22a5..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css +++ /dev/null @@ -1 +0,0 @@ -/*# sourceMappingURL=commit-chooser.component.css.map */ diff --git a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css.map b/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css.map deleted file mode 100644 index 5f391dcd0..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "mappings": "", - "sources": [], - "names": [], - "file": "commit-chooser.component.css" -} \ No newline at end of file diff --git a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.scss b/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.ts b/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.ts index e2bdd8bf1..4c248f9ea 100644 --- a/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.ts +++ b/coderadar-ui/src/app/city-map/control-panel/commit-chooser/commit-chooser.component.ts @@ -1,15 +1,18 @@ -import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core'; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import {CommitType} from '../../enum/CommitType'; import {Commit} from '../../../model/commit'; -import {Observable} from "rxjs"; -import {DatePipe} from "@angular/common"; +import {Observable} from 'rxjs'; +import {DatePipe} from '@angular/common'; @Component({ selector: 'app-commit-chooser', - templateUrl: './commit-chooser.component.html', - styleUrls: ['./commit-chooser.component.scss'] + templateUrl: './commit-chooser.component.html' }) -export class CommitChooserComponent implements OnInit{ +export class CommitChooserComponent implements OnInit { + + constructor(public datepipe: DatePipe) {} + + static readonly COMMIT_HASH_LENGTH = 7; @Input() commitType: CommitType; @Input() commits: Observable; @@ -20,10 +23,6 @@ export class CommitChooserComponent implements OnInit{ @Output() changeCommit = new EventEmitter(); - static readonly COMMIT_HASH_LENGTH = 7; - - constructor(public datepipe:DatePipe) {} - ngOnInit() { this.selected.subscribe(value => this.handleCommitChanged(value)); } @@ -31,18 +30,14 @@ export class CommitChooserComponent implements OnInit{ formatCommit(commit: Commit): string { if (commit === null || commit === undefined) { - return "empty"; + return 'empty'; } return commit.name.substring(0, CommitChooserComponent.COMMIT_HASH_LENGTH) + ', ' + commit.author + ', ' + new Date(commit.timestamp).toUTCString(); } - filterCommitOptions(value: string,source:{value:Commit,displayValue:string}[]): {value:Commit,displayValue:string}[] { - if (source === undefined) { - return []; - } else if (typeof value !== 'string') { + filterCommitOptions(value: string, source: {value: Commit, displayValue: string}[]): {value: Commit, displayValue: string}[] { + if (source === undefined || typeof value !== 'string') { return []; - } else if (value === undefined) { - return source; } const lowercaseValue = value.toLowerCase(); @@ -56,8 +51,8 @@ export class CommitChooserComponent implements OnInit{ if (optionAny.author.toLowerCase().includes(lowercaseValue)) {score += 25; } if (optionAny.name.startsWith(value)) {score += 1000; } if (optionAny.name.includes(lowercaseValue)) {score += 500; } - if (option.displayValue.substring(option.value.author.length+CommitChooserComponent.COMMIT_HASH_LENGTH).toLowerCase().includes(lowercaseValue)){score+=1000} - if (score > 0||value==="") { + if (option.displayValue.substring(option.value.author.length + CommitChooserComponent.COMMIT_HASH_LENGTH).toLowerCase().includes(lowercaseValue)) {score += 1000; } + if (score > 0 || value === '') { optionAny.score = score; return option; } diff --git a/coderadar-ui/src/app/city-map/control-panel/control-panel.component.scss b/coderadar-ui/src/app/city-map/control-panel/control-panel.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/control-panel/control-panel.component.ts b/coderadar-ui/src/app/city-map/control-panel/control-panel.component.ts index c08d86aea..89fcdd4bf 100644 --- a/coderadar-ui/src/app/city-map/control-panel/control-panel.component.ts +++ b/coderadar-ui/src/app/city-map/control-panel/control-panel.component.ts @@ -5,7 +5,7 @@ import {changeCommit, loadCommits} from './control-panel.actions'; import {FocusService} from '../service/focus.service'; import {ViewType} from '../enum/ViewType'; import {CommitType} from '../enum/CommitType'; -import {Observable, of} from 'rxjs'; +import {Observable} from 'rxjs'; import {Commit} from '../../model/commit'; import {map} from 'rxjs/operators'; import { AppEffects } from '../shared/effects'; @@ -13,8 +13,7 @@ import {loadAvailableMetrics} from '../visualization/visualization.actions'; @Component({ selector: 'app-control-panel', - templateUrl: './control-panel.component.html', - styleUrls: ['./control-panel.component.scss'] + templateUrl: './control-panel.component.html' }) export class ControlPanelComponent implements OnInit { diff --git a/coderadar-ui/src/app/city-map/control-panel/search/search.component.css b/coderadar-ui/src/app/city-map/control-panel/search/search.component.css deleted file mode 100644 index 9d2fc0318..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/search/search.component.css +++ /dev/null @@ -1 +0,0 @@ -/*# sourceMappingURL=search.component.css.map */ diff --git a/coderadar-ui/src/app/city-map/control-panel/search/search.component.css.map b/coderadar-ui/src/app/city-map/control-panel/search/search.component.css.map deleted file mode 100644 index 8bb090c8e..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/search/search.component.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "mappings": "", - "sources": [], - "names": [], - "file": "search.component.css" -} \ No newline at end of file diff --git a/coderadar-ui/src/app/city-map/control-panel/search/search.component.scss b/coderadar-ui/src/app/city-map/control-panel/search/search.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/control-panel/search/search.component.ts b/coderadar-ui/src/app/city-map/control-panel/search/search.component.ts index 3bbb161ec..c9bbe530b 100644 --- a/coderadar-ui/src/app/city-map/control-panel/search/search.component.ts +++ b/coderadar-ui/src/app/city-map/control-panel/search/search.component.ts @@ -1,11 +1,10 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {Observable} from "rxjs"; -import {VisualizationConfig} from "../../VisualizationConfig"; +import {Observable} from 'rxjs'; +import {VisualizationConfig} from '../../VisualizationConfig'; @Component({ selector: 'app-search', - templateUrl: './search.component.html', - styleUrls: ['./search.component.scss'] + templateUrl: './search.component.html' }) export class SearchComponent implements OnInit { @@ -16,41 +15,37 @@ export class SearchComponent implements OnInit { constructor() { } - filterFileOptions(value: string,source:{value:string,displayValue:string}[]): {value:string,displayValue:string}[] { - if (source === undefined) { - return []; - } else if (typeof value !== 'string') { - return []; - } else if (value === undefined) { + filterFileOptions(value: string, source: {value: string, displayValue: string}[]): {value: string, displayValue: string}[] { + if (source === undefined || typeof value !== 'string') { return []; } const lowercaseValue = value.toLowerCase(); source.forEach(option => { - var score = 0; - //Positive conditions - if(option.displayValue.startsWith(value))score += 10 - if(option.displayValue.toLowerCase().includes(lowercaseValue))score +=1; - //Final conditions - if(option.displayValue===VisualizationConfig.ROOT_NAME)score = 0; - option["score"] = score; + let score = 0; + // Positive conditions + if (option.displayValue.startsWith(value)) {score += 10; } + if (option.displayValue.toLowerCase().includes(lowercaseValue)) {score += 1; } + // Final conditions + if (option.displayValue === VisualizationConfig.ROOT_NAME) {score = 0; } + option['score'] = score; }); - const filteredFiles: {value:string,displayValue:string}[] = source.filter(option => { - if(option["score"]<=0)return; - if(option.value.toLowerCase().includes(lowercaseValue))return option; + const filteredFiles: {value: string, displayValue: string}[] = source.filter(option => { + if (option['score'] <= 0) {return; } + if (option.value.toLowerCase().includes(lowercaseValue)) { return option; } }); return filteredFiles.sort( - (a, b) =>{ - return Math.sign(b["score"] - a["score"]); + (a, b) => { + return Math.sign(b['score'] - a['score']); }); } - formatFileOptions(option: string): string{ - if(option){ + formatFileOptions(option: string): string { + if (option) { return option; - }else{ - return ""; + } else { + return ''; } } diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css b/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css deleted file mode 100644 index a6a2a5764..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css +++ /dev/null @@ -1 +0,0 @@ -/*# sourceMappingURL=filter.component.css.map */ diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css.map b/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css.map deleted file mode 100644 index 7b65093e2..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "mappings": "", - "sources": [], - "names": [], - "file": "filter.component.css" -} \ No newline at end of file diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.scss b/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.ts b/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.ts index e85f6ac28..af69326a2 100644 --- a/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.ts +++ b/coderadar-ui/src/app/city-map/control-panel/settings/filter/filter.component.ts @@ -1,14 +1,9 @@ -import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core'; -import {faFilter} from '@fortawesome/free-solid-svg-icons'; +import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; import {IFilter} from '../../../interfaces/IFilter'; -import {FormControl} from '@angular/forms'; - -declare var $: any; @Component({ selector: 'app-filter', - templateUrl: './filter.component.html', - styleUrls: ['./filter.component.scss'] + templateUrl: './filter.component.html' }) export class FilterComponent implements OnInit { diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css b/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css deleted file mode 100644 index 7d0e27d02..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css +++ /dev/null @@ -1 +0,0 @@ -/*# sourceMappingURL=settings.component.css.map */ diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css.map b/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css.map deleted file mode 100644 index 13203285d..000000000 --- a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "mappings": "", - "sources": [], - "names": [], - "file": "settings.component.css" -} \ No newline at end of file diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.scss b/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.scss deleted file mode 100644 index e69de29bb..000000000 diff --git a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.ts b/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.ts index 21fe0e153..2d9c0f7cd 100644 --- a/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.ts +++ b/coderadar-ui/src/app/city-map/control-panel/settings/settings.component.ts @@ -10,8 +10,7 @@ import {ViewType} from '../../enum/ViewType'; @Component({ selector: 'app-settings', - templateUrl: './settings.component.html', - styleUrls: ['./settings.component.scss'] + templateUrl: './settings.component.html' }) export class SettingsComponent implements OnInit { diff --git a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts index 5cc3c4ea6..f475a4002 100644 --- a/coderadar-ui/src/app/view/edit-project/edit-project.component.ts +++ b/coderadar-ui/src/app/view/edit-project/edit-project.component.ts @@ -3,7 +3,7 @@ import {Project} from '../../model/project'; import {ActivatedRoute, Router} from '@angular/router'; import {UserService} from '../../service/user.service'; import {ProjectService} from '../../service/project.service'; -import {BAD_REQUEST, CONFLICT, FORBIDDEN, NOT_FOUND, UNPROCESSABLE_ENTITY} from 'http-status-codes'; +import {BAD_REQUEST, CONFLICT, FORBIDDEN, UNPROCESSABLE_ENTITY} from 'http-status-codes'; import {Title} from '@angular/platform-browser'; import {MatSnackBar} from '@angular/material'; import {UtilsService} from '../../service/utils.service'; From 55edf78f4d9725313d7472316e70852693879005 Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 22 Jun 2020 18:19:03 +0200 Subject: [PATCH 13/16] add tests for dependencies for more code coverage --- .../dependency-compare.component.spec.ts | 703 ++++-------------- .../dependency-compare/testdata.json | 491 ++++++++++++ .../tree-node/tree-node.component.spec.ts | 91 ++- coderadar-ui/tsconfig.json | 2 + 4 files changed, 721 insertions(+), 566 deletions(-) create mode 100644 coderadar-ui/src/app/levelized-structure-map/dependency-compare/testdata.json diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts index 34ffede5d..89ec222cc 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts @@ -1,582 +1,167 @@ -import {TestBed} from '@angular/core/testing'; -import {RouterModule, Routes} from '@angular/router'; -import {LoginComponent} from '../../view/login/login.component'; -import {DependencyRootComponent} from '../dependency-root/dependency-root.component'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; +import {ActivatedRoute, Router} from '@angular/router'; import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; -import {ProjectService} from '../../service/project.service'; -import {HeaderComponent} from '../../view/header/header.component'; -import {FooterComponent} from '../../view/footer/footer.component'; -import {BrowserModule} from '@angular/platform-browser'; -import { - MatButtonModule, - MatCardModule, - MatCheckboxModule, - MatFormFieldModule, MatGridListModule, MatIconModule, - MatInputModule, - MatMenuModule, MatProgressSpinnerModule, - MatToolbarModule -} from '@angular/material'; -import {FormsModule} from '@angular/forms'; +import {By} from '@angular/platform-browser'; +import {DependencyCompareComponent} from './dependency-compare.component'; +import testdata from './testdata.json'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; +import {RouterTestingModule} from '@angular/router/testing'; +import {of} from 'rxjs'; +import {TreeNodeComponent} from '../tree-node/tree-node.component'; +import {AppComponent} from '../../app.component'; -const appRoutes: Routes = [ - {path: 'login', component: LoginComponent}, - {path: 'structure-map/:projectId/:commitName', component: DependencyRootComponent}, - {path: '', redirectTo: '/dashboard', pathMatch: 'full'} -]; +let routerSpy; +let fixture: ComponentFixture; -describe('DependencyRootComponent', () => { - let httpTestingController: HttpTestingController; - let service: ProjectService; +describe('DependencyCompareComponent', () => { + let component: DependencyCompareComponent; + let http; beforeEach(() => { TestBed.configureTestingModule({ declarations: [ - HeaderComponent, - FooterComponent, - LoginComponent, - DependencyRootComponent + DependencyCompareComponent, ], imports: [ - BrowserModule, - MatMenuModule, - RouterModule.forRoot(appRoutes), - MatToolbarModule, - MatInputModule, - MatCardModule, - MatFormFieldModule, - MatCheckboxModule, - FormsModule, - MatProgressSpinnerModule, - MatButtonModule, - MatGridListModule, - MatIconModule, - HttpClientTestingModule + HttpClientTestingModule, + RouterTestingModule ], providers: [ - ProjectService - ] - }); + {provide: Router}, + {provide: ActivatedRoute, useValue: { + params: of({id: 1}) + }}, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .compileComponents(); - httpTestingController = TestBed.get(HttpTestingController); - service = TestBed.get(ProjectService); + fixture = TestBed.createComponent(DependencyCompareComponent); + component = fixture.componentInstance; + http = TestBed.get(HttpTestingController); + routerSpy = spyOn(Router.prototype, 'navigate').and.callFake(() => {}); + fixture.detectChanges(); }); - afterEach(() => { - httpTestingController.verify(); + it('should create', () => { + expect(component).toBeTruthy(); }); +}); - // Angular default test added when you generate a service using the CLI - it('should be created', () => { - expect(service).toBeTruthy(); +describe('DependencyCompareComponent', () => { + let component: DependencyCompareComponent; + let http; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + DependencyCompareComponent, + TreeNodeComponent + ], + imports: [ + HttpClientTestingModule, + RouterTestingModule + ], + providers: [ + {provide: Router}, + { + provide: ActivatedRoute, useValue: { + params: of({projectId: 1, commitName1: '1', commitName2: '2'}) + } + }, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DependencyCompareComponent); + component = fixture.componentInstance; + http = TestBed.get(HttpTestingController); + routerSpy = spyOn(Router.prototype, 'navigate').and.callFake(() => {}); }); - describe('getCompareTree()', () => { - it('should return a dependencyTree comparing two commits made from test data', () => { - const mockResponse = { - filename: 'testSrc', - path: '', - packageName: '', - level: 0, - changed: null, - children: [ - { - filename: 'org', - path: 'org', - packageName: 'org', - level: 0, - changed: null, - children: [ - { - filename: 'wickedsource', - path: 'org/wickedsource', - packageName: 'org.wickedsource', - level: 0, - changed: null, - children: [ - { - filename: 'dependencytree', - path: 'org/wickedsource/dependencytree', - packageName: 'org.wickedsource.dependencytree', - level: 0, - changed: null, - children: [ - { - filename: 'example', - path: 'org/wickedsource/dependencytree/example', - packageName: 'org.wickedsource.dependencytree.example', - level: 0, - changed: null, - children: [ - { - filename: 'CoreTest.java', - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - packageName: 'org.wickedsource.dependencytree.example.CoreTest.java', - level: 0, - changed: null, - children: [], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - changed: 'ADD' - } - ] - }, - { - filename: 'somepackage', - path: 'org/wickedsource/dependencytree/example/somepackage', - packageName: 'org.wickedsource.dependencytree.example.somepackage', - level: 1, - changed: null, - children: [ - { - filename: 'CircularDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/CircularDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.CircularDependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'CoreDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.CoreDependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'DuplicateDependencies2Test.java', - path: 'org/wickedsource/dependencytree/example/somepackage/DuplicateDependencies2Test.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.DuplicateDependencies2Test.java', - level: 0, - changed: null, - children: [], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - } - ] - }, - { - filename: 'DuplicateDependenciesTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/DuplicateDependenciesTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.DuplicateDependenciesTest.java', - level: 0, - changed: null, - children: [], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - } - ] - }, - { - filename: 'FullyClassifiedDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.FullyClassifiedDependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'InvalidDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/InvalidDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.InvalidDependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'NotADependencyTest.java', - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.somepackage.NotADependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - } - ] - }, - { - filename: 'wildcardpackage', - path: 'org/wickedsource/dependencytree/example/wildcardpackage', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage', - level: 2, - changed: null, - children: [ - { - filename: 'WildcardImport1Test.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport1Test.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'WildcardImport2Test.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport2Test.java', - level: 0, - changed: null, - children: [], - dependencies: [] - }, - { - filename: 'WildcardImportCircularDependencyTest.java', - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - packageName: 'org.wickedsource.dependencytree.example.wildcardpackage.WildcardImportCircularDependencyTest.java', - level: 0, - changed: null, - children: [], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - changed: 'ADD' - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - changed: 'ADD' - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - changed: 'ADD' - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] - } - ], - dependencies: [ - { - path: 'org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java', - changed: 'ADD' - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java', - changed: null - }, - { - path: 'org/wickedsource/dependencytree/example/CoreTest.java', - changed: null - } - ] + it('should return a dependencyTree comparing two commits made from test data', () => { + expect(testdata).toBeTruthy(); + spyOn(component, 'getData').and.callThrough(); + + fixture.detectChanges(); + + expect(component.getData).toHaveBeenCalled(); + http.expectOne(`${AppComponent.getApiUrl()}analyzers/1/structureMap/1/2`).flush(testdata, { + status: 200, + statusText: 'Ok', + url: 'api/analyzers/1/structureMap/1/2', + }); + + fixture.whenStable().then(() => { + expect(component.node).toEqual(testdata); + expect(fixture.debugElement.query(By.css('[id="3dependencyTree"]'))).toBeTruthy(); + fixture.detectChanges(); + fixture.whenStable().then(() => { + expect(fixture.debugElement.query(By.css('[id="3list__root"]'))).toBeTruthy(); + expect(fixture.debugElement.query(By.css('.filename-span'))).toBeTruthy(); + expect(fixture.debugElement.queryAll(By.css('.filename-span'))[0]).toBeTruthy(); + expect(fixture.debugElement.queryAll(By.css('.filename-span'))[0].nativeElement.innerText).toEqual(' example/'); + }); + }); + }); +}); + +describe('DependencyCompareComponent', () => { + let component: DependencyCompareComponent; + let http; + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [ + DependencyCompareComponent, + TreeNodeComponent + ], + imports: [ + HttpClientTestingModule, + RouterTestingModule + ], + providers: [ + {provide: Router}, + { + provide: ActivatedRoute, useValue: { + params: of({projectId: 1, commitName1: '1', commitName2: 'null'}) } - ], - dependencies: [] - }; + }, + ], + schemas: [CUSTOM_ELEMENTS_SCHEMA] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DependencyCompareComponent); + component = fixture.componentInstance; + http = TestBed.get(HttpTestingController); + routerSpy = spyOn(Router.prototype, 'navigate').and.callFake(() => {}); + }); + + it('should return a dependencyTree comparing two commits made from test data', () => { + expect(testdata).toBeTruthy(); + spyOn(component, 'getData').and.callThrough(); + + fixture.detectChanges(); + + expect(component.getData).toHaveBeenCalled(); + http.expectOne(`${AppComponent.getApiUrl()}analyzers/1/structureMap/1`).flush(testdata, { + status: 200, + statusText: 'Ok', + url: 'api/analyzers/1/structureMap/1/2', + }); - service.getCompareTree(1, '0b79780c8e8c8736a8e0ddafc964fc4446f007f2', '643a55c23dce1832b5da07816f068896aef854e6') - .then(data => { - // @ts-ignore - expect(data.body.filename).toEqual('testSrc'); - // @ts-ignore - const dependencyTree = data.body.children[0].children[0].children[0]; - expect(dependencyTree.children.length).toBe(4); - expect(dependencyTree.children[0].changed).toBe('ADD'); - }); - const req = httpTestingController. - expectOne('http://localhost:8080/analyzers/1/structureMap/0b79780c8e8c8736a8e0ddafc964fc4446f007f2/643a55c23dce1832b5da07816f068896aef854e6'); - expect(req.request.method).toEqual('GET'); - req.flush(mockResponse); + fixture.whenStable().then(() => { + expect(component.node).toEqual(testdata); + expect(fixture.debugElement.query(By.css('[id="3dependencyTree"]'))).toBeTruthy(); + fixture.detectChanges(); + fixture.whenStable().then(() => { + expect(fixture.debugElement.query(By.css('[id="3list__root"]'))).toBeTruthy(); + expect(fixture.debugElement.query(By.css('.filename-span'))).toBeTruthy(); + expect(fixture.debugElement.queryAll(By.css('.filename-span'))[0]).toBeTruthy(); + expect(fixture.debugElement.queryAll(By.css('.filename-span'))[0].nativeElement.innerText).toEqual(' example/'); + }); }); }); }); diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/testdata.json b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/testdata.json new file mode 100644 index 000000000..f3677a888 --- /dev/null +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/testdata.json @@ -0,0 +1,491 @@ +{ + "filename": "testSrc", + "path": "", + "packageName": "", + "level": 0, + "changed": null, + "children": [ + { + "filename": "org", + "path": "org", + "packageName": "org", + "level": 0, + "changed": null, + "children": [ + { + "filename": "wickedsource", + "path": "org/wickedsource", + "packageName": "org.wickedsource", + "level": 0, + "changed": null, + "children": [ + { + "filename": "dependencytree", + "path": "org/wickedsource/dependencytree", + "packageName": "org.wickedsource.dependencytree", + "level": 0, + "changed": null, + "children": [ + { + "filename": "example", + "path": "org/wickedsource/dependencytree/example", + "packageName": "org.wickedsource.dependencytree.example", + "level": 0, + "changed": null, + "children": [ + { + "filename": "CoreTest.java", + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "packageName": "org.wickedsource.dependencytree.example.CoreTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "changed": "ADD" + } + ] + }, + { + "filename": "somepackage", + "path": "org/wickedsource/dependencytree/example/somepackage", + "packageName": "org.wickedsource.dependencytree.example.somepackage", + "level": 1, + "changed": null, + "children": [ + { + "filename": "CircularDependencyTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/CircularDependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.CircularDependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "CoreDependencyTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.CoreDependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "DuplicateDependencies2Test.java", + "path": "org/wickedsource/dependencytree/example/somepackage/DuplicateDependencies2Test.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.DuplicateDependencies2Test.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + } + ] + }, + { + "filename": "DuplicateDependenciesTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/DuplicateDependenciesTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.DuplicateDependenciesTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + } + ] + }, + { + "filename": "FullyClassifiedDependencyTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.FullyClassifiedDependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "InvalidDependencyTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/InvalidDependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.InvalidDependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "NotADependencyTest.java", + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.somepackage.NotADependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + } + ] + }, + { + "filename": "wildcardpackage", + "path": "org/wickedsource/dependencytree/example/wildcardpackage", + "packageName": "org.wickedsource.dependencytree.example.wildcardpackage", + "level": 2, + "changed": null, + "children": [ + { + "filename": "WildcardImport1Test.java", + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "packageName": "org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport1Test.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "WildcardImport2Test.java", + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "packageName": "org.wickedsource.dependencytree.example.wildcardpackage.WildcardImport2Test.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [] + }, + { + "filename": "WildcardImportCircularDependencyTest.java", + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "packageName": "org.wickedsource.dependencytree.example.wildcardpackage.WildcardImportCircularDependencyTest.java", + "level": 0, + "changed": null, + "children": [], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "changed": "ADD" + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "changed": "ADD" + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "changed": "ADD" + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [ + { + "path": "org/wickedsource/dependencytree/example/somepackage/CoreDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/FullyClassifiedDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/somepackage/NotADependencyTest.java", + "changed": "ADD" + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport1Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImport2Test.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/wildcardpackage/WildcardImportCircularDependencyTest.java", + "changed": null + }, + { + "path": "org/wickedsource/dependencytree/example/CoreTest.java", + "changed": null + } + ] + } + ], + "dependencies": [] +} diff --git a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts index b4032131d..1501c1f9e 100644 --- a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts @@ -1,25 +1,102 @@ -import { async, ComponentFixture, TestBed } from '@angular/core/testing'; - +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { TreeNodeComponent } from './tree-node.component'; +import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('TreeNodeComponent', () => { let component: TreeNodeComponent; let fixture: ComponentFixture; + let http; - beforeEach(async(() => { + beforeEach(() => { TestBed.configureTestingModule({ - declarations: [ TreeNodeComponent ] + declarations: [ + TreeNodeComponent + ], + imports: [ + HttpClientTestingModule, + ], + providers: [], + schemas: [CUSTOM_ELEMENTS_SCHEMA] }) - .compileComponents(); - })); + .compileComponents(); - beforeEach(() => { fixture = TestBed.createComponent(TreeNodeComponent); component = fixture.componentInstance; + http = TestBed.get(HttpTestingController); + component.node = { + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: null, + children: [], + dependencies: [] + }; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); + + it('should generate className class', () => { + expect(component.getClassString({ + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: null, + children: [], + dependencies: [] + })).toEqual('class'); + }); + + it('should generate className package', () => { + expect(component.getClassString({ + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: null, + children: [{}, {}], + dependencies: [] + })).toEqual('package'); + }); + + it('should generate className dependency', () => { + expect(component.getClassString({ + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: null, + children: [], + dependencies: [{}, {}] + })).toEqual('class--dependency'); + }); + + it('should generate className class added', () => { + expect(component.getClassString({ + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: 'ADD', + children: [], + dependencies: [] + })).toEqual('class added'); + }); + + it('should generate className class deleted', () => { + expect(component.getClassString({ + filename: 'org', + path: 'org', + packageName: 'org', + level: 0, + changed: 'DELETE', + children: [], + dependencies: [] + })).toEqual('class deleted'); + }); }); diff --git a/coderadar-ui/tsconfig.json b/coderadar-ui/tsconfig.json index 87eca21af..8da00854b 100644 --- a/coderadar-ui/tsconfig.json +++ b/coderadar-ui/tsconfig.json @@ -9,6 +9,8 @@ "moduleResolution": "node", "emitDecoratorMetadata": true, "experimentalDecorators": true, + "resolveJsonModule": true, + "esModuleInterop": true, "importHelpers": true, "target": "es5", "typeRoots": [ From 96c0df93978fa25cc6783149dab7e59dccb4da74 Mon Sep 17 00:00:00 2001 From: Johannes Teklote Date: Mon, 22 Jun 2020 18:37:25 +0200 Subject: [PATCH 14/16] removed unused variables --- .../dependency-compare/dependency-compare.component.spec.ts | 2 -- .../tree-node/tree-node.component.spec.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts index 89ec222cc..b807cd1a1 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts @@ -15,7 +15,6 @@ let fixture: ComponentFixture; describe('DependencyCompareComponent', () => { let component: DependencyCompareComponent; - let http; beforeEach(() => { TestBed.configureTestingModule({ @@ -38,7 +37,6 @@ describe('DependencyCompareComponent', () => { fixture = TestBed.createComponent(DependencyCompareComponent); component = fixture.componentInstance; - http = TestBed.get(HttpTestingController); routerSpy = spyOn(Router.prototype, 'navigate').and.callFake(() => {}); fixture.detectChanges(); }); diff --git a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts index 1501c1f9e..6b34c9003 100644 --- a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts @@ -6,7 +6,6 @@ import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('TreeNodeComponent', () => { let component: TreeNodeComponent; let fixture: ComponentFixture; - let http; beforeEach(() => { TestBed.configureTestingModule({ @@ -23,7 +22,6 @@ describe('TreeNodeComponent', () => { fixture = TestBed.createComponent(TreeNodeComponent); component = fixture.componentInstance; - http = TestBed.get(HttpTestingController); component.node = { filename: 'org', path: 'org', From 55d2d6d4d3d30c73bf7f40da42fb7f6715ac034e Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 23 Jun 2020 20:34:37 +0200 Subject: [PATCH 15/16] add backend and frontend tests for coverage, fix have to be fixed --- .gitignore | 2 ++ build.gradle | 2 ++ coderadar-core/build.gradle | 16 ++++++++++++ coderadar-dependency-map/build.gradle | 14 ++++++++++ coderadar-graph/build.gradle | 16 ++++++++++++ coderadar-plugin-api/build.gradle | 17 ++++++++++++ .../checkstyle-analyzer-plugin/build.gradle | 16 ++++++++++++ .../loc-analyzer-plugin/build.gradle | 16 ++++++++++++ coderadar-rest/build.gradle | 16 ++++++++++++ coderadar-test/build.gradle | 16 ++++++++++++ coderadar-ui/angular.json | 1 + coderadar-ui/build.gradle | 2 +- coderadar-ui/package-lock.json | 26 +++++++++++++++++++ coderadar-ui/package.json | 1 + .../tree-node/tree-node.component.spec.ts | 2 +- .../src/app/model/file-patterns.spec.ts | 4 +-- coderadar-ui/src/karma.conf.js | 10 +++++-- 17 files changed, 171 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 23ab92a6f..293418df0 100644 --- a/.gitignore +++ b/.gitignore @@ -280,3 +280,5 @@ build coderadar-server/local.application.properties *.class /classes + +coderadar-ui/coverage diff --git a/build.gradle b/build.gradle index d3b0446db..43d810f64 100644 --- a/build.gradle +++ b/build.gradle @@ -36,6 +36,8 @@ sonarqube { property "sonar.sources", "src/main/java, coderadar-ui/src" property "sonar.tests", "src/test/java" property "sonar.exclusions", "coderadar-app/workdir" + property "sonar.javascript.lcov.reportPaths", "coderadar-ui/coverage/coderadar/lcov.info" + property "sonar.coverage.jacoco.xmlReportPaths", "build/reports/jacoco/test/jacocoTestReport.xml" } } diff --git a/coderadar-core/build.gradle b/coderadar-core/build.gradle index a6dd421d3..75aa215a6 100644 --- a/coderadar-core/build.gradle +++ b/coderadar-core/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" dependencies { compile project(':coderadar-plugin-api') @@ -18,6 +19,21 @@ dependencies { testCompile "org.springframework.boot:spring-boot-starter-test:${version_spring_boot}" } +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} + spotless { java { googleJavaFormat() diff --git a/coderadar-dependency-map/build.gradle b/coderadar-dependency-map/build.gradle index c2045fe18..da1f99e58 100644 --- a/coderadar-dependency-map/build.gradle +++ b/coderadar-dependency-map/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" spotless { java { @@ -14,9 +15,22 @@ dependencies { testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2' } +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} + test { useJUnitPlatform() testLogging { events "passed", "skipped", "failed" } + finalizedBy jacocoTestReport } diff --git a/coderadar-graph/build.gradle b/coderadar-graph/build.gradle index 43c2388ba..0a68a45bb 100644 --- a/coderadar-graph/build.gradle +++ b/coderadar-graph/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" spotless { java { @@ -11,3 +12,18 @@ dependencies { compile project(":coderadar-core") testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: version_spring_boot } + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} \ No newline at end of file diff --git a/coderadar-plugin-api/build.gradle b/coderadar-plugin-api/build.gradle index cc2d86639..f6df23cbe 100644 --- a/coderadar-plugin-api/build.gradle +++ b/coderadar-plugin-api/build.gradle @@ -2,6 +2,8 @@ plugins { id 'java' } +apply plugin: "jacoco" + version 'unspecified' sourceCompatibility = 1.8 @@ -13,3 +15,18 @@ repositories { dependencies { testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.4.2' } + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} diff --git a/coderadar-plugins/checkstyle-analyzer-plugin/build.gradle b/coderadar-plugins/checkstyle-analyzer-plugin/build.gradle index 50634ec66..896557927 100644 --- a/coderadar-plugins/checkstyle-analyzer-plugin/build.gradle +++ b/coderadar-plugins/checkstyle-analyzer-plugin/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" spotless { java { @@ -13,4 +14,19 @@ dependencies { compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.12' testCompile group: 'ch.qos.logback', name: 'logback-classic', version: '1.1.7' compile project(":coderadar-plugin-api") +} + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report } \ No newline at end of file diff --git a/coderadar-plugins/loc-analyzer-plugin/build.gradle b/coderadar-plugins/loc-analyzer-plugin/build.gradle index 6ef0e1935..b4c0e9034 100644 --- a/coderadar-plugins/loc-analyzer-plugin/build.gradle +++ b/coderadar-plugins/loc-analyzer-plugin/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" spotless { java { @@ -11,3 +12,18 @@ dependencies { testCompile 'org.assertj:assertj-core:3.5.1' compile project(":coderadar-plugin-api") } + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} \ No newline at end of file diff --git a/coderadar-rest/build.gradle b/coderadar-rest/build.gradle index f1c254b36..56d92f231 100644 --- a/coderadar-rest/build.gradle +++ b/coderadar-rest/build.gradle @@ -1,4 +1,5 @@ apply plugin: "com.diffplug.gradle.spotless" +apply plugin: "jacoco" spotless { java { @@ -11,3 +12,18 @@ dependencies { compile project(":coderadar-core") } + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} \ No newline at end of file diff --git a/coderadar-test/build.gradle b/coderadar-test/build.gradle index 1ca463f66..982ed069e 100644 --- a/coderadar-test/build.gradle +++ b/coderadar-test/build.gradle @@ -3,6 +3,7 @@ import java.text.SimpleDateFormat apply plugin: "com.diffplug.gradle.spotless" apply plugin: "org.asciidoctor.convert" apply plugin: "org.ajoberstar.git-publish" +apply plugin: "jacoco" ext { snippetsDir = file("build/generated-snippets") @@ -80,3 +81,18 @@ jar { } preparePages.dependsOn asciidoctor + +jacocoTestReport { + reports { + xml.enabled true + csv.enabled false + html.enabled false + } +} + +test { + finalizedBy jacocoTestReport // report is always generated after tests run +} +jacocoTestReport { + dependsOn test // tests are required to run before generating the report +} \ No newline at end of file diff --git a/coderadar-ui/angular.json b/coderadar-ui/angular.json index dee9cb360..42fcddd7d 100644 --- a/coderadar-ui/angular.json +++ b/coderadar-ui/angular.json @@ -90,6 +90,7 @@ "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "karmaConfig": "src/karma.conf.js", + "codeCoverage": true, "styles": [ "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.scss" diff --git a/coderadar-ui/build.gradle b/coderadar-ui/build.gradle index b2153d922..ebd0caa16 100644 --- a/coderadar-ui/build.gradle +++ b/coderadar-ui/build.gradle @@ -4,7 +4,7 @@ plugins { } node { - version = '12.13.1' + version = '13.13.0' npmVersion = '6.12.1' download = true } diff --git a/coderadar-ui/package-lock.json b/coderadar-ui/package-lock.json index 711ff507b..6f743386d 100644 --- a/coderadar-ui/package-lock.json +++ b/coderadar-ui/package-lock.json @@ -5316,6 +5316,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", + "integrity": "sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==", + "dev": true + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5973,6 +5979,26 @@ "minimatch": "^3.0.4" } }, + "karma-firefox-launcher": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/karma-firefox-launcher/-/karma-firefox-launcher-1.3.0.tgz", + "integrity": "sha512-Fi7xPhwrRgr+94BnHX0F5dCl1miIW4RHnzjIGxF8GaIEp7rNqX7LSi7ok63VXs3PS/5MQaQMhGxw+bvD+pibBQ==", + "dev": true, + "requires": { + "is-wsl": "^2.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, "karma-jasmine": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-1.1.2.tgz", diff --git a/coderadar-ui/package.json b/coderadar-ui/package.json index d8cf956cd..ceb3886ae 100644 --- a/coderadar-ui/package.json +++ b/coderadar-ui/package.json @@ -74,6 +74,7 @@ "karma": "~3.1.1", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "^2.1.0", + "karma-firefox-launcher": "^1.3.0", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.4.2", diff --git a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts index 6b34c9003..900f9d2be 100644 --- a/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/tree-node/tree-node.component.spec.ts @@ -1,6 +1,6 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { TreeNodeComponent } from './tree-node.component'; -import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing'; +import {HttpClientTestingModule} from '@angular/common/http/testing'; import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'; describe('TreeNodeComponent', () => { diff --git a/coderadar-ui/src/app/model/file-patterns.spec.ts b/coderadar-ui/src/app/model/file-patterns.spec.ts index adf468771..cee77419b 100644 --- a/coderadar-ui/src/app/model/file-patterns.spec.ts +++ b/coderadar-ui/src/app/model/file-patterns.spec.ts @@ -1,7 +1,7 @@ -import {FilePatterns} from './file-pattern'; +import {FilePattern} from './file-pattern'; describe('FilePatterns', () => { it('should create an instance', () => { - expect(new FilePatterns()).toBeTruthy(); + expect(new FilePattern()).toBeTruthy(); }); }); diff --git a/coderadar-ui/src/karma.conf.js b/coderadar-ui/src/karma.conf.js index 4330e98c1..d6df93082 100644 --- a/coderadar-ui/src/karma.conf.js +++ b/coderadar-ui/src/karma.conf.js @@ -5,10 +5,16 @@ module.exports = function (config) { config.set({ autoWatch: true, basePath: "", - browsers: ["Chrome"], + browsers: ["FirefoxHeadless"], client: { clearContext: false, // leave Jasmine Spec Runner output visible in browser }, + customLaunchers: { + 'FirefoxHeadless': { + base: 'Firefox', + flags: ['-headless'] + } + }, colors: true, coverageIstanbulReporter: { dir: require("path").join(__dirname, "../coverage/coderadar"), @@ -19,7 +25,7 @@ module.exports = function (config) { logLevel: config.LOG_INFO, plugins: [ require("karma-jasmine"), - require("karma-chrome-launcher"), + require("karma-firefox-launcher"), require("karma-jasmine-html-reporter"), require("karma-coverage-istanbul-reporter"), require("@angular-devkit/build-angular/plugins/karma"), From b9fc9eeb03bb611ac452f002e2516b7eba80ef29 Mon Sep 17 00:00:00 2001 From: JohannesTeklote Date: Tue, 30 Jun 2020 16:54:48 +0200 Subject: [PATCH 16/16] remove duplicate code --- .../dependency-compare.component.spec.ts | 31 +++-------- coderadar-ui/src/app/service/utils.service.ts | 53 ++++++++++++++++++- .../main-dashboard.component.ts | 40 +++----------- .../list-view/list-view.component.ts | 47 +++------------- 4 files changed, 71 insertions(+), 100 deletions(-) diff --git a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts index b807cd1a1..03202530b 100644 --- a/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts +++ b/coderadar-ui/src/app/levelized-structure-map/dependency-compare/dependency-compare.component.spec.ts @@ -12,19 +12,16 @@ import {AppComponent} from '../../app.component'; let routerSpy; let fixture: ComponentFixture; +const declarations = [DependencyCompareComponent, TreeNodeComponent]; +const imports = [HttpClientTestingModule, RouterTestingModule]; describe('DependencyCompareComponent', () => { let component: DependencyCompareComponent; beforeEach(() => { TestBed.configureTestingModule({ - declarations: [ - DependencyCompareComponent, - ], - imports: [ - HttpClientTestingModule, - RouterTestingModule - ], + declarations, + imports, providers: [ {provide: Router}, {provide: ActivatedRoute, useValue: { @@ -52,14 +49,8 @@ describe('DependencyCompareComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - declarations: [ - DependencyCompareComponent, - TreeNodeComponent - ], - imports: [ - HttpClientTestingModule, - RouterTestingModule - ], + declarations, + imports, providers: [ {provide: Router}, { @@ -111,14 +102,8 @@ describe('DependencyCompareComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ - declarations: [ - DependencyCompareComponent, - TreeNodeComponent - ], - imports: [ - HttpClientTestingModule, - RouterTestingModule - ], + declarations, + imports, providers: [ {provide: Router}, { diff --git a/coderadar-ui/src/app/service/utils.service.ts b/coderadar-ui/src/app/service/utils.service.ts index c58f73e90..c1881f612 100644 --- a/coderadar-ui/src/app/service/utils.service.ts +++ b/coderadar-ui/src/app/service/utils.service.ts @@ -4,8 +4,9 @@ import {Title} from "@angular/platform-browser"; import {UserService} from "./user.service"; import {Router} from "@angular/router"; import {Project} from "../model/project"; -import {FORBIDDEN, NOT_FOUND} from "http-status-codes"; +import {FORBIDDEN, NOT_FOUND, UNPROCESSABLE_ENTITY} from "http-status-codes"; import {AppComponent} from "../app.component"; +import {MatSnackBar} from "@angular/material/snack-bar"; @Injectable({ providedIn: 'root' @@ -13,7 +14,7 @@ import {AppComponent} from "../app.component"; export class UtilsService { constructor(private projectService: ProjectService, private titleService: Title, private userService: UserService, - private router: Router) { + private router: Router, private snackBar: MatSnackBar) { } /** @@ -36,4 +37,52 @@ export class UtilsService { } }); } + + public startAnalysis(id: number, branch: string, ) { + return this.projectService.startAnalyzingJob(id, branch).then(() => { + this.openSnackBar('Analysis started!', '🞩'); + }).catch(error => { + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.projectService.startAnalyzingJob(id, 'master')); + } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { + if (error.error.errorMessage === 'Cannot analyze project without analyzers') { + this.openSnackBar('Cannot analyze, no analyzers configured for this project!', '🞩'); + } else if (error.error.errorMessage === 'Cannot analyze project without file patterns') { + this.openSnackBar('Cannot analyze, no file patterns configured for this project!', '🞩'); + } else { + this.openSnackBar('Analysis cannot be started! Try again later!', '🞩'); + } + } + }); + } + + resetAnalysis(id: number) { + this.projectService.resetAnalysis(id).then(() => { + this.openSnackBar('Analysis results deleted!', '🞩'); + }).catch(error => { + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.projectService.resetAnalysis(id)); + } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { + this.openSnackBar('Analysis results cannot be deleted! Try again later!', '🞩'); + } + }); + } + + stopAnalysis(id: number) { + this.projectService.stopAnalyzingJob(id).then(() => { + this.openSnackBar('Analysis stopped!', '🞩'); + }).catch(error => { + if (error.status && error.status === FORBIDDEN) { + this.userService.refresh(() => this.projectService.stopAnalyzingJob(id)); + } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { + this.openSnackBar('Analysis stopped!', '🞩'); + } + }); + } + + private openSnackBar(message: string, action: string) { + this.snackBar.open(message, action, { + duration: 4000, + }); + } } diff --git a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.ts b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.ts index 0cd440f7c..94535a9cb 100644 --- a/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.ts +++ b/coderadar-ui/src/app/view/main-dashboard/main-dashboard.component.ts @@ -8,6 +8,7 @@ import {Title} from '@angular/platform-browser'; import {AppComponent} from '../../app.component'; import {MatDialog, MatSnackBar} from '@angular/material'; import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; +import {UtilsService} from '../../service/utils.service'; @Component({ selector: 'app-main-dashboard', @@ -23,7 +24,8 @@ export class MainDashboardComponent implements OnInit { waiting = false; constructor(private snackBar: MatSnackBar, private titleService: Title, private userService: UserService, - private router: Router, private projectService: ProjectService, private dialog: MatDialog) { + private router: Router, private projectService: ProjectService, private dialog: MatDialog, + private utilsService: UtilsService) { titleService.setTitle('Coderadar - Dashboard'); } @@ -89,33 +91,11 @@ export class MainDashboardComponent implements OnInit { } startAnalysis(id: number) { - this.projectService.startAnalyzingJob(id, 'master').then(() => { - this.openSnackBar('Analysis started!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.startAnalyzingJob(id, 'master')); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - if (error.error.errorMessage === 'Cannot analyze project without analyzers') { - this.openSnackBar('Cannot analyze, no analyzers configured for this project!', '🞩'); - } else if (error.error.errorMessage === 'Cannot analyze project without file patterns') { - this.openSnackBar('Cannot analyze, no file patterns configured for this project!', '🞩'); - } else { - this.openSnackBar('Analysis cannot be started! Try again later!', '🞩'); - } - } - }); + this.utilsService.startAnalysis(id, 'master'); } resetAnalysis(id: number) { - this.projectService.resetAnalysis(id).then(() => { - this.openSnackBar('Analysis results deleted!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.resetAnalysis(id)); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - this.openSnackBar('Analysis results cannot be deleted! Try again later!', '🞩'); - } - }); + this.utilsService.resetAnalysis(id); } openSnackBar(message: string, action: string) { @@ -125,15 +105,7 @@ export class MainDashboardComponent implements OnInit { } stopAnalysis(id: number) { - this.projectService.stopAnalyzingJob(id).then(() => { - this.openSnackBar('Analysis stopped!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.stopAnalyzingJob(id)); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - this.openSnackBar('Analysis stopped!', '🞩'); - } - }); + this.utilsService.stopAnalysis(id); } } diff --git a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts index 84c85f5f8..03905f416 100644 --- a/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts +++ b/coderadar-ui/src/app/view/project-dashboard/list-view/list-view.component.ts @@ -16,7 +16,8 @@ import {ProjectService} from '../../../service/project.service'; import {Store} from '@ngrx/store'; import {Branch} from '../../../model/branch'; import {loadAvailableMetrics} from '../../../city-map/visualization/visualization.actions'; -import {Contributor} from "../../../model/contributor"; +import {Contributor} from '../../../model/contributor'; +import {UtilsService} from '../../../service/utils.service'; @Component({ selector: 'app-commit-list', @@ -59,7 +60,7 @@ export class ListViewComponent implements OnInit, OnChanges { constructor(private snackBar: MatSnackBar, private router: Router, private userService: UserService, private titleService: Title, private projectService: ProjectService, private route: ActivatedRoute, private store: Store, - private cityEffects: AppEffects) { + private cityEffects: AppEffects, private utilsService: UtilsService) { this.project = new Project(); this.commits = []; this.commitsFiltered = []; @@ -79,27 +80,7 @@ export class ListViewComponent implements OnInit, OnChanges { } startAnalysis(id: number, branch: string) { - this.projectService.startAnalyzingJob(id, branch).then(() => { - this.openSnackBar('Analysis started!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.startAnalyzingJob(id, branch)); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - if (error.error.errorMessage === 'Cannot analyze project without analyzers') { - this.openSnackBar('Cannot analyze, no analyzers configured for this project!', '🞩'); - } else if (error.error.errorMessage === 'Cannot analyze project without file patterns') { - this.openSnackBar('Cannot analyze, no file patterns configured for this project!', '🞩'); - } else { - this.openSnackBar('Analysis cannot be started! Try again later!', '🞩'); - } - } - }); - } - - openSnackBar(message: string, action: string) { - this.snackBar.open(message, action, { - duration: 4000, - }); + this.utilsService.startAnalysis(id, branch); } /** @@ -137,27 +118,11 @@ export class ListViewComponent implements OnInit, OnChanges { resetAnalysis(id: number) { this.commitsAnalyzed = 0; - this.projectService.resetAnalysis(id).then(() => { - this.openSnackBar('Analysis results deleted!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.resetAnalysis(id)); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - this.openSnackBar('Analysis results cannot be deleted! Try again later!', '🞩'); - } - }); + this.utilsService.resetAnalysis(id); } stopAnalysis(id: number) { - this.projectService.stopAnalyzingJob(id).then(() => { - this.openSnackBar('Analysis stopped!', '🞩'); - }).catch(error => { - if (error.status && error.status === FORBIDDEN) { - this.userService.refresh(() => this.projectService.stopAnalyzingJob(id)); - } else if (error.status && error.status === UNPROCESSABLE_ENTITY) { - this.openSnackBar('Analysis stopped!', '🞩'); - } - }); + this.utilsService.stopAnalysis(id); } selectCard(selectedCommit: Commit): void {
    Metric values for this file.
    Metric Value