diff --git a/ui/package-lock.json b/ui/package-lock.json index 420637b9c..68cd64ea6 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -19,9 +19,8 @@ "@start9labs/emver": "0.1.5", "ajv": "^6.12.6", "core-js": "^3.17.2", + "fast-json-patch": "^3.1.0", "fuse.js": "^6.4.6", - "json-pointer": "^0.6.1", - "jsonpointerx": "^1.1.4", "marked": "3.0.2", "mustache": "^4.2.0", "ng-qrcode": "^5.0.0", @@ -96,16 +95,16 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.9.tgz", - "integrity": "sha512-A8yddhGpUnrTcA4WCiUxwklFbfkNMfvlST5CT9VLVjz4MEwwOpdaNmIF39+NMr4XTgOBbP6Bq/t3ciIsB5+/Uw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.11.tgz", + "integrity": "sha512-chMVR0ZEw0sRlny5eXZQ83dK0KNOzBJaa6ERwIubuQLB555DWpkn9L0E2EnRb7qwe2k+Uggx9GiZD2Nq9z+88A==", "dev": true, "dependencies": { "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1202.9", - "@angular-devkit/build-optimizer": "0.1202.9", - "@angular-devkit/build-webpack": "0.1202.9", - "@angular-devkit/core": "12.2.9", + "@angular-devkit/architect": "0.1202.11", + "@angular-devkit/build-optimizer": "0.1202.11", + "@angular-devkit/build-webpack": "0.1202.11", + "@angular-devkit/core": "12.2.11", "@babel/core": "7.14.8", "@babel/generator": "7.14.8", "@babel/helper-annotate-as-pure": "7.14.5", @@ -117,7 +116,7 @@ "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.2.9", + "@ngtools/webpack": "12.2.11", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", @@ -126,10 +125,10 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "9.0.1", "core-js": "3.16.0", - "critters": "0.0.10", + "critters": "0.0.11", "css-loader": "6.2.0", "css-minimizer-webpack-plugin": "3.0.2", - "esbuild-wasm": "0.13.4", + "esbuild-wasm": "0.13.8", "find-cache-dir": "3.3.1", "glob": "7.1.7", "https-proxy-agent": "5.0.0", @@ -139,7 +138,7 @@ "less-loader": "10.0.1", "license-webpack-plugin": "2.3.20", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "2.2.1", + "mini-css-extract-plugin": "2.4.2", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", @@ -173,11 +172,11 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.13.4" + "esbuild": "0.13.8" }, "peerDependencies": { "@angular/compiler-cli": "^12.0.0", @@ -215,24 +214,24 @@ } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/build-angular/node_modules/@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "dependencies": { "ajv": "8.6.2", @@ -244,7 +243,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -401,9 +400,9 @@ } }, "node_modules/@angular-devkit/build-optimizer": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.9.tgz", - "integrity": "sha512-yDR7f2fRWzJdqa7U0eIYu5fCRIae3tcSsYE18UPiV5ypGK3talMIpZ1ibkklr9Nm9SAB6Js1/EdVBGB5jo3R9A==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.11.tgz", + "integrity": "sha512-3iU2q8QYrF7bSxffcrvYrvs9BQrLGHLe3MFyNfU3ps38c6CmnMsnR3RODmDZZgkgk9jN45y+WGmkF46ydiOHtA==", "dev": true, "dependencies": { "source-map": "0.7.3", @@ -415,7 +414,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { @@ -428,17 +427,17 @@ } }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.9.tgz", - "integrity": "sha512-UKVxFTRSyDpQDxM1yk1OJiynhbryrbsy+WgZ/gFcnZcrRGtrpAWOq+uMXfq05zET6CNqpOKBnxy9LSHAwXR5Ig==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.11.tgz", + "integrity": "sha512-xex0/8G2o9v0gr+oVAc3QdRyPKTBWmmhOR3K3fj4a7gvhpnE9ByHxemzflZcDwpE8K7YkMX8kTlFjkog/dSXNw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1202.9", + "@angular-devkit/architect": "0.1202.11", "rxjs": "6.6.7" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { @@ -447,24 +446,24 @@ } }, "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/build-webpack/node_modules/@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "dependencies": { "ajv": "8.6.2", @@ -476,7 +475,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -564,25 +563,25 @@ "peer": true }, "node_modules/@angular-devkit/schematics": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.9.tgz", - "integrity": "sha512-OcMDCdlIxiir8XntrNXdXEPi9/8BRx54oYZeRosr0sJZlz4pPzsHs36t5uX2DURYYMkNNMaBnf2luUIC+77ZsA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.11.tgz", + "integrity": "sha512-7ucnRGGRGsWqXhvFuK7oAgXMkWO58jmA9CQzXTWCNT5EFCUeyBj2eNNndI4NlWE/LgeKYn7UhUNREzdBrcDiKw==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "ora": "5.4.1", "rxjs": "6.6.7" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular-devkit/schematics/node_modules/@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "dependencies": { "ajv": "8.6.2", @@ -594,7 +593,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -638,16 +637,16 @@ "dev": true }, "node_modules/@angular/cli": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.9.tgz", - "integrity": "sha512-aYAb6LkqIpKOZE8Kkhst5NNWpM4W1o1mmPTt6Nm6b/4wVLSC+mDp1IBCJSihDWysDetXA5J3kNJ4R2XnpHpIKw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.11.tgz", + "integrity": "sha512-zstz/oH0BBWC1n1a6oSFLSaSCDUCoaawG8a83E61MN65wYaCuwIW+Z7Lz3FiF7P4Ce16T56ZwJPIA5SjS7KBhg==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1202.9", - "@angular-devkit/core": "12.2.9", - "@angular-devkit/schematics": "12.2.9", - "@schematics/angular": "12.2.9", + "@angular-devkit/architect": "0.1202.11", + "@angular-devkit/core": "12.2.11", + "@angular-devkit/schematics": "12.2.11", + "@schematics/angular": "12.2.11", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.2", @@ -669,29 +668,29 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/cli/node_modules/@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@angular/cli/node_modules/@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "dependencies": { "ajv": "8.6.2", @@ -703,7 +702,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -747,9 +746,9 @@ "dev": true }, "node_modules/@angular/common": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.9.tgz", - "integrity": "sha512-V7leBrq80CSJWHWVE3LEL6Z6onP2ibsITY3++86Uddz8AxzfOtNRslbs4/qCWc82nT7CIEn8a28NLP/BdOwNew==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.11.tgz", + "integrity": "sha512-/3QS5YaHfm2taJYUVes076ZMpL2GRYVW3HDbHXiRNjoC9EMqQ7ahRD9RPFC8XUk709JuqzonE3bB+N5Ld3mzIA==", "dependencies": { "tslib": "^2.2.0" }, @@ -757,14 +756,14 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/core": "12.2.9", + "@angular/core": "12.2.11", "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@angular/compiler": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.9.tgz", - "integrity": "sha512-87Qn8HuQ+6ECUnapQxpgIvwuUs6i1oM6lmLSKrYe0/WpIzTabB30eXWCKfvqYrv516cMdrq+nLCIXJx1tPqzSw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.11.tgz", + "integrity": "sha512-78b5Uf+79gOKEyF/ixFAGJANNHnhueofSxgToBmJkTTpqTX6Xzdfzw8W+ehpJADp52eBjmZ+rv7b9sgBsiJ1tg==", "dependencies": { "tslib": "^2.2.0" }, @@ -773,9 +772,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.9.tgz", - "integrity": "sha512-jswNKFm3MNcY4oDO/8HcFLLVxDEcTOyqp9CeKzlbjBKb04Ntjaqpm9CKzlxLOtJJj9BSMHTz1CjE0hSNv76NPg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.11.tgz", + "integrity": "sha512-mOEyAQQS28omIGOw71jXnAI+GLxLVHhsa5vcS9Cy+HLfgJzysTngwdKNO7iJvalsyAsb9EjJ3R82XRKKJspV0g==", "dev": true, "dependencies": { "@babel/core": "^7.8.6", @@ -803,7 +802,7 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/compiler": "12.2.9", + "@angular/compiler": "12.2.11", "typescript": ">=4.2.3 <4.4" } }, @@ -817,9 +816,9 @@ } }, "node_modules/@angular/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.9.tgz", - "integrity": "sha512-RgUmn0YM4GMcViTEkWxDVGCyz8+subF+98dJie+bwJszATMxRK2TSINEg2X/Y0LgNxpRt4mKzIK2kz62oaDH7g==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.11.tgz", + "integrity": "sha512-wzCFtVFdQlXJlzWpWNz3w8cDzhYzuO1qDqey15Wd4zPR8c8pDx3/XCZXSziskaUzA+fVzgHHSwQnOi9XSFFjzA==", "dependencies": { "tslib": "^2.2.0" }, @@ -832,9 +831,9 @@ } }, "node_modules/@angular/forms": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.9.tgz", - "integrity": "sha512-DugLX9h/hmphjdx0wGOp9koEpzFZpcMiYXfYO2rLyzc1NwopAcbSJTCvU+adfShZgh/b5v+7rb5n10JROj/ODw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.11.tgz", + "integrity": "sha512-mylti7rtz2FcM3hwPSj2JnX8y8BrXmzrjEWjcLlXmwoMzv/M3vY5HlgKzOmPN03bVgxC7b7EFfGMXfJ3YoPWpg==", "dependencies": { "tslib": "^2.2.0" }, @@ -842,25 +841,25 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.9", - "@angular/core": "12.2.9", - "@angular/platform-browser": "12.2.9", + "@angular/common": "12.2.11", + "@angular/core": "12.2.11", + "@angular/platform-browser": "12.2.11", "rxjs": "^6.5.3 || ^7.0.0" } }, "node_modules/@angular/language-service": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.9.tgz", - "integrity": "sha512-q6WH8CxS4nXKnIR/imQbRYTdP0PW63tDogzlol6gnB/jEmGgmQJphYRVeDqr5owIxuzCB06JkWXPVsyHY3yHvA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.11.tgz", + "integrity": "sha512-ag0YlWvVmNQWKGB14SFgaPcWuYQJpr8OrD2JoY91P+WWpv6oawemHRVF1rvFjmPf9byXv4mnPK1h36qI7EJSpw==", "dev": true, "engines": { "node": "^12.14.1 || >=14.0.0" } }, "node_modules/@angular/platform-browser": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.9.tgz", - "integrity": "sha512-moO5Fz4b15EWYQthOaQThmy0gm/d5W/+9RmCiZs2ZHiVjuC358lnFy626VdkZmJ/MLwMwqHpyQS9JhCYOZGOdw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.11.tgz", + "integrity": "sha512-uJEnVOK3M1SrCWJoW2jFx5F8pUCbSISai7dbTBVc+/Gx6e9ZuNzBVOooLvSzV96DurhTV7xGSXR5Ry75UNZ48A==", "dependencies": { "tslib": "^2.2.0" }, @@ -868,9 +867,9 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/animations": "12.2.9", - "@angular/common": "12.2.9", - "@angular/core": "12.2.9" + "@angular/animations": "12.2.11", + "@angular/common": "12.2.11", + "@angular/core": "12.2.11" }, "peerDependenciesMeta": { "@angular/animations": { @@ -879,9 +878,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.9.tgz", - "integrity": "sha512-bBNsq2rrL08IaVCps9j54iu3Xoxf1PkjtbEyP5EqXbjccsF7KDM32+5Cjjf0AwYtzaWbjXPSP7awAXpCCsqSdA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.11.tgz", + "integrity": "sha512-TF80norTsBbJiUsqo6IUNALV2W1YkEa5QAB6RkTrb1K/V6oGcWcGfqSyCMbjRHPEZTwiAzz4cYEmip5kFtE+oQ==", "dependencies": { "tslib": "^2.2.0" }, @@ -889,16 +888,16 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.9", - "@angular/compiler": "12.2.9", - "@angular/core": "12.2.9", - "@angular/platform-browser": "12.2.9" + "@angular/common": "12.2.11", + "@angular/compiler": "12.2.11", + "@angular/core": "12.2.11", + "@angular/platform-browser": "12.2.11" } }, "node_modules/@angular/router": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.9.tgz", - "integrity": "sha512-Qh7Ugh6N7PIK4+ydRPHiKy8Q3wlB/ieXVyqYgkNfGFZ+QtNHpWgWBUXJuGPnmKk0Yn02EwSPOuPWEHV92rayhw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.11.tgz", + "integrity": "sha512-iqQujHKLDpE+xJwXqRY1U83xfDnmb7LIQ0UL6ORSw6mqDTxIeMXfVKRqux1dIlWX+ysU0uTHuug49R8T9q0fhg==", "dependencies": { "tslib": "^2.2.0" }, @@ -906,9 +905,9 @@ "node": "^12.14.1 || >=14.0.0" }, "peerDependencies": { - "@angular/common": "12.2.9", - "@angular/core": "12.2.9", - "@angular/platform-browser": "12.2.9", + "@angular/common": "12.2.11", + "@angular/core": "12.2.11", + "@angular/platform-browser": "12.2.11", "rxjs": "^6.5.3 || ^7.0.0" } }, @@ -2554,9 +2553,9 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2661,9 +2660,9 @@ } }, "node_modules/@cspotcode/source-map-support": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", - "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "dependencies": { "@cspotcode/source-map-consumer": "0.8.0" @@ -2691,11 +2690,11 @@ } }, "node_modules/@ionic/angular": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.8.3.tgz", - "integrity": "sha512-0girV4YrJEZ/PMFNmIOHQjsFfoqufOotpSx4LEA7jPqiUDoc7C5H5mqdzVPUY6aAhA9db3ZUO1fJ7GYd/fV2bg==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.8.4.tgz", + "integrity": "sha512-pvy7qOTVih3mqcyIV6C3BK8seeZOEoanRFw+Z5m+soXDcvgrouHBBAKzURu2RUx8uDZqlX38Pkn89ontvqIZUg==", "dependencies": { - "@ionic/core": "5.8.3", + "@ionic/core": "5.8.4", "tslib": "^1.9.3" }, "peerDependencies": { @@ -2787,9 +2786,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@ionic/core": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.8.3.tgz", - "integrity": "sha512-wKDKjLV4QsWlxw4tWEhUtGtLgSdJvNdtMyVRROWHHSOA1V3t5Wsktt09Xroi14hPOdjR+LxCM5sWcuHep4lz5g==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.8.4.tgz", + "integrity": "sha512-ioaH7wXAtexcpk23III0KArjSXStkpPrpZ5BCNkyter3EbOmDVd8XIXRcT86zRG68rbGI7Pd9GrugxeaDyMk/g==", "dependencies": { "@stencil/core": "^2.4.0", "ionicons": "^5.5.3", @@ -2854,13 +2853,13 @@ } }, "node_modules/@ngtools/webpack": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.9.tgz", - "integrity": "sha512-IQkzvompjLdWbZ+33crtyVF8huF53C36k1FNFdq3x2j4Kw4ssDd6K9fq3aZpRCK0J8O79HJ5j4QH6ZtWjwajLg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.11.tgz", + "integrity": "sha512-OgNClb9EhYR9lhVRR1RnWT1Xh75aI70IB4eQaDSiVOkBc6aymLzeskZ2WmkZWsDGlJBLOamnoB0XUPuU1GpmrQ==", "dev": true, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" }, "peerDependencies": { @@ -2977,25 +2976,25 @@ } }, "node_modules/@schematics/angular": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.9.tgz", - "integrity": "sha512-IIczXVwegREekub0+bBxOc0dDL7j8p5rG6rB/2btJRR+tg04milP+BkvnQgksmIkW1OcZ5beRSB37R3jY/W/PA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.11.tgz", + "integrity": "sha512-Xou0CSSD88LVxfl7GzqY3TYUG6mM4cN61zE7gTzqshCx3rR0JkbLn0Z+q67KhxYUs9qiPT5MHL0W06nJ0iLzDg==", "dev": true, "dependencies": { - "@angular-devkit/core": "12.2.9", - "@angular-devkit/schematics": "12.2.9", + "@angular-devkit/core": "12.2.11", + "@angular-devkit/schematics": "12.2.11", "jsonc-parser": "3.0.0" }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, "node_modules/@schematics/angular/node_modules/@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "dependencies": { "ajv": "8.6.2", @@ -3007,7 +3006,7 @@ }, "engines": { "node": "^12.14.1 || >=14.0.0", - "npm": "^6.11.0 || ^7.5.6", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", "yarn": ">= 1.13.0" } }, @@ -3056,9 +3055,9 @@ "integrity": "sha512-1dhiG03VkfEwSLx/JPKVms6srAbYFQgwfSGhwpUKMDliMXuAHGVaueStmqzVxn3JpH/HEVz0QW8w/PXHqjdiIg==" }, "node_modules/@stencil/core": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.8.1.tgz", - "integrity": "sha512-iv9J6oLO/lv7/aO45M05yw3pp1J7olY400vlOZgdMVs3s5zHfalY1ZPYM0KyqU4+7DZuadKYbd0aQZ/g2PInZw==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.9.0.tgz", + "integrity": "sha512-kY3xYolZoJO1MKslL0NQccHy72R3TIl1prHgfmIrEoGcnMgc6uiskdWaGMuI5/sCGz9T+QuTVz76B1H2ySyBZg==", "bin": { "stencil": "bin/stencil" }, @@ -3136,9 +3135,9 @@ "dev": true }, "node_modules/@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -3158,9 +3157,9 @@ "dev": true }, "node_modules/@types/marked": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.1.tgz", - "integrity": "sha512-jry/WUAC511P2NBCeiCkfTRCN2VXobeeQa8p8gImOYsRfnuIVfeEsqOJ1pk+CzCwfMCdv3dkTQRCYaNkkFGtxw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.2.tgz", + "integrity": "sha512-mGYI9qFs+i5eYaytWKBbtEMbIkrXGKuhsDpDcj70ogKS2gk1NmgEy9Z3VEKz922Lfms6eITXXqv5idlX7C/irw==", "dev": true }, "node_modules/@types/minimatch": { @@ -3176,9 +3175,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "version": "16.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.2.tgz", + "integrity": "sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw==", "dev": true }, "node_modules/@types/parse-json": { @@ -3849,6 +3848,12 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/autoprefixer/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -4198,16 +4203,16 @@ } }, "node_modules/browserslist": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz", - "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" @@ -4388,9 +4393,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001265", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz", - "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==", + "version": "1.0.30001270", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001270.tgz", + "integrity": "sha512-TcIC7AyNWXhcOmv2KftOl1ShFAaHQYcB/EPL/hEyMrcS7ZX0/DvV1aoy6BzV0+16wTpoAyTMGDNAJfSqS/rz7A==", "dev": true, "funding": { "type": "opencollective", @@ -4707,9 +4712,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/colord": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.8.0.tgz", - "integrity": "sha512-kNkVV4KFta3TYQv0bzs4xNwLaeag261pxgzGQSh4cQ1rEhYjcTJfFRP0SDlbhLONg0eSoLzrDd79PosjbltufA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", + "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==", "dev": true }, "node_modules/colorette": { @@ -4936,9 +4941,9 @@ } }, "node_modules/core-js": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.2.tgz", - "integrity": "sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -4946,9 +4951,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "dependencies": { "browserslist": "^4.17.3", @@ -4997,15 +5002,16 @@ "dev": true }, "node_modules/critters": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.10.tgz", - "integrity": "sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.11.tgz", + "integrity": "sha512-E1XlhQTmf0Y2Q6hYVrXKxibxps2LNarpZaDCRNaxA1LA5LxlgoIPN0rcOzFVlwRD47iNYhVtD4DmGtgr2edrlQ==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "css": "^3.0.0", + "css-select": "^1.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", "pretty-bytes": "^5.3.0" } }, @@ -5073,6 +5079,24 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "node_modules/critters/node_modules/postcss": { + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "dev": true, + "dependencies": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^0.6.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, "node_modules/critters/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -5123,14 +5147,15 @@ } }, "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "dependencies": { - "inherits": "^2.0.4", + "inherits": "^2.0.3", "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" } }, "node_modules/css-blank-pseudo": { @@ -5148,6 +5173,12 @@ "node": ">=6.0.0" } }, + "node_modules/css-blank-pseudo/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/css-blank-pseudo/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -5226,6 +5257,12 @@ "node": ">=4" } }, + "node_modules/css-has-pseudo/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/css-has-pseudo/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -5361,40 +5398,6 @@ "css": "^2.0.0" } }, - "node_modules/css-parse/node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-parse/node_modules/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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-parse/node_modules/source-map-resolve": { - "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, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/css-prefers-color-scheme": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", @@ -5410,6 +5413,12 @@ "node": ">=6.0.0" } }, + "node_modules/css-prefers-color-scheme/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/css-prefers-color-scheme/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -5947,9 +5956,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.864", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz", - "integrity": "sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw==", + "version": "1.3.876", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.876.tgz", + "integrity": "sha512-a6LR4738psrubCtGx5HxM/gNlrIsh4eFTNnokgOqvQo81GWd07lLcOjITkAXn2y4lIp18vgS+DGnehj+/oEAxQ==", "dev": true }, "node_modules/emoji-regex": { @@ -6071,9 +6080,9 @@ "peer": true }, "node_modules/esbuild": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.4.tgz", - "integrity": "sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", + "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -6081,28 +6090,29 @@ "esbuild": "bin/esbuild" }, "optionalDependencies": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" + "esbuild-android-arm64": "0.13.8", + "esbuild-darwin-64": "0.13.8", + "esbuild-darwin-arm64": "0.13.8", + "esbuild-freebsd-64": "0.13.8", + "esbuild-freebsd-arm64": "0.13.8", + "esbuild-linux-32": "0.13.8", + "esbuild-linux-64": "0.13.8", + "esbuild-linux-arm": "0.13.8", + "esbuild-linux-arm64": "0.13.8", + "esbuild-linux-mips64le": "0.13.8", + "esbuild-linux-ppc64le": "0.13.8", + "esbuild-netbsd-64": "0.13.8", + "esbuild-openbsd-64": "0.13.8", + "esbuild-sunos-64": "0.13.8", + "esbuild-windows-32": "0.13.8", + "esbuild-windows-64": "0.13.8", + "esbuild-windows-arm64": "0.13.8" } }, "node_modules/esbuild-android-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz", - "integrity": "sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", + "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", "cpu": [ "arm64" ], @@ -6113,9 +6123,9 @@ ] }, "node_modules/esbuild-darwin-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz", - "integrity": "sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", + "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", "cpu": [ "x64" ], @@ -6126,9 +6136,9 @@ ] }, "node_modules/esbuild-darwin-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz", - "integrity": "sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", + "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", "cpu": [ "arm64" ], @@ -6139,9 +6149,9 @@ ] }, "node_modules/esbuild-freebsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz", - "integrity": "sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", + "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", "cpu": [ "x64" ], @@ -6152,9 +6162,9 @@ ] }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz", - "integrity": "sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", + "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", "cpu": [ "arm64" ], @@ -6165,9 +6175,9 @@ ] }, "node_modules/esbuild-linux-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz", - "integrity": "sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", + "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", "cpu": [ "ia32" ], @@ -6178,9 +6188,9 @@ ] }, "node_modules/esbuild-linux-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz", - "integrity": "sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", + "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", "cpu": [ "x64" ], @@ -6191,9 +6201,9 @@ ] }, "node_modules/esbuild-linux-arm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz", - "integrity": "sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", + "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", "cpu": [ "arm" ], @@ -6204,9 +6214,9 @@ ] }, "node_modules/esbuild-linux-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz", - "integrity": "sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", + "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", "cpu": [ "arm64" ], @@ -6217,9 +6227,9 @@ ] }, "node_modules/esbuild-linux-mips64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz", - "integrity": "sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", + "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", "cpu": [ "mips64el" ], @@ -6230,9 +6240,9 @@ ] }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz", - "integrity": "sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", + "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", "cpu": [ "ppc64" ], @@ -6242,10 +6252,23 @@ "linux" ] }, + "node_modules/esbuild-netbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", + "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ] + }, "node_modules/esbuild-openbsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz", - "integrity": "sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", + "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", "cpu": [ "x64" ], @@ -6256,9 +6279,9 @@ ] }, "node_modules/esbuild-sunos-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz", - "integrity": "sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", + "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", "cpu": [ "x64" ], @@ -6269,9 +6292,9 @@ ] }, "node_modules/esbuild-wasm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.4.tgz", - "integrity": "sha512-2dN7njr9/2QzKLqbTEgXr73vDbSqffdJMv4EfaMQoy04cej0owbGHH5apPgED0wN9I5e7sBT0/Q81tVy3wQBlA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.8.tgz", + "integrity": "sha512-UbD+3nloiSpJWXTCInZQrqPe8Y+RLfDkY/5kEHiXsw/lmaEvibe69qTzQu16m5R9je/0bF7VYQ5jaEOq0z9lLA==", "dev": true, "bin": { "esbuild": "bin/esbuild" @@ -6281,9 +6304,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz", - "integrity": "sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", + "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", "cpu": [ "ia32" ], @@ -6294,9 +6317,9 @@ ] }, "node_modules/esbuild-windows-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz", - "integrity": "sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", + "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", "cpu": [ "x64" ], @@ -6307,9 +6330,9 @@ ] }, "node_modules/esbuild-windows-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz", - "integrity": "sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", + "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", "cpu": [ "arm64" ], @@ -6791,6 +6814,11 @@ "node": ">=8" } }, + "node_modules/fast-json-patch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz", + "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA==" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -6950,11 +6978,6 @@ "node": ">=0.10.0" } }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -8209,9 +8232,9 @@ "dev": true }, "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -8490,9 +8513,9 @@ "dev": true }, "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true, "engines": { "node": ">=8" @@ -8523,9 +8546,9 @@ } }, "node_modules/jest-worker": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", - "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "dev": true, "dependencies": { "@types/node": "*", @@ -8609,14 +8632,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-pointer": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", - "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", - "dependencies": { - "foreach": "^2.0.4" - } - }, "node_modules/json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -8670,11 +8685,6 @@ "node >= 0.2.0" ] }, - "node_modules/jsonpointerx": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/jsonpointerx/-/jsonpointerx-1.1.4.tgz", - "integrity": "sha512-Mh8XOqCB5de7ErUH91V/bSOZ9WsoQln6hU8GvfXuUgdQEAR+2V6wmZxQG7cHljQXcfteC/bhHAmnDR/J8rO9NQ==" - }, "node_modules/jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -9341,9 +9351,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.2.1.tgz", - "integrity": "sha512-A0GBXpz8WIPgh2HfASJ0EeY8grd2dGxmC4R8uTujFJXZY7zFy0nvYSYW6SKCLKlz7y45BdHONfaxZQMIZpeF/w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.2.tgz", + "integrity": "sha512-ZmqShkn79D36uerdED+9qdo1ZYG8C1YsWvXu0UMJxurZnSdgz7gQKO2EGv8T55MhDqG3DYmGtizZNpM/UbTlcA==", "dev": true, "dependencies": { "schema-utils": "^3.1.0" @@ -9579,9 +9589,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.29", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz", - "integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -9656,9 +9666,9 @@ "dev": true }, "node_modules/ng-qrcode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-5.1.1.tgz", - "integrity": "sha512-wf0lkZGreNDeWUO9lyyX3WtLC0TH7q1LukiXF4MnAEsXyqvI+b6dzuNp8oPZSkWDcGxHBHSRaSGF7KexP+42hQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-5.2.0.tgz", + "integrity": "sha512-ild1nEULoKn2v5TpWz8aou8xEkM5h7wVXrvPLioAgvrSIgjD3+NM8bAkdOImb6eEFTMyN3LcqwlseNOUHyeOAQ==", "dependencies": { "qrcode": "^1.4.4", "tslib": "^2.0.0" @@ -9768,9 +9778,9 @@ } }, "node_modules/node-html-parser/node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, "engines": { "node": ">= 6" @@ -9856,9 +9866,9 @@ } }, "node_modules/node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "node_modules/nopt": { @@ -10729,9 +10739,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { @@ -10882,6 +10892,12 @@ "postcss-selector-parser": "^6.0.2" } }, + "node_modules/postcss-attribute-case-insensitive/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -10934,6 +10950,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-color-functional-notation/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-color-functional-notation/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -10974,6 +10996,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-color-gray/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-color-gray/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11013,6 +11041,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-color-hex-alpha/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-color-hex-alpha/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11053,6 +11087,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-color-mod-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-color-mod-function/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11092,6 +11132,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-color-rebeccapurple/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-color-rebeccapurple/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11163,6 +11209,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-custom-media/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-custom-media/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11202,6 +11254,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-custom-properties/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-custom-properties/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11253,6 +11311,12 @@ "node": ">=4" } }, + "node_modules/postcss-custom-selectors/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-custom-selectors/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11318,6 +11382,12 @@ "node": ">=4" } }, + "node_modules/postcss-dir-pseudo-class/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-dir-pseudo-class/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11419,6 +11489,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-double-position-gradients/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-double-position-gradients/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11458,6 +11534,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-env-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-env-function/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11496,6 +11578,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-focus-visible/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-focus-visible/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11534,6 +11622,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-focus-within/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-focus-within/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11569,6 +11663,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-font-variant/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-font-variant/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11607,6 +11707,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-gap-properties/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-gap-properties/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11646,6 +11752,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-image-set-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-image-set-function/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11698,6 +11810,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-initial/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-initial/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11738,6 +11856,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-lab-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-lab-function/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11798,6 +11922,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-logical/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-logical/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -11836,6 +11966,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-media-minmax/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-media-minmax/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12036,6 +12172,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-nesting/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-nesting/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12228,6 +12370,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-overflow-shorthand/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-overflow-shorthand/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12263,6 +12411,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-page-break/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-page-break/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12302,6 +12456,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-place/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-place/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12376,6 +12536,12 @@ "node": ">=6.0.0" } }, + "node_modules/postcss-preset-env/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-preset-env/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12427,6 +12593,12 @@ "node": ">=4" } }, + "node_modules/postcss-pseudo-class-any-link/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12508,6 +12680,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-replace-overflow-wrap/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12544,6 +12722,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-selector-matches/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-selector-matches/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -12580,6 +12764,12 @@ "postcss": "^7.0.2" } }, + "node_modules/postcss-selector-not/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/postcss-selector-not/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -13396,6 +13586,12 @@ } } }, + "node_modules/resolve-url-loader/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/resolve-url-loader/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -14081,19 +14277,6 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "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, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/sockjs": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", @@ -14224,13 +14407,16 @@ } }, "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "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, "dependencies": { "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "node_modules/source-map-support": { @@ -14674,9 +14860,9 @@ } }, "node_modules/svgo/node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, "engines": { "node": ">= 6" @@ -14998,12 +15184,12 @@ } }, "node_modules/ts-node": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", - "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.1.tgz", + "integrity": "sha512-Yw3W2mYzhHfCHOICGNJqa0i+rbL0rAyg7ZIHxU+K4pgY8gd2Lh1j+XbHCusJMykbj6RZMJVOY0MlHVd+GOivcw==", "dev": true, "dependencies": { - "@cspotcode/source-map-support": "0.6.1", + "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -15023,9 +15209,6 @@ "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, - "engines": { - "node": ">=12.0.0" - }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", @@ -15492,9 +15675,9 @@ } }, "node_modules/webpack": { - "version": "5.58.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.1.tgz", - "integrity": "sha512-4Z/dmbTU+VmkCb2XNgW7wkE5TfEcSooclprn/UEuVeAkwHhn07OcgUsyaKHGtCY/VobjnsYBlyhKeMLiSoOqPg==", + "version": "5.59.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.59.1.tgz", + "integrity": "sha512-I01IQV9K96FlpXX3V0L4nvd7gb0r7thfuu1IfT2P4uOHOA77nKARAKDYGe/tScSHKnffNIyQhLC8kRXzY4KEHQ==", "dev": true, "peer": true, "dependencies": { @@ -16401,55 +16584,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/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, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/wide-align/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wildcard": { @@ -16639,16 +16779,16 @@ } }, "@angular-devkit/build-angular": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.9.tgz", - "integrity": "sha512-A8yddhGpUnrTcA4WCiUxwklFbfkNMfvlST5CT9VLVjz4MEwwOpdaNmIF39+NMr4XTgOBbP6Bq/t3ciIsB5+/Uw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.11.tgz", + "integrity": "sha512-chMVR0ZEw0sRlny5eXZQ83dK0KNOzBJaa6ERwIubuQLB555DWpkn9L0E2EnRb7qwe2k+Uggx9GiZD2Nq9z+88A==", "dev": true, "requires": { "@ampproject/remapping": "1.0.1", - "@angular-devkit/architect": "0.1202.9", - "@angular-devkit/build-optimizer": "0.1202.9", - "@angular-devkit/build-webpack": "0.1202.9", - "@angular-devkit/core": "12.2.9", + "@angular-devkit/architect": "0.1202.11", + "@angular-devkit/build-optimizer": "0.1202.11", + "@angular-devkit/build-webpack": "0.1202.11", + "@angular-devkit/core": "12.2.11", "@babel/core": "7.14.8", "@babel/generator": "7.14.8", "@babel/helper-annotate-as-pure": "7.14.5", @@ -16660,7 +16800,7 @@ "@babel/template": "7.14.5", "@discoveryjs/json-ext": "0.5.3", "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@ngtools/webpack": "12.2.9", + "@ngtools/webpack": "12.2.11", "ansi-colors": "4.1.1", "babel-loader": "8.2.2", "browserslist": "^4.9.1", @@ -16669,11 +16809,11 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "9.0.1", "core-js": "3.16.0", - "critters": "0.0.10", + "critters": "0.0.11", "css-loader": "6.2.0", "css-minimizer-webpack-plugin": "3.0.2", - "esbuild": "0.13.4", - "esbuild-wasm": "0.13.4", + "esbuild": "0.13.8", + "esbuild-wasm": "0.13.8", "find-cache-dir": "3.3.1", "glob": "7.1.7", "https-proxy-agent": "5.0.0", @@ -16683,7 +16823,7 @@ "less-loader": "10.0.1", "license-webpack-plugin": "2.3.20", "loader-utils": "2.0.0", - "mini-css-extract-plugin": "2.2.1", + "mini-css-extract-plugin": "2.4.2", "minimatch": "3.0.4", "open": "8.2.1", "ora": "5.4.1", @@ -16717,19 +16857,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "requires": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "requires": { "ajv": "8.6.2", @@ -16851,9 +16991,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.9.tgz", - "integrity": "sha512-yDR7f2fRWzJdqa7U0eIYu5fCRIae3tcSsYE18UPiV5ypGK3talMIpZ1ibkklr9Nm9SAB6Js1/EdVBGB5jo3R9A==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.11.tgz", + "integrity": "sha512-3iU2q8QYrF7bSxffcrvYrvs9BQrLGHLe3MFyNfU3ps38c6CmnMsnR3RODmDZZgkgk9jN45y+WGmkF46ydiOHtA==", "dev": true, "requires": { "source-map": "0.7.3", @@ -16862,29 +17002,29 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.9.tgz", - "integrity": "sha512-UKVxFTRSyDpQDxM1yk1OJiynhbryrbsy+WgZ/gFcnZcrRGtrpAWOq+uMXfq05zET6CNqpOKBnxy9LSHAwXR5Ig==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.11.tgz", + "integrity": "sha512-xex0/8G2o9v0gr+oVAc3QdRyPKTBWmmhOR3K3fj4a7gvhpnE9ByHxemzflZcDwpE8K7YkMX8kTlFjkog/dSXNw==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1202.9", + "@angular-devkit/architect": "0.1202.11", "rxjs": "6.6.7" }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "requires": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "requires": { "ajv": "8.6.2", @@ -16962,20 +17102,20 @@ } }, "@angular-devkit/schematics": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.9.tgz", - "integrity": "sha512-OcMDCdlIxiir8XntrNXdXEPi9/8BRx54oYZeRosr0sJZlz4pPzsHs36t5uX2DURYYMkNNMaBnf2luUIC+77ZsA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.11.tgz", + "integrity": "sha512-7ucnRGGRGsWqXhvFuK7oAgXMkWO58jmA9CQzXTWCNT5EFCUeyBj2eNNndI4NlWE/LgeKYn7UhUNREzdBrcDiKw==", "dev": true, "requires": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "ora": "5.4.1", "rxjs": "6.6.7" }, "dependencies": { "@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "requires": { "ajv": "8.6.2", @@ -17016,15 +17156,15 @@ } }, "@angular/cli": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.9.tgz", - "integrity": "sha512-aYAb6LkqIpKOZE8Kkhst5NNWpM4W1o1mmPTt6Nm6b/4wVLSC+mDp1IBCJSihDWysDetXA5J3kNJ4R2XnpHpIKw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.11.tgz", + "integrity": "sha512-zstz/oH0BBWC1n1a6oSFLSaSCDUCoaawG8a83E61MN65wYaCuwIW+Z7Lz3FiF7P4Ce16T56ZwJPIA5SjS7KBhg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1202.9", - "@angular-devkit/core": "12.2.9", - "@angular-devkit/schematics": "12.2.9", - "@schematics/angular": "12.2.9", + "@angular-devkit/architect": "0.1202.11", + "@angular-devkit/core": "12.2.11", + "@angular-devkit/schematics": "12.2.11", + "@schematics/angular": "12.2.11", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.2", @@ -17043,19 +17183,19 @@ }, "dependencies": { "@angular-devkit/architect": { - "version": "0.1202.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.9.tgz", - "integrity": "sha512-s2NcFqZjsdYoR0vhJWLCwykF6hG7F0C5fJJs49i6IJMKj5Ai58z7d2IFYvD8nA60paMvjFS14OQ+E/FEEEZ88Q==", + "version": "0.1202.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz", + "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==", "dev": true, "requires": { - "@angular-devkit/core": "12.2.9", + "@angular-devkit/core": "12.2.11", "rxjs": "6.6.7" } }, "@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "requires": { "ajv": "8.6.2", @@ -17096,25 +17236,25 @@ } }, "@angular/common": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.9.tgz", - "integrity": "sha512-V7leBrq80CSJWHWVE3LEL6Z6onP2ibsITY3++86Uddz8AxzfOtNRslbs4/qCWc82nT7CIEn8a28NLP/BdOwNew==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.11.tgz", + "integrity": "sha512-/3QS5YaHfm2taJYUVes076ZMpL2GRYVW3HDbHXiRNjoC9EMqQ7ahRD9RPFC8XUk709JuqzonE3bB+N5Ld3mzIA==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.9.tgz", - "integrity": "sha512-87Qn8HuQ+6ECUnapQxpgIvwuUs6i1oM6lmLSKrYe0/WpIzTabB30eXWCKfvqYrv516cMdrq+nLCIXJx1tPqzSw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.11.tgz", + "integrity": "sha512-78b5Uf+79gOKEyF/ixFAGJANNHnhueofSxgToBmJkTTpqTX6Xzdfzw8W+ehpJADp52eBjmZ+rv7b9sgBsiJ1tg==", "requires": { "tslib": "^2.2.0" } }, "@angular/compiler-cli": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.9.tgz", - "integrity": "sha512-jswNKFm3MNcY4oDO/8HcFLLVxDEcTOyqp9CeKzlbjBKb04Ntjaqpm9CKzlxLOtJJj9BSMHTz1CjE0hSNv76NPg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.11.tgz", + "integrity": "sha512-mOEyAQQS28omIGOw71jXnAI+GLxLVHhsa5vcS9Cy+HLfgJzysTngwdKNO7iJvalsyAsb9EjJ3R82XRKKJspV0g==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -17142,47 +17282,47 @@ } }, "@angular/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.9.tgz", - "integrity": "sha512-RgUmn0YM4GMcViTEkWxDVGCyz8+subF+98dJie+bwJszATMxRK2TSINEg2X/Y0LgNxpRt4mKzIK2kz62oaDH7g==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.11.tgz", + "integrity": "sha512-wzCFtVFdQlXJlzWpWNz3w8cDzhYzuO1qDqey15Wd4zPR8c8pDx3/XCZXSziskaUzA+fVzgHHSwQnOi9XSFFjzA==", "requires": { "tslib": "^2.2.0" } }, "@angular/forms": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.9.tgz", - "integrity": "sha512-DugLX9h/hmphjdx0wGOp9koEpzFZpcMiYXfYO2rLyzc1NwopAcbSJTCvU+adfShZgh/b5v+7rb5n10JROj/ODw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.11.tgz", + "integrity": "sha512-mylti7rtz2FcM3hwPSj2JnX8y8BrXmzrjEWjcLlXmwoMzv/M3vY5HlgKzOmPN03bVgxC7b7EFfGMXfJ3YoPWpg==", "requires": { "tslib": "^2.2.0" } }, "@angular/language-service": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.9.tgz", - "integrity": "sha512-q6WH8CxS4nXKnIR/imQbRYTdP0PW63tDogzlol6gnB/jEmGgmQJphYRVeDqr5owIxuzCB06JkWXPVsyHY3yHvA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.11.tgz", + "integrity": "sha512-ag0YlWvVmNQWKGB14SFgaPcWuYQJpr8OrD2JoY91P+WWpv6oawemHRVF1rvFjmPf9byXv4mnPK1h36qI7EJSpw==", "dev": true }, "@angular/platform-browser": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.9.tgz", - "integrity": "sha512-moO5Fz4b15EWYQthOaQThmy0gm/d5W/+9RmCiZs2ZHiVjuC358lnFy626VdkZmJ/MLwMwqHpyQS9JhCYOZGOdw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.11.tgz", + "integrity": "sha512-uJEnVOK3M1SrCWJoW2jFx5F8pUCbSISai7dbTBVc+/Gx6e9ZuNzBVOooLvSzV96DurhTV7xGSXR5Ry75UNZ48A==", "requires": { "tslib": "^2.2.0" } }, "@angular/platform-browser-dynamic": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.9.tgz", - "integrity": "sha512-bBNsq2rrL08IaVCps9j54iu3Xoxf1PkjtbEyP5EqXbjccsF7KDM32+5Cjjf0AwYtzaWbjXPSP7awAXpCCsqSdA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.11.tgz", + "integrity": "sha512-TF80norTsBbJiUsqo6IUNALV2W1YkEa5QAB6RkTrb1K/V6oGcWcGfqSyCMbjRHPEZTwiAzz4cYEmip5kFtE+oQ==", "requires": { "tslib": "^2.2.0" } }, "@angular/router": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.9.tgz", - "integrity": "sha512-Qh7Ugh6N7PIK4+ydRPHiKy8Q3wlB/ieXVyqYgkNfGFZ+QtNHpWgWBUXJuGPnmKk0Yn02EwSPOuPWEHV92rayhw==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.11.tgz", + "integrity": "sha512-iqQujHKLDpE+xJwXqRY1U83xfDnmb7LIQ0UL6ORSw6mqDTxIeMXfVKRqux1dIlWX+ysU0uTHuug49R8T9q0fhg==", "requires": { "tslib": "^2.2.0" } @@ -18355,9 +18495,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -18440,9 +18580,9 @@ "dev": true }, "@cspotcode/source-map-support": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz", - "integrity": "sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, "requires": { "@cspotcode/source-map-consumer": "0.8.0" @@ -18461,11 +18601,11 @@ "dev": true }, "@ionic/angular": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.8.3.tgz", - "integrity": "sha512-0girV4YrJEZ/PMFNmIOHQjsFfoqufOotpSx4LEA7jPqiUDoc7C5H5mqdzVPUY6aAhA9db3ZUO1fJ7GYd/fV2bg==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/@ionic/angular/-/angular-5.8.4.tgz", + "integrity": "sha512-pvy7qOTVih3mqcyIV6C3BK8seeZOEoanRFw+Z5m+soXDcvgrouHBBAKzURu2RUx8uDZqlX38Pkn89ontvqIZUg==", "requires": { - "@ionic/core": "5.8.3", + "@ionic/core": "5.8.4", "tslib": "^1.9.3" }, "dependencies": { @@ -18533,9 +18673,9 @@ } }, "@ionic/core": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.8.3.tgz", - "integrity": "sha512-wKDKjLV4QsWlxw4tWEhUtGtLgSdJvNdtMyVRROWHHSOA1V3t5Wsktt09Xroi14hPOdjR+LxCM5sWcuHep4lz5g==", + "version": "5.8.4", + "resolved": "https://registry.npmjs.org/@ionic/core/-/core-5.8.4.tgz", + "integrity": "sha512-ioaH7wXAtexcpk23III0KArjSXStkpPrpZ5BCNkyter3EbOmDVd8XIXRcT86zRG68rbGI7Pd9GrugxeaDyMk/g==", "requires": { "@stencil/core": "^2.4.0", "ionicons": "^5.5.3", @@ -18592,9 +18732,9 @@ } }, "@ngtools/webpack": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.9.tgz", - "integrity": "sha512-IQkzvompjLdWbZ+33crtyVF8huF53C36k1FNFdq3x2j4Kw4ssDd6K9fq3aZpRCK0J8O79HJ5j4QH6ZtWjwajLg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-12.2.11.tgz", + "integrity": "sha512-OgNClb9EhYR9lhVRR1RnWT1Xh75aI70IB4eQaDSiVOkBc6aymLzeskZ2WmkZWsDGlJBLOamnoB0XUPuU1GpmrQ==", "dev": true, "requires": {} }, @@ -18688,20 +18828,20 @@ } }, "@schematics/angular": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.9.tgz", - "integrity": "sha512-IIczXVwegREekub0+bBxOc0dDL7j8p5rG6rB/2btJRR+tg04milP+BkvnQgksmIkW1OcZ5beRSB37R3jY/W/PA==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-12.2.11.tgz", + "integrity": "sha512-Xou0CSSD88LVxfl7GzqY3TYUG6mM4cN61zE7gTzqshCx3rR0JkbLn0Z+q67KhxYUs9qiPT5MHL0W06nJ0iLzDg==", "dev": true, "requires": { - "@angular-devkit/core": "12.2.9", - "@angular-devkit/schematics": "12.2.9", + "@angular-devkit/core": "12.2.11", + "@angular-devkit/schematics": "12.2.11", "jsonc-parser": "3.0.0" }, "dependencies": { "@angular-devkit/core": { - "version": "12.2.9", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.9.tgz", - "integrity": "sha512-iPHQiga08bbryiVq3QYzwpuq9sNb8CB/MVy65MHJ0fuW1z6RYDeUh1EziitBBUT2d81KWKPO1wQ2DuUoxOg4mg==", + "version": "12.2.11", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz", + "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==", "dev": true, "requires": { "ajv": "8.6.2", @@ -18747,9 +18887,9 @@ "integrity": "sha512-1dhiG03VkfEwSLx/JPKVms6srAbYFQgwfSGhwpUKMDliMXuAHGVaueStmqzVxn3JpH/HEVz0QW8w/PXHqjdiIg==" }, "@stencil/core": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.8.1.tgz", - "integrity": "sha512-iv9J6oLO/lv7/aO45M05yw3pp1J7olY400vlOZgdMVs3s5zHfalY1ZPYM0KyqU4+7DZuadKYbd0aQZ/g2PInZw==" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-2.9.0.tgz", + "integrity": "sha512-kY3xYolZoJO1MKslL0NQccHy72R3TIl1prHgfmIrEoGcnMgc6uiskdWaGMuI5/sCGz9T+QuTVz76B1H2ySyBZg==" }, "@tootallnate/once": { "version": "1.1.2", @@ -18814,9 +18954,9 @@ "dev": true }, "@types/glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -18836,9 +18976,9 @@ "dev": true }, "@types/marked": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.1.tgz", - "integrity": "sha512-jry/WUAC511P2NBCeiCkfTRCN2VXobeeQa8p8gImOYsRfnuIVfeEsqOJ1pk+CzCwfMCdv3dkTQRCYaNkkFGtxw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-3.0.2.tgz", + "integrity": "sha512-mGYI9qFs+i5eYaytWKBbtEMbIkrXGKuhsDpDcj70ogKS2gk1NmgEy9Z3VEKz922Lfms6eITXXqv5idlX7C/irw==", "dev": true }, "@types/minimatch": { @@ -18854,9 +18994,9 @@ "dev": true }, "@types/node": { - "version": "16.10.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.3.tgz", - "integrity": "sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ==", + "version": "16.11.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.2.tgz", + "integrity": "sha512-w34LtBB0OkDTs19FQHXy4Ig/TOXI4zqvXS2Kk1PAsRKZ0I+nik7LlMYxckW0tSNGtvWmzB+mrCTbuEjuB9DVsw==", "dev": true }, "@types/parse-json": { @@ -19423,6 +19563,12 @@ "postcss-value-parser": "^4.1.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -19706,16 +19852,16 @@ } }, "browserslist": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz", - "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==", + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", + "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001264", - "electron-to-chromium": "^1.3.857", + "caniuse-lite": "^1.0.30001265", + "electron-to-chromium": "^1.3.867", "escalade": "^3.1.1", - "node-releases": "^1.1.77", - "picocolors": "^0.2.1" + "node-releases": "^2.0.0", + "picocolors": "^1.0.0" } }, "buffer": { @@ -19851,9 +19997,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001265", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz", - "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==", + "version": "1.0.30001270", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001270.tgz", + "integrity": "sha512-TcIC7AyNWXhcOmv2KftOl1ShFAaHQYcB/EPL/hEyMrcS7ZX0/DvV1aoy6BzV0+16wTpoAyTMGDNAJfSqS/rz7A==", "dev": true }, "canonical-path": { @@ -20099,9 +20245,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colord": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.8.0.tgz", - "integrity": "sha512-kNkVV4KFta3TYQv0bzs4xNwLaeag261pxgzGQSh4cQ1rEhYjcTJfFRP0SDlbhLONg0eSoLzrDd79PosjbltufA==", + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", + "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==", "dev": true }, "colorette": { @@ -20285,14 +20431,14 @@ } }, "core-js": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.2.tgz", - "integrity": "sha512-zNhPOUoSgoizoSQFdX1MeZO16ORRb9FFQLts8gSYbZU5FcgXhp24iMWMxnOQo5uIaIG7/6FA/IqJPwev1o9ZXQ==" + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.18.3.tgz", + "integrity": "sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw==" }, "core-js-compat": { - "version": "3.18.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.2.tgz", - "integrity": "sha512-25VJYCJtGjZwLguj7d66oiHfmnVw3TMOZ0zV8DyMJp/aeQ3OjR519iOOeck08HMyVVRAqXxafc2Hl+5QstJrsQ==", + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.18.3.tgz", + "integrity": "sha512-4zP6/y0a2RTHN5bRGT7PTq9lVt3WzvffTNjqnTKsXhkAYNDTkdCLOIfAdOLcQ/7TDdyRj3c+NeHe1NmF1eDScw==", "dev": true, "requires": { "browserslist": "^4.17.3", @@ -20333,15 +20479,16 @@ "dev": true }, "critters": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.10.tgz", - "integrity": "sha512-p5VKhP1803+f+0Jq5P03w1SbiHtpAKm+1EpJHkiPxQPq0Vu9QLZHviJ02GRrWi0dlcJqrmzMWInbwp4d22RsGw==", + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.11.tgz", + "integrity": "sha512-E1XlhQTmf0Y2Q6hYVrXKxibxps2LNarpZaDCRNaxA1LA5LxlgoIPN0rcOzFVlwRD47iNYhVtD4DmGtgr2edrlQ==", "dev": true, "requires": { "chalk": "^4.1.0", - "css": "^3.0.0", + "css-select": "^1.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", "pretty-bytes": "^5.3.0" }, "dependencies": { @@ -20391,6 +20538,17 @@ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, + "postcss": { + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "dev": true, + "requires": { + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^0.6.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -20433,14 +20591,15 @@ } }, "css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "inherits": "^2.0.4", + "inherits": "^2.0.3", "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" }, "dependencies": { "source-map": { @@ -20460,6 +20619,12 @@ "postcss": "^7.0.5" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -20509,6 +20674,12 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -20595,39 +20766,6 @@ "dev": true, "requires": { "css": "^2.0.0" - }, - "dependencies": { - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.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 - }, - "source-map-resolve": { - "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.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - } } }, "css-prefers-color-scheme": { @@ -20639,6 +20777,12 @@ "postcss": "^7.0.5" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -21058,9 +21202,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.864", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.864.tgz", - "integrity": "sha512-v4rbad8GO6/yVI92WOeU9Wgxc4NA0n4f6P1FvZTY+jyY7JHEhw3bduYu60v3Q1h81Cg6eo4ApZrFPuycwd5hGw==", + "version": "1.3.876", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.876.tgz", + "integrity": "sha512-a6LR4738psrubCtGx5HxM/gNlrIsh4eFTNnokgOqvQo81GWd07lLcOjITkAXn2y4lIp18vgS+DGnehj+/oEAxQ==", "dev": true }, "emoji-regex": { @@ -21166,145 +21310,153 @@ "peer": true }, "esbuild": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.4.tgz", - "integrity": "sha512-wMA5eUwpavTBiNl+It6j8OQuKVh69l6z4DKDLzoTIqC+gChnPpcmqdA8WNHptUHRnfyML+mKEQPlW7Mybj8gHg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz", + "integrity": "sha512-A4af7G7YZLfG5OnARJRMtlpEsCkq/zHZQXewgPA864l9D6VjjbH1SuFYK/OSV6BtHwDGkdwyRrX0qQFLnMfUcw==", "dev": true, "optional": true, "requires": { - "esbuild-android-arm64": "0.13.4", - "esbuild-darwin-64": "0.13.4", - "esbuild-darwin-arm64": "0.13.4", - "esbuild-freebsd-64": "0.13.4", - "esbuild-freebsd-arm64": "0.13.4", - "esbuild-linux-32": "0.13.4", - "esbuild-linux-64": "0.13.4", - "esbuild-linux-arm": "0.13.4", - "esbuild-linux-arm64": "0.13.4", - "esbuild-linux-mips64le": "0.13.4", - "esbuild-linux-ppc64le": "0.13.4", - "esbuild-openbsd-64": "0.13.4", - "esbuild-sunos-64": "0.13.4", - "esbuild-windows-32": "0.13.4", - "esbuild-windows-64": "0.13.4", - "esbuild-windows-arm64": "0.13.4" + "esbuild-android-arm64": "0.13.8", + "esbuild-darwin-64": "0.13.8", + "esbuild-darwin-arm64": "0.13.8", + "esbuild-freebsd-64": "0.13.8", + "esbuild-freebsd-arm64": "0.13.8", + "esbuild-linux-32": "0.13.8", + "esbuild-linux-64": "0.13.8", + "esbuild-linux-arm": "0.13.8", + "esbuild-linux-arm64": "0.13.8", + "esbuild-linux-mips64le": "0.13.8", + "esbuild-linux-ppc64le": "0.13.8", + "esbuild-netbsd-64": "0.13.8", + "esbuild-openbsd-64": "0.13.8", + "esbuild-sunos-64": "0.13.8", + "esbuild-windows-32": "0.13.8", + "esbuild-windows-64": "0.13.8", + "esbuild-windows-arm64": "0.13.8" } }, "esbuild-android-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.4.tgz", - "integrity": "sha512-elDJt+jNyoHFId0/dKsuVYUPke3EcquIyUwzJCH17a3ERglN3A9aMBI5zbz+xNZ+FbaDNdpn0RaJHCFLbZX+fA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.8.tgz", + "integrity": "sha512-AilbChndywpk7CdKkNSZ9klxl+9MboLctXd9LwLo3b0dawmOF/i/t2U5d8LM6SbT1Xw36F8yngSUPrd8yPs2RA==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.4.tgz", - "integrity": "sha512-zJQGyHRAdZUXlRzbN7W+7ykmEiGC+bq3Gc4GxKYjjWTgDRSEly98ym+vRNkDjXwXYD3gGzSwvH35+MiHAtWvLA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.8.tgz", + "integrity": "sha512-b6sdiT84zV5LVaoF+UoMVGJzR/iE2vNUfUDfFQGrm4LBwM/PWXweKpuu6RD9mcyCq18cLxkP6w/LD/w9DtX3ng==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.4.tgz", - "integrity": "sha512-r8oYvAtqSGq8HNTZCAx4TdLE7jZiGhX9ooGi5AQAey37MA6XNaP8ZNlw9OCpcgpx3ryU2WctXwIqPzkHO7a8dg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.8.tgz", + "integrity": "sha512-R8YuPiiJayuJJRUBG4H0VwkEKo6AvhJs2m7Tl0JaIer3u1FHHXwGhMxjJDmK+kXwTFPriSysPvcobXC/UrrZCQ==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.4.tgz", - "integrity": "sha512-u9DRGkn09EN8+lCh6z7FKle7awi17PJRBuAKdRNgSo5ZrH/3m+mYaJK2PR2URHMpAfXiwJX341z231tSdVe3Yw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.8.tgz", + "integrity": "sha512-zBn6urrn8FnKC+YSgDxdof9jhPCeU8kR/qaamlV4gI8R3KUaUK162WYM7UyFVAlj9N0MyD3AtB+hltzu4cysTw==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.4.tgz", - "integrity": "sha512-q3B2k68Uf6gfjATjcK16DqxvjqRQkHL8aPoOfj4op+lSqegdXvBacB1d8jw8PxbWJ8JHpdTLdAVUYU80kotQXA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.8.tgz", + "integrity": "sha512-pWW2slN7lGlkx0MOEBoUGwRX5UgSCLq3dy2c8RIOpiHtA87xAUpDBvZK10MykbT+aMfXc0NI2lu1X+6kI34xng==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.4.tgz", - "integrity": "sha512-UUYJPHSiKAO8KoN3Ls/iZtgDLZvK5HarES96aolDPWZnq9FLx4dIHM/x2z4Rxv9IYqQ/DxlPoE2Co1UPBIYYeA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.8.tgz", + "integrity": "sha512-T0I0ueeKVO/Is0CAeSEOG9s2jeNNb8jrrMwG9QBIm3UU18MRB60ERgkS2uV3fZ1vP2F8i3Z2e3Zju4lg9dhVmw==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.4.tgz", - "integrity": "sha512-+RnohAKiiUW4UHLGRkNR1AnENW1gCuDWuygEtd4jxTNPIoeC7lbXGor7rtgjj9AdUzFgOEvAXyNNX01kJ8NueQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.8.tgz", + "integrity": "sha512-Bm8SYmFtvfDCIu9sjKppFXzRXn2BVpuCinU1ChTuMtdKI/7aPpXIrkqBNOgPTOQO9AylJJc1Zw6EvtKORhn64w==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.4.tgz", - "integrity": "sha512-BH5gKve4jglS7UPSsfwHSX79I5agC/lm4eKoRUEyo8lwQs89frQSRp2Xup+6SFQnxt3md5EsKcd2Dbkqeb3gPA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.8.tgz", + "integrity": "sha512-4/HfcC40LJ4GPyboHA+db0jpFarTB628D1ifU+/5bunIgY+t6mHkJWyxWxAAE8wl/ZIuRYB9RJFdYpu1AXGPdg==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.4.tgz", - "integrity": "sha512-+A188cAdd6QuSRxMIwRrWLjgphQA0LDAQ/ECVlrPVJwnx+1i64NjDZivoqPYLOTkSPIKntiWwMhhf0U5/RrPHQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.8.tgz", + "integrity": "sha512-X4pWZ+SL+FJ09chWFgRNO3F+YtvAQRcWh0uxKqZSWKiWodAB20flsW/OWFYLXBKiVCTeoGMvENZS/GeVac7+tQ==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.4.tgz", - "integrity": "sha512-0xkwtPaUkG5xMTFGaQPe1AadSe5QAiQuD4Gix1O9k5Xo/U8xGIkw9UFUTvfEUeu71vFb6ZgsIacfP1NLoFjWNw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.8.tgz", + "integrity": "sha512-o7e0D+sqHKT31v+mwFircJFjwSKVd2nbkHEn4l9xQ1hLR+Bv8rnt3HqlblY3+sBdlrOTGSwz0ReROlKUMJyldA==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.4.tgz", - "integrity": "sha512-E1+oJPP7A+j23GPo3CEpBhGwG1bni4B8IbTA3/3rvzjURwUMZdcN3Fhrz24rnjzdLSHmULtOE4VsbT42h1Om4Q==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.8.tgz", + "integrity": "sha512-eZSQ0ERsWkukJp2px/UWJHVNuy0lMoz/HZcRWAbB6reoaBw7S9vMzYNUnflfL3XA6WDs+dZn3ekHE4Y2uWLGig==", + "dev": true, + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.8.tgz", + "integrity": "sha512-gZX4kP7gVvOrvX0ZwgHmbuHczQUwqYppxqtoyC7VNd80t5nBHOFXVhWo2Ad/Lms0E8b+wwgI/WjZFTCpUHOg9Q==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.4.tgz", - "integrity": "sha512-xEkI1o5HYxDzbv9jSox0EsDxpwraG09SRiKKv0W8pH6O3bt+zPSlnoK7+I7Q69tkvONkpIq5n2o+c55uq0X7cw==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.8.tgz", + "integrity": "sha512-afzza308X4WmcebexbTzAgfEWt9MUkdTvwIa8xOu4CM2qGbl2LanqEl8/LUs8jh6Gqw6WsicEK52GPrS9wvkcw==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.4.tgz", - "integrity": "sha512-bjXUMcODMnB6hQicLBBmmnBl7OMDyVpFahKvHGXJfDChIi5udiIRKCmFUFIRn+AUAKVlfrofRKdyPC7kBsbvGQ==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.8.tgz", + "integrity": "sha512-mWPZibmBbuMKD+LDN23LGcOZ2EawMYBONMXXHmbuxeT0XxCNwadbCVwUQ/2p5Dp5Kvf6mhrlIffcnWOiCBpiVw==", "dev": true, "optional": true }, "esbuild-wasm": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.4.tgz", - "integrity": "sha512-2dN7njr9/2QzKLqbTEgXr73vDbSqffdJMv4EfaMQoy04cej0owbGHH5apPgED0wN9I5e7sBT0/Q81tVy3wQBlA==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.13.8.tgz", + "integrity": "sha512-UbD+3nloiSpJWXTCInZQrqPe8Y+RLfDkY/5kEHiXsw/lmaEvibe69qTzQu16m5R9je/0bF7VYQ5jaEOq0z9lLA==", "dev": true }, "esbuild-windows-32": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.4.tgz", - "integrity": "sha512-z4CH07pfyVY0XF98TCsGmLxKCl0kyvshKDbdpTekW9f2d+dJqn5mmoUyWhpSVJ0SfYWJg86FoD9nMbbaMVyGdg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.8.tgz", + "integrity": "sha512-QsZ1HnWIcnIEApETZWw8HlOhDSWqdZX2SylU7IzGxOYyVcX7QI06ety/aDcn437mwyO7Ph4RrbhB+2ntM8kX8A==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.4.tgz", - "integrity": "sha512-uVL11vORRPjocGLYam67rwFLd0LvkrHEs+JG+1oJN4UD9MQmNGZPa4gBHo6hDpF+kqRJ9kXgQSeDqUyRy0tj/Q==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.8.tgz", + "integrity": "sha512-76Fb57B9eE/JmJi1QmUW0tRLQZfGo0it+JeYoCDTSlbTn7LV44ecOHIMJSSgZADUtRMWT9z0Kz186bnaB3amSg==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.4.tgz", - "integrity": "sha512-vA6GLvptgftRcDcWngD5cMlL4f4LbL8JjU2UMT9yJ0MT5ra6hdZNFWnOeOoEtY4GtJ6OjZ0i+81sTqhAB0fMkg==", + "version": "0.13.8", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.8.tgz", + "integrity": "sha512-HW6Mtq5eTudllxY2YgT62MrVcn7oq2o8TAoAvDUhyiEmRmDY8tPwAhb1vxw5/cdkbukM3KdMYtksnUhF/ekWeg==", "dev": true, "optional": true }, @@ -21692,6 +21844,11 @@ "micromatch": "^4.0.4" } }, + "fast-json-patch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.0.tgz", + "integrity": "sha512-IhpytlsVTRndz0hU5t0/MGzS/etxLlfrpG5V5M9mVbuj9TrJLWaMfsox9REM5rkuGX0T+5qjpe8XA1o0gZ42nA==" + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -21811,11 +21968,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -22806,9 +22958,9 @@ "dev": true }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "dev": true, "requires": { "has": "^1.0.3" @@ -23009,9 +23161,9 @@ "dev": true }, "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", "dev": true }, "istanbul-lib-instrument": { @@ -23035,9 +23187,9 @@ } }, "jest-worker": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", - "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "version": "27.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz", + "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==", "dev": true, "requires": { "@types/node": "*", @@ -23102,14 +23254,6 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-pointer": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.1.tgz", - "integrity": "sha512-3OvjqKdCBvH41DLpV4iSt6v2XhZXV1bPB4OROuknvUXI7ZQNofieCPkmE26stEJ9zdQuvIxDHCuYhfgxFAAs+Q==", - "requires": { - "foreach": "^2.0.4" - } - }, "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", @@ -23154,11 +23298,6 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "jsonpointerx": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/jsonpointerx/-/jsonpointerx-1.1.4.tgz", - "integrity": "sha512-Mh8XOqCB5de7ErUH91V/bSOZ9WsoQln6hU8GvfXuUgdQEAR+2V6wmZxQG7cHljQXcfteC/bhHAmnDR/J8rO9NQ==" - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -23674,9 +23813,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.2.1.tgz", - "integrity": "sha512-A0GBXpz8WIPgh2HfASJ0EeY8grd2dGxmC4R8uTujFJXZY7zFy0nvYSYW6SKCLKlz7y45BdHONfaxZQMIZpeF/w==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.4.2.tgz", + "integrity": "sha512-ZmqShkn79D36uerdED+9qdo1ZYG8C1YsWvXu0UMJxurZnSdgz7gQKO2EGv8T55MhDqG3DYmGtizZNpM/UbTlcA==", "dev": true, "requires": { "schema-utils": "^3.1.0" @@ -23856,9 +23995,9 @@ "dev": true }, "nanoid": { - "version": "3.1.29", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.29.tgz", - "integrity": "sha512-dW2pUSGZ8ZnCFIlBIA31SV8huOGCHb6OwzVCc7A69rb/a+SgPBwfmLvK5TKQ3INPbRkcI8a/Owo0XbiTNH19wg==", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true }, "nanomatch": { @@ -23917,9 +24056,9 @@ "dev": true }, "ng-qrcode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-5.1.1.tgz", - "integrity": "sha512-wf0lkZGreNDeWUO9lyyX3WtLC0TH7q1LukiXF4MnAEsXyqvI+b6dzuNp8oPZSkWDcGxHBHSRaSGF7KexP+42hQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ng-qrcode/-/ng-qrcode-5.2.0.tgz", + "integrity": "sha512-ild1nEULoKn2v5TpWz8aou8xEkM5h7wVXrvPLioAgvrSIgjD3+NM8bAkdOImb6eEFTMyN3LcqwlseNOUHyeOAQ==", "requires": { "qrcode": "^1.4.4", "tslib": "^2.0.0" @@ -24004,9 +24143,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "dom-serializer": { @@ -24064,9 +24203,9 @@ } }, "node-releases": { - "version": "1.1.77", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz", - "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "nopt": { @@ -24752,9 +24891,9 @@ "dev": true }, "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { @@ -24876,6 +25015,12 @@ "postcss-selector-parser": "^6.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -24914,6 +25059,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -24943,6 +25094,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -24971,6 +25128,12 @@ "postcss-values-parser": "^2.0.1" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25000,6 +25163,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25028,6 +25197,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25076,6 +25251,12 @@ "postcss": "^7.0.14" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25104,6 +25285,12 @@ "postcss-values-parser": "^2.0.1" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25138,6 +25325,12 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25183,6 +25376,12 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25250,6 +25449,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25278,6 +25483,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25305,6 +25516,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25332,6 +25549,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25359,6 +25582,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25386,6 +25615,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25414,6 +25649,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25452,6 +25693,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25481,6 +25728,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25519,6 +25772,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25546,6 +25805,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25676,6 +25941,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25798,6 +26069,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25825,6 +26102,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25853,6 +26136,12 @@ "postcss-values-parser": "^2.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25916,6 +26205,12 @@ "postcss-selector-not": "^4.0.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -25950,6 +26245,12 @@ "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -26008,6 +26309,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -26036,6 +26343,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -26064,6 +26377,12 @@ "postcss": "^7.0.2" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -26681,6 +27000,12 @@ "source-map": "0.6.1" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -27169,19 +27494,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true - }, - "source-map-resolve": { - "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.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } } } }, @@ -27333,13 +27645,16 @@ } }, "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "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.2", - "decode-uri-component": "^0.2.0" + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -27678,9 +27993,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "dom-serializer": { @@ -27918,12 +28233,12 @@ "dev": true }, "ts-node": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.2.1.tgz", - "integrity": "sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.3.1.tgz", + "integrity": "sha512-Yw3W2mYzhHfCHOICGNJqa0i+rbL0rAyg7ZIHxU+K4pgY8gd2Lh1j+XbHCusJMykbj6RZMJVOY0MlHVd+GOivcw==", "dev": true, "requires": { - "@cspotcode/source-map-support": "0.6.1", + "@cspotcode/source-map-support": "0.7.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", @@ -28300,9 +28615,9 @@ } }, "webpack": { - "version": "5.58.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.1.tgz", - "integrity": "sha512-4Z/dmbTU+VmkCb2XNgW7wkE5TfEcSooclprn/UEuVeAkwHhn07OcgUsyaKHGtCY/VobjnsYBlyhKeMLiSoOqPg==", + "version": "5.59.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.59.1.tgz", + "integrity": "sha512-I01IQV9K96FlpXX3V0L4nvd7gb0r7thfuu1IfT2P4uOHOA77nKARAKDYGe/tScSHKnffNIyQhLC8kRXzY4KEHQ==", "dev": true, "peer": true, "requires": { @@ -29011,45 +29326,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { - "string-width": "^1.0.2 || 2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wildcard": { diff --git a/ui/package.json b/ui/package.json index 4ab5b2fc3..14165a664 100644 --- a/ui/package.json +++ b/ui/package.json @@ -24,9 +24,8 @@ "@start9labs/emver": "0.1.5", "ajv": "^6.12.6", "core-js": "^3.17.2", + "fast-json-patch": "^3.1.0", "fuse.js": "^6.4.6", - "json-pointer": "^0.6.1", - "jsonpointerx": "^1.1.4", "marked": "3.0.2", "mustache": "^4.2.0", "ng-qrcode": "^5.0.0", diff --git a/ui/src/app/components/form-object/form-error.component.html b/ui/src/app/components/form-object/form-error.component.html index cf7912af2..03f974658 100644 --- a/ui/src/app/components/form-object/form-error.component.html +++ b/ui/src/app/components/form-object/form-error.component.html @@ -30,5 +30,8 @@

{{ control.errors.listNotUnique.value }}

+

+ {{ control.errors.listItemIssue.value }} +

\ No newline at end of file diff --git a/ui/src/app/components/form-object/form-label.component.html b/ui/src/app/components/form-object/form-label.component.html index 04bafbf18..ce7418f5f 100644 --- a/ui/src/app/components/form-object/form-label.component.html +++ b/ui/src/app/components/form-object/form-label.component.html @@ -1,11 +1,16 @@ - + + + + + + {{ data.spec.name }} - (New) - (Edited) + (New) + (Edited)  * diff --git a/ui/src/app/components/form-object/form-object.component.html b/ui/src/app/components/form-object/form-object.component.html index 61f08e1c0..2e190e0d4 100644 --- a/ui/src/app/components/form-object/form-object.component.html +++ b/ui/src/app/components/form-object/form-object.component.html @@ -26,8 +26,8 @@

@@ -73,8 +73,8 @@ @@ -97,8 +97,8 @@ @@ -117,8 +117,9 @@

- +

{{ getEnumListDisplay(formArr.value, $any(spec.spec)) }}

@@ -211,7 +212,7 @@ *ngIf="formGroup.get(entry.key).errors" [control]="$any(formGroup.get(entry.key))" [spec]="spec" - > + > diff --git a/ui/src/app/components/form-object/form-object.component.scss b/ui/src/app/components/form-object/form-object.component.scss index 6c09caa77..a61403383 100644 --- a/ui/src/app/components/form-object/form-object.component.scss +++ b/ui/src/app/components/form-object/form-object.component.scss @@ -1,4 +1,4 @@ -.help-button { +.slot-start { display: inline-block; vertical-align: middle; } diff --git a/ui/src/app/components/form-object/form-object.component.ts b/ui/src/app/components/form-object/form-object.component.ts index e37409595..b57b40848 100644 --- a/ui/src/app/components/form-object/form-object.component.ts +++ b/ui/src/app/components/form-object/form-object.component.ts @@ -1,12 +1,12 @@ import { Component, Input, Output, SimpleChange, EventEmitter } from '@angular/core' -import { AbstractControl, AbstractFormGroupDirective, FormArray, FormGroup } from '@angular/forms' +import { AbstractFormGroupDirective, FormArray, FormGroup } from '@angular/forms' import { AlertButton, AlertController, IonicSafeString, ModalController } from '@ionic/angular' -import { ConfigSpec, ListValueSpecOf, ListValueSpecString, ValueSpec, ValueSpecBoolean, ValueSpecEnum, ValueSpecList, ValueSpecListOf, ValueSpecNumber, ValueSpecString, ValueSpecUnion } from 'src/app/pkg-config/config-types' +import { ConfigSpec, ListValueSpecOf, ValueSpec, ValueSpecBoolean, ValueSpecList, ValueSpecListOf, ValueSpecUnion } from 'src/app/pkg-config/config-types' import { FormService } from 'src/app/services/form.service' import { Range } from 'src/app/pkg-config/config-utilities' import { EnumListPage } from 'src/app/modals/enum-list/enum-list.page' -const Mustache = require('mustache') import { pauseFor } from 'src/app/util/misc.util' +const Mustache = require('mustache') @Component({ selector: 'form-object', @@ -76,6 +76,7 @@ export class FormObjectComponent { addListItem (key: string, markDirty = true, val?: string): void { const arr = this.formGroup.get(key) as FormArray if (markDirty) arr.markAsDirty() + // @TODO why are these commented out? // const validators = this.formService.getListItemValidators(this.objectSpec[key] as ValueSpecList, key, arr.length) // arr.push(new FormControl(value, validators)) const listSpec = this.objectSpec[key] as ValueSpecList @@ -225,8 +226,9 @@ export class FormObjectComponent { interface HeaderData { spec: ValueSpec - isEdited: boolean - isNew: boolean + edited: boolean + new: boolean + invalid?: boolean } @Component({ diff --git a/ui/src/app/modals/app-config/app-config.page.html b/ui/src/app/modals/app-config/app-config.page.html index 32db6cd0b..2bfba9a4b 100644 --- a/ui/src/app/modals/app-config/app-config.page.html +++ b/ui/src/app/modals/app-config/app-config.page.html @@ -38,33 +38,23 @@
- - - -

- - - - - {{ rec.dependentTitle }} -

-
-

{{ pkg.manifest.title }} config has been modified to satisfy {{ rec.dependentTitle }}. - To accept the changes, click “Save” above. -

- More Info - -

- hide -
- - - -
-
-
- -
+ + + +

+ + {{ pkg.manifest.title }} +

+

+ + {{ pkg.manifest.title }} has been modified to satisfy {{ dependentInfo.title }}. +
+
+ To accept the modifications, click "Save". +
+

+
+
@@ -78,7 +68,7 @@ diff --git a/ui/src/app/modals/app-config/app-config.page.ts b/ui/src/app/modals/app-config/app-config.page.ts index d8c06aab7..2a85f8b96 100644 --- a/ui/src/app/modals/app-config/app-config.page.ts +++ b/ui/src/app/modals/app-config/app-config.page.ts @@ -1,7 +1,7 @@ import { Component, Input, ViewChild } from '@angular/core' import { AlertController, ModalController, IonContent, LoadingController, IonicSafeString } from '@ionic/angular' import { ApiService } from 'src/app/services/api/embassy-api.service' -import { isEmptyObject, isObject, Recommendation } from 'src/app/util/misc.util' +import { DependentInfo, isEmptyObject } from 'src/app/util/misc.util' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' import { ConfigSpec } from 'src/app/pkg-config/config-types' @@ -10,6 +10,7 @@ import { PatchDbService } from 'src/app/services/patch-db/patch-db.service' import { ErrorToastService, getErrorMessage } from 'src/app/services/error-toast.service' import { FormGroup } from '@angular/forms' import { convertValuesRecursive, FormService } from 'src/app/services/form.service' +import { compare, Operation } from 'fast-json-patch' @Component({ selector: 'app-config', @@ -19,16 +20,14 @@ import { convertValuesRecursive, FormService } from 'src/app/services/form.servi export class AppConfigPage { @ViewChild(IonContent) content: IonContent @Input() pkgId: string - @Input() rec: Recommendation | null = null + @Input() dependentInfo?: DependentInfo pkg: PackageDataEntry loadingText: string | undefined configSpec: ConfigSpec configForm: FormGroup - current: object + original: object hasConfig = false saving = false - showRec = true - openRec = false loadingError: string | IonicSafeString constructor ( @@ -49,23 +48,32 @@ export class AppConfigPage { if (!this.hasConfig) return try { - let oldConfig: object let newConfig: object let spec: ConfigSpec - if (this.rec) { - this.loadingText = `Setting properties to accommodate ${this.rec.dependentTitle}` - const { 'old-config': oc, 'new-config': nc, spec: s } = await this.embassyApi.dryConfigureDependency({ 'dependency-id': this.pkgId, 'dependent-id': this.rec.dependentId }) + let patch: Operation[] + if (this.dependentInfo) { + this.loadingText = `Setting properties to accommodate ${this.dependentInfo.title}` + const { 'old-config': oc, 'new-config': nc, spec: s } = await this.embassyApi.dryConfigureDependency({ 'dependency-id': this.pkgId, 'dependent-id': this.dependentInfo.id }) oldConfig = oc newConfig = nc spec = s + patch = compare(oldConfig, newConfig) } else { this.loadingText = 'Loading Config' - const { config: oc, spec: s } = await this.embassyApi.getPackageConfig({ id: this.pkgId }) - oldConfig = oc + const { config: c, spec: s } = await this.embassyApi.getPackageConfig({ id: this.pkgId }) + oldConfig = c spec = s } - this.setConfig(spec, oldConfig, newConfig) + + this.original = oldConfig + this.configSpec = spec + this.configForm = this.formService.createForm(spec, newConfig || oldConfig) + this.configForm.markAllAsTouched() + + if (patch) { + this.markDirty(patch) + } } catch (e) { this.loadingError = getErrorMessage(e) } finally { @@ -79,11 +87,8 @@ export class AppConfigPage { resetDefaults () { this.configForm = this.formService.createForm(this.configSpec) - this.alterConfigRecursive(this.configForm, this.current) - } - - dismissRec () { - this.showRec = false + const patch = compare(this.original, this.configForm.value) + this.markDirty(patch) } async dismiss () { @@ -143,33 +148,20 @@ export class AppConfigPage { } } - private setConfig (spec: ConfigSpec, config: object, depConfig?: object) { - this.configSpec = spec - this.current = config - this.configForm = this.formService.createForm(spec, { ...config, ...depConfig }) - this.configForm.markAllAsTouched() + private markDirty (patch: Operation[]) { + patch.forEach(op => { + const arrPath = op.path.substring(1) + .split('/') + .map(node => { + const num = Number(node) + return isNaN(num) ? node : num + }) - if (depConfig) { - this.alterConfigRecursive(this.configForm, depConfig) - } - } + if (op.op !== 'remove') this.configForm.get(arrPath).markAsDirty() - private alterConfigRecursive (group: FormGroup, config: object) { - Object.keys(config).forEach(key => { - const next = group.get(key) - if (!next) throw new Error('Dependency config not compatible with service version. Please contact support') - const newVal = config[key] - // check if val is an object - if (isObject(newVal)) { - this.alterConfigRecursive(next as FormGroup, newVal) - } else { - let val1 = group.get(key).value - let val2 = config[key] - if (Array.isArray(newVal)) { - val1 = JSON.stringify(val1) - val2 = JSON.stringify(val2) - } - if (val1 != val2) next.markAsDirty() + if (typeof arrPath[arrPath.length - 1] === 'number') { + const prevPath = arrPath.slice(0, arrPath.length - 1) + this.configForm.get(prevPath).markAsDirty() } }) } diff --git a/ui/src/app/modals/enum-list/enum-list.page.ts b/ui/src/app/modals/enum-list/enum-list.page.ts index 790e892ad..6e13684da 100644 --- a/ui/src/app/modals/enum-list/enum-list.page.ts +++ b/ui/src/app/modals/enum-list/enum-list.page.ts @@ -1,7 +1,6 @@ import { Component, Input } from '@angular/core' import { ModalController } from '@ionic/angular' import { ValueSpecListOf } from '../../pkg-config/config-types' -// import { Range } from '../../pkg-config/config-utilities' @Component({ selector: 'enum-list', @@ -13,12 +12,6 @@ export class EnumListPage { @Input() spec: ValueSpecListOf<'enum'> @Input() current: string[] options: { [option: string]: boolean } = { } - - // min: number | undefined - // max: number | undefined - // minMessage: string - // maxMessage: string - selectAll = true constructor ( @@ -26,12 +19,6 @@ export class EnumListPage { ) { } ngOnInit () { - // const range = Range.from(this.spec.range) - // this.min = range.integralMin() - // this.max = range.integralMax() - // this.minMessage = `The minimum number of ${this.key} is ${this.min}.` - // this.maxMessage = `The maximum number of ${this.key} is ${this.max}.` - for (let val of this.spec.spec.values) { this.options[val] = this.current.includes(val) } diff --git a/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts index a852cf6be..6aecde6a4 100644 --- a/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts +++ b/ui/src/app/pages/apps-routes/app-properties/app-properties.page.ts @@ -9,7 +9,7 @@ import { QRComponent } from 'src/app/components/qr/qr.component' import { PatchDbService } from 'src/app/services/patch-db/patch-db.service' import { PackageMainStatus } from 'src/app/services/patch-db/data-model' import { ErrorToastService } from 'src/app/services/error-toast.service' -import * as JsonPointer from 'json-pointer' +import { getValueByPointer } from 'fast-json-patch' @Component({ selector: 'app-properties', @@ -49,7 +49,7 @@ export class AppPropertiesPage { .subscribe(queryParams => { if (queryParams['pointer'] === this.pointer) return this.pointer = queryParams['pointer'] - this.node = JsonPointer.get(this.properties, this.pointer || '') + this.node = getValueByPointer(this.properties, this.pointer || '') }), this.patch.watch$('package-data', this.pkgId, 'installed', 'status', 'main', 'status') .subscribe(status => { @@ -119,7 +119,7 @@ export class AppPropertiesPage { this.loading = true try { this.properties = await this.embassyApi.getPackageProperties({ id: this.pkgId }) - this.node = JsonPointer.get(this.properties, this.pointer || '') + this.node = getValueByPointer(this.properties, this.pointer || '') } catch (e) { this.errToast.present(e) } finally { diff --git a/ui/src/app/pages/apps-routes/app-show/app-show.page.html b/ui/src/app/pages/apps-routes/app-show/app-show.page.html index 41125288f..ad2a4404f 100644 --- a/ui/src/app/pages/apps-routes/app-show/app-show.page.html +++ b/ui/src/app/pages/apps-routes/app-show/app-show.page.html @@ -100,7 +100,6 @@ {{ dep.errorText || 'satisfied' }}

- {{ dep.actionText }} diff --git a/ui/src/app/pages/apps-routes/app-show/app-show.page.ts b/ui/src/app/pages/apps-routes/app-show/app-show.page.ts index 7e0b5f06b..e3ea77fa7 100644 --- a/ui/src/app/pages/apps-routes/app-show/app-show.page.ts +++ b/ui/src/app/pages/apps-routes/app-show/app-show.page.ts @@ -2,13 +2,13 @@ import { Component, ViewChild } from '@angular/core' import { AlertController, NavController, ModalController, IonContent, LoadingController } from '@ionic/angular' import { ApiService } from 'src/app/services/api/embassy-api.service' import { ActivatedRoute, NavigationExtras } from '@angular/router' -import { exists, isEmptyObject, Recommendation } from 'src/app/util/misc.util' -import { Subscription } from 'rxjs' +import { DependentInfo, exists, isEmptyObject } from 'src/app/util/misc.util' +import { combineLatest, Subscription } from 'rxjs' import { wizardModal } from 'src/app/components/install-wizard/install-wizard.component' import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' import { ConfigService } from 'src/app/services/config.service' import { PatchDbService } from 'src/app/services/patch-db/patch-db.service' -import { DependencyErrorConfigUnsatisfied, DependencyErrorType, HealthCheckResult, HealthResult, PackageDataEntry, PackageMainStatus, PackageState } from 'src/app/services/patch-db/data-model' +import { DependencyError, DependencyErrorType, HealthCheckResult, HealthResult, PackageDataEntry, PackageMainStatus, PackageState } from 'src/app/services/patch-db/data-model' import { DependencyStatus, HealthStatus, PrimaryRendering, PrimaryStatus, renderPkgStatus } from 'src/app/services/pkg-status-rendering.service' import { ConnectionFailure, ConnectionService } from 'src/app/services/connection.service' import { ErrorToastService } from 'src/app/services/error-toast.service' @@ -83,34 +83,18 @@ export class AppShowPage { }), // 2 - this.patch.watch$('package-data', this.pkgId, 'installed', 'current-dependencies') + combineLatest([ + this.patch.watch$('package-data', this.pkgId, 'installed', 'current-dependencies'), + this.patch.watch$('package-data', this.pkgId, 'installed', 'status', 'dependency-errors'), + ]) .pipe( - filter(obj => exists(obj)), + filter(([currentDeps, depErrors]) => exists(currentDeps) && exists(depErrors)), ) - .subscribe(currentDeps => { - // remove deleted - this.dependencies.forEach((dep, i) => { - if (!currentDeps[dep.id]) { - dep.sub.unsubscribe() - this.dependencies.splice(i, 1) - } - }) - - // subscribe - Object.keys(currentDeps) - .filter(id => { - const inManifest = !!this.pkg.manifest.dependencies[id] - const exists = this.dependencies.find(d => d.id === id) - return inManifest && !exists - }) - .forEach(id => { - const version = this.pkg.manifest.dependencies[id].version - const dep = { id, version } as DependencyInfo - dep.sub = this.patch.watch$('package-data', id) - .subscribe(localDep => { - this.setDepValues(dep, localDep) - }) - this.dependencies.push(dep) + .subscribe(([currentDeps, depErrors]) => { + this.dependencies = Object.keys(currentDeps) + .filter(id => !!this.pkg.manifest.dependencies[id]) + .map(id => { + return this.setDepValues(id, depErrors) }) }), @@ -142,9 +126,6 @@ export class AppShowPage { ngOnDestroy () { this.subs.forEach(sub => sub.unsubscribe()) - this.dependencies.forEach(dep => { - dep.sub.unsubscribe() - }) } launchUi (): void { @@ -213,7 +194,7 @@ export class AppShowPage { } } - async presentModalConfig (props: { pkgId: string, rec?: Recommendation }): Promise { + async presentModalConfig (props: { pkgId: string, dependentInfo?: DependentInfo }): Promise { const modal = await this.modalCtrl.create({ component: AppConfigPage, componentProps: props, @@ -221,36 +202,27 @@ export class AppShowPage { await modal.present() } - private setDepValues (dep: DependencyInfo, localDep: PackageDataEntry | undefined): void { + private setDepValues (id: string, errors: { [id: string]: DependencyError }): DependencyInfo { let errorText = '' - let spinnerColor = '' let actionText = 'View' - let action: () => any = () => this.navCtrl.navigateForward(`/services/${dep.id}`) + let action: () => any = () => this.navCtrl.navigateForward(`/services/${id}`) - const error = this.pkg.installed.status['dependency-errors'][dep.id] + const error = errors[id] if (error) { // health checks failed if ([DependencyErrorType.InterfaceHealthChecksFailed, DependencyErrorType.HealthChecksFailed].includes(error.type)) { errorText = 'Health check failed' - // not fully installed (same as !localDep?.installed) + // not installed } else if (error.type === DependencyErrorType.NotInstalled) { - if (localDep) { - errorText = localDep.state // 'Installing' | 'Removing' - } else { - errorText = 'Not installed' - actionText = 'Install' - action = () => this.fixDep('install', dep.id) - } + errorText = 'Not installed' + actionText = 'Install' + action = () => this.fixDep('install', id) // incorrect version } else if (error.type === DependencyErrorType.IncorrectVersion) { - if (localDep) { - errorText = localDep.state // 'Updating' | 'Removing' - } else { - errorText = 'Incorrect version' - actionText = 'Update' - action = () => this.fixDep('update', dep.id) - } + errorText = 'Incorrect version' + actionText = 'Update' + action = () => this.fixDep('update', id) // not running } else if (error.type === DependencyErrorType.NotRunning) { errorText = 'Not running' @@ -259,60 +231,50 @@ export class AppShowPage { } else if (error.type === DependencyErrorType.ConfigUnsatisfied) { errorText = 'Config not satisfied' actionText = 'Auto config' - action = () => this.fixDep('configure', dep.id) + action = () => this.fixDep('configure', id) } else if (error.type === DependencyErrorType.Transitive) { errorText = 'Dependency has a dependency issue' } - - if (localDep && localDep.state !== PackageState.Installed) { - spinnerColor = localDep.state === PackageState.Removing ? 'danger' : 'primary' - } } - const depInfo = this.pkg.installed['dependency-info'][dep.id] + const depInfo = this.pkg.installed['dependency-info'][id] - Object.assign(dep, { + return { + id, + version: this.pkg.manifest.dependencies[id].version, title: depInfo.manifest.title, icon: depInfo.icon, errorText, actionText, - spinnerColor, action, - }) + } } private async installDep (depId: string): Promise { - const title = this.pkg.installed['dependency-info'][depId].manifest.title const version = this.pkg.manifest.dependencies[depId].version - const dependentTitle = this.pkg.manifest.title - const installRec: Recommendation = { - dependentId: this.pkgId, - dependentTitle, - dependentIcon: this.pkg['static-files'].icon, + const dependentInfo: DependentInfo = { + id: this.pkgId, + title: this.pkg.manifest.title, version, - description: `${dependentTitle} requires an install of ${title} satisfying ${version}.`, } const navigationExtras: NavigationExtras = { - state: { installRec }, + state: { dependentInfo }, } await this.navCtrl.navigateForward(`/marketplace/${depId}`, navigationExtras) } - private async configureDep (depId: string): Promise { - const configRecommendation: Recommendation = { - dependentId: this.pkgId, - dependentTitle: this.pkg.manifest.title, - dependentIcon: this.pkg['static-files'].icon, - description: (this.pkg.installed.status['dependency-errors'][depId] as DependencyErrorConfigUnsatisfied).error, - } - const params = { - pkgId: depId, - rec: configRecommendation, + private async configureDep (dependencyId: string): Promise { + const dependentInfo: DependentInfo = { + id: this.pkgId, + title: this.pkg.manifest.title, } - await this.presentModalConfig(params) + await this.presentModalConfig({ + pkgId: dependencyId, + dependentInfo, + }) } private async presentAlertStart (message: string): Promise { @@ -434,10 +396,8 @@ interface DependencyInfo { icon: string version: string errorText: string - spinnerColor: string actionText: string action: () => any - sub: Subscription } interface Button { diff --git a/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html b/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html index 32f9a70ff..8870ae2a5 100644 --- a/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html +++ b/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.html @@ -72,23 +72,21 @@ - - + +

- - - - {{ rec.dependentTitle }} + {{ pkg.manifest.title }}

-
-

{{ rec.description }}

-

{{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is compatible.

-

{{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is NOT compatible.

- - - -
+

+ + {{ dependentInfo.title }} requires an install of {{ pkg.manifest.title }} satisfying {{ dependentInfo.version }}. +
+
+ {{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is compatible. + {{ pkg.manifest.title }} version {{ pkg.manifest.version | displayEmver }} is NOT compatible. +
+

diff --git a/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.ts b/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.ts index 7cd3a7852..5ac6da8d7 100644 --- a/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.ts +++ b/ui/src/app/pages/marketplace-routes/marketplace-show/marketplace-show.page.ts @@ -5,7 +5,7 @@ import { wizardModal } from 'src/app/components/install-wizard/install-wizard.co import { WizardBaker } from 'src/app/components/install-wizard/prebaked-wizards' import { Emver } from 'src/app/services/emver.service' import { displayEmver } from 'src/app/pipes/emver.pipe' -import { pauseFor, Recommendation } from 'src/app/util/misc.util' +import { DependentInfo, pauseFor } from 'src/app/util/misc.util' import { PatchDbService } from 'src/app/services/patch-db/patch-db.service' import { ErrorToastService } from 'src/app/services/error-toast.service' import { PackageDataEntry, PackageState } from 'src/app/services/patch-db/data-model' @@ -27,8 +27,7 @@ export class MarketplaceShowPage { pkg: MarketplacePkg localPkg: PackageDataEntry PackageState = PackageState - rec: Recommendation | null = null - showRec = true + dependentInfo: DependentInfo subs: Subscription[] = [] constructor ( @@ -47,7 +46,7 @@ export class MarketplaceShowPage { async ngOnInit () { this.pkgId = this.route.snapshot.paramMap.get('pkgId') - this.rec = history.state && history.state.installRec as Recommendation + this.dependentInfo = history.state && history.state.dependentInfo as DependentInfo this.subs = [ this.patch.watch$('package-data', this.pkgId) @@ -171,10 +170,6 @@ export class MarketplaceShowPage { this.navCtrl.back() } - dismissRec () { - this.showRec = false - } - private async getPkg (version?: string): Promise { this.loading = true try { diff --git a/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts b/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts index 591ff2c04..94fccd4e3 100644 --- a/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts +++ b/ui/src/app/pages/server-routes/server-backup/server-backup.page.ts @@ -84,7 +84,7 @@ export class ServerBackupPage { take(1), ) .subscribe(pkgs => { - const pkgArr = Object.values(pkgs) + const pkgArr = Object.keys(pkgs).sort().map(key => pkgs[key]) const activeIndex = pkgArr.findIndex(pkg => pkg.installed.status.main.status === PackageMainStatus.BackingUp) this.pkgs = pkgArr.map((pkg, i) => { diff --git a/ui/src/app/services/api/api.fixures.ts b/ui/src/app/services/api/api.fixures.ts index b2cfdf1cb..9d6aa8422 100644 --- a/ui/src/app/services/api/api.fixures.ts +++ b/ui/src/app/services/api/api.fixures.ts @@ -1,5 +1,6 @@ import { DependencyErrorType, DockerIoFormat, Manifest, PackageDataEntry, PackageMainStatus, PackageState } from 'src/app/services/patch-db/data-model' import { Log, MarketplacePkg, Metric, NotificationLevel, RR, ServerNotifications } from './api.types' +import { Operation } from 'fast-json-patch' export module Mock { @@ -1081,405 +1082,21 @@ export module Mock { }, } as any // @TODO why is this necessary? - export const PackageConfig: RR.GetPackageConfigRes = { - // config spec - spec: { - 'testnet': { - 'name': 'Testnet', - 'type': 'boolean', - 'description': 'determines whether your node is running on testnet or mainnet', - 'warning': 'Chain will have to resync!', - 'default': true, - }, - 'object-list': { - 'name': 'Object List', - 'type': 'list', - 'subtype': 'object', - 'description': 'This is a list of objects, like users or something', - 'range': '[0,4]', - 'default': [ - { - 'first-name': 'Admin', - 'last-name': 'User', - 'age': 40, - }, - { - 'first-name': 'Admin2', - 'last-name': 'User', - 'age': 40, - }, - ], - // the outer spec here, at the list level, says that what's inside (the inner spec) pertains to its inner elements. - // it just so happens that ValueSpecObject's have the field { spec: ConfigSpec } - // see 'union-list' below for a different example. - 'spec': { - 'unique-by': 'last-name', - 'display-as': `I'm {{last-name}}, {{first-name}} {{last-name}}`, - 'spec': { - 'first-name': { - 'name': 'First Name', - 'type': 'string', - 'description': 'User first name', - 'nullable': true, - 'default': null, - 'masked': false, - 'copyable': false, - }, - 'last-name': { - 'name': 'Last Name', - 'type': 'string', - 'description': 'User first name', - 'nullable': true, - 'default': { - 'charset': 'a-g,2-9', - 'len': 12, - }, - 'pattern': '^[a-zA-Z]+$', - 'pattern-description': 'must contain only letters.', - 'masked': false, - 'copyable': true, - }, - 'age': { - 'name': 'Age', - 'type': 'number', - 'description': 'The age of the user', - 'nullable': true, - 'default': null, - 'integral': false, - 'warning': 'User must be at least 18.', - 'range': '[18,*)', - }, - }, - }, - }, - 'union-list': { - 'name': 'Union List', - 'type': 'list', - 'subtype': 'union', - 'description': 'This is a sample list of unions', - 'warning': 'If you change this, things may work.', - // a list of union selections. e.g. 'summer', 'winter',... - 'default': [ - 'summer', - ], - 'range': '[0, 2]', - 'spec': { - 'tag': { - 'id': 'preference', - 'name': 'Preferences', - 'variant-names': { - 'summer': 'Summer', - 'winter': 'Winter', - 'other': 'Other', - }, - }, - // this default is used to make a union selection when a new list element is first created - 'default': 'summer', - 'variants': { - 'summer': { - 'favorite-tree': { - 'name': 'Favorite Tree', - 'type': 'string', - 'nullable': false, - 'description': 'What is your favorite tree?', - 'default': 'Maple', - 'masked': false, - 'copyable': false, - }, - 'favorite-flower': { - 'name': 'Favorite Flower', - 'type': 'enum', - 'description': 'Select your favorite flower', - 'value-names': { - 'none': 'Hate Flowers', - 'red': 'Red', - 'blue': 'Blue', - 'purple': 'Purple', - }, - 'values': [ - 'none', - 'red', - 'blue', - 'purple', - ], - 'default': 'none', - }, - }, - 'winter': { - 'like-snow': { - 'name': 'Like Snow?', - 'type': 'boolean', - 'description': 'Do you like snow or not?', - 'default': true, - }, - }, - }, - 'unique-by': 'preference', - }, - }, - 'random-enum': { - 'name': 'Random Enum', - 'type': 'enum', - 'value-names': { - 'null': 'Null', - 'option1': 'One 1', - 'option2': 'Two 2', - 'option3': 'Three 3', - }, - 'default': 'null', - 'description': 'This is not even real.', - 'warning': 'Be careful changing this!', - 'values': [ - 'null', - 'option1', - 'option2', - 'option3', - ], - }, - 'favorite-number': { - 'name': 'Favorite Number', - 'type': 'number', - 'integral': false, - 'description': 'Your favorite number of all time', - 'warning': 'Once you set this number, it can never be changed without severe consequences.', - 'nullable': true, - 'default': 7, - 'range': '(-100,100]', - 'units': 'BTC', - }, - 'unlucky-numbers': { - 'name': 'Unlucky Numbers', - 'type': 'list', - 'subtype': 'number', - 'description': 'Numbers that you like but are not your top favorite.', - 'spec': { - 'integral': false, - 'range': '[-100,200)', - }, - 'range': '[0,10]', - 'default': [ - 2, - 3, - ], - }, - 'rpcsettings': { - 'name': 'RPC Settings', - 'type': 'object', - 'unique-by': null, - 'description': 'rpc username and password', - 'warning': 'Adding RPC users gives them special permissions on your node.', - 'spec': { - 'laws': { - 'name': 'Laws', - 'type': 'object', - 'unique-by': 'law1', - 'description': 'the law of the realm', - 'spec': { - 'law1': { - 'name': 'First Law', - 'type': 'string', - 'description': 'the first law', - 'nullable': true, - 'masked': false, - 'copyable': true, - }, - 'law2': { - 'name': 'Second Law', - 'type': 'string', - 'description': 'the second law', - 'nullable': true, - 'masked': false, - 'copyable': true, - }, - }, - }, - 'rulemakers': { - 'name': 'Rule Makers', - 'type': 'list', - 'subtype': 'object', - 'description': 'the people who make the rules', - 'range': '[0,2]', - 'default': [], - 'spec': { - 'unique-by': null, - 'spec': { - 'rulemakername': { - 'name': 'Rulemaker Name', - 'type': 'string', - 'description': 'the name of the rule maker', - 'nullable': false, - 'default': { - 'charset': 'a-g,2-9', - 'len': 12, - }, - 'masked': false, - 'copyable': false, - }, - 'rulemakerip': { - 'name': 'Rulemaker IP', - 'type': 'string', - 'description': 'the ip of the rule maker', - 'nullable': false, - 'default': '192.168.1.0', - 'pattern': '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$', - 'pattern-description': 'may only contain numbers and periods', - 'masked': false, - 'copyable': true, - }, - }, - }, - }, - 'rpcuser': { - 'name': 'RPC Username', - 'type': 'string', - 'description': 'rpc username', - 'nullable': false, - 'default': 'defaultrpcusername', - 'pattern': '^[a-zA-Z]+$', - 'pattern-description': 'must contain only letters.', - 'masked': false, - 'copyable': true, - }, - 'rpcpass': { - 'name': 'RPC User Password', - 'type': 'string', - 'description': 'rpc password', - 'nullable': false, - 'default': { - 'charset': 'a-z,A-Z,2-9', - 'len': 20, - }, - 'masked': true, - 'copyable': true, - }, - }, - }, - 'advanced': { - 'name': 'Advanced', - 'type': 'object', - 'unique-by': null, - 'description': 'Advanced settings', - 'spec': { - 'notifications': { - 'name': 'Notification Preferences', - 'type': 'list', - 'subtype': 'enum', - 'description': 'how you want to be notified', - 'range': '[1,3]', - 'default': [ - 'email', - ], - 'spec': { - 'value-names': { - 'email': 'EEEEmail', - 'text': 'Texxxt', - 'call': 'Ccccall', - 'push': 'PuuuusH', - 'webhook': 'WebHooookkeee', - }, - 'values': [ - 'email', - 'text', - 'call', - 'push', - 'webhook', - ], - }, - }, - }, - }, - 'bitcoin-node': { - 'name': 'Bitcoin Node Settings', - 'type': 'union', - 'unique-by': null, - 'description': 'The node settings', - 'default': 'internal', - 'warning': 'Careful changing this', - 'tag': { - 'id': 'type', - 'name': 'Type', - 'variant-names': { - 'internal': 'Internal', - 'external': 'External', - }, - }, - 'variants': { - 'internal': { - 'lan-address': { - 'name': 'LAN Address', - 'type': 'pointer', - 'subtype': 'app', - 'target': 'lan-address', - 'app-id': 'bitcoind', - 'description': 'the lan address', - }, - }, - 'external': { - 'public-domain': { - 'name': 'Public Domain', - 'type': 'string', - 'description': 'the public address of the node', - 'nullable': false, - 'default': 'bitcoinnode.com', - 'pattern': '.*', - 'pattern-description': 'anything', - 'masked': false, - 'copyable': true, - }, - }, - }, - }, - 'port': { - 'name': 'Port', - 'type': 'number', - 'integral': true, - 'description': 'the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444', - 'nullable': false, - 'default': 8333, - 'range': '(0, 9998]', - }, - 'favorite-slogan': { - 'name': 'Favorite Slogan', - 'type': 'string', - 'description': 'You most favorite slogan in the whole world, used for paying you.', - 'nullable': true, - 'masked': true, - 'copyable': true, - }, - 'rpcallowip': { - 'name': 'RPC Allowed IPs', - 'type': 'list', - 'subtype': 'string', - 'description': 'external ip addresses that are authorized to access your Bitcoin node', - 'warning': 'Any IP you allow here will have RPC access to your Bitcoin node.', - 'range': '[1,10]', - 'default': [ - '192.168.1.1', - ], - 'spec': { - 'masked': false, - 'copyable': false, - 'pattern': '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))', - 'pattern-description': 'must be a valid ipv4, ipv6, or domain name', - }, - }, - 'rpcauth': { - 'name': 'RPC Auth', - 'type': 'list', - 'subtype': 'string', - 'description': 'api keys that are authorized to access your Bitcoin node.', - 'range': '[0,*)', - 'default': [], - 'spec': { - 'masked': false, - 'copyable': false, - }, - }, + export const ConfigSpec: RR.GetPackageConfigRes['spec'] = { + 'testnet': { + 'name': 'Testnet', + 'type': 'boolean', + 'description': 'determines whether your node is running on testnet or mainnet', + 'warning': 'Chain will have to resync!', + 'default': true, }, - // actual config - config: { - testnet: false, - 'object-list': [ + 'object-list': { + 'name': 'Object List', + 'type': 'list', + 'subtype': 'object', + 'description': 'This is a list of objects, like users or something', + 'range': '[0,4]', + 'default': [ { 'first-name': 'Admin', 'last-name': 'User', @@ -1491,51 +1108,462 @@ export module Mock { 'age': 40, }, ], - 'union-list': undefined, - 'random-enum': 'option1', - 'favorite-number': null, - 'secondary-numbers': undefined, - rpcsettings: { - laws: { - law1: 'The first law', - law2: 'The second law', + // the outer spec here, at the list level, says that what's inside (the inner spec) pertains to its inner elements. + // it just so happens that ValueSpecObject's have the field { spec: ConfigSpec } + // see 'union-list' below for a different example. + 'spec': { + 'unique-by': 'last-name', + 'display-as': `I'm {{last-name}}, {{first-name}} {{last-name}}`, + 'spec': { + 'first-name': { + 'name': 'First Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': null, + 'masked': false, + 'copyable': false, + }, + 'last-name': { + 'name': 'Last Name', + 'type': 'string', + 'description': 'User first name', + 'nullable': true, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'pattern': '^[a-zA-Z]+$', + 'pattern-description': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'age': { + 'name': 'Age', + 'type': 'number', + 'description': 'The age of the user', + 'nullable': true, + 'default': null, + 'integral': false, + 'warning': 'User must be at least 18.', + 'range': '[18,*)', + }, }, - rpcpass: null, - rpcuser: '123', - rulemakers: [], }, - advanced: { - notifications: ['email'], + }, + 'union-list': { + 'name': 'Union List', + 'type': 'list', + 'subtype': 'union', + 'description': 'This is a sample list of unions', + 'warning': 'If you change this, things may work.', + // a list of union selections. e.g. 'summer', 'winter',... + 'default': [ + 'summer', + ], + 'range': '[0, 2]', + 'spec': { + 'tag': { + 'id': 'preference', + 'name': 'Preferences', + 'variant-names': { + 'summer': 'Summer', + 'winter': 'Winter', + 'other': 'Other', + }, + }, + // this default is used to make a union selection when a new list element is first created + 'default': 'summer', + 'variants': { + 'summer': { + 'favorite-tree': { + 'name': 'Favorite Tree', + 'type': 'string', + 'nullable': false, + 'description': 'What is your favorite tree?', + 'default': 'Maple', + 'masked': false, + 'copyable': false, + }, + 'favorite-flower': { + 'name': 'Favorite Flower', + 'type': 'enum', + 'description': 'Select your favorite flower', + 'value-names': { + 'none': 'Hate Flowers', + 'red': 'Red', + 'blue': 'Blue', + 'purple': 'Purple', + }, + 'values': [ + 'none', + 'red', + 'blue', + 'purple', + ], + 'default': 'none', + }, + }, + 'winter': { + 'like-snow': { + 'name': 'Like Snow?', + 'type': 'boolean', + 'description': 'Do you like snow or not?', + 'default': true, + }, + }, + }, + 'unique-by': 'preference', + }, + }, + 'random-enum': { + 'name': 'Random Enum', + 'type': 'enum', + 'value-names': { + 'null': 'Null', + 'option1': 'One 1', + 'option2': 'Two 2', + 'option3': 'Three 3', + }, + 'default': 'null', + 'description': 'This is not even real.', + 'warning': 'Be careful changing this!', + 'values': [ + 'null', + 'option1', + 'option2', + 'option3', + ], + }, + 'favorite-number': { + 'name': 'Favorite Number', + 'type': 'number', + 'integral': false, + 'description': 'Your favorite number of all time', + 'warning': 'Once you set this number, it can never be changed without severe consequences.', + 'nullable': true, + 'default': 7, + 'range': '(-100,100]', + 'units': 'BTC', + }, + 'unlucky-numbers': { + 'name': 'Unlucky Numbers', + 'type': 'list', + 'subtype': 'number', + 'description': 'Numbers that you like but are not your top favorite.', + 'spec': { + 'integral': false, + 'range': '[-100,200)', + }, + 'range': '[0,10]', + 'default': [ + 2, + 3, + ], + }, + 'rpcsettings': { + 'name': 'RPC Settings', + 'type': 'object', + 'unique-by': null, + 'description': 'rpc username and password', + 'warning': 'Adding RPC users gives them special permissions on your node.', + 'spec': { + 'laws': { + 'name': 'Laws', + 'type': 'object', + 'unique-by': 'law1', + 'description': 'the law of the realm', + 'spec': { + 'law1': { + 'name': 'First Law', + 'type': 'string', + 'description': 'the first law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + 'law2': { + 'name': 'Second Law', + 'type': 'string', + 'description': 'the second law', + 'nullable': true, + 'masked': false, + 'copyable': true, + }, + }, + }, + 'rulemakers': { + 'name': 'Rule Makers', + 'type': 'list', + 'subtype': 'object', + 'description': 'the people who make the rules', + 'range': '[0,2]', + 'default': [], + 'spec': { + 'unique-by': null, + 'spec': { + 'rulemakername': { + 'name': 'Rulemaker Name', + 'type': 'string', + 'description': 'the name of the rule maker', + 'nullable': false, + 'default': { + 'charset': 'a-g,2-9', + 'len': 12, + }, + 'masked': false, + 'copyable': false, + }, + 'rulemakerip': { + 'name': 'Rulemaker IP', + 'type': 'string', + 'description': 'the ip of the rule maker', + 'nullable': false, + 'default': '192.168.1.0', + 'pattern': '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$', + 'pattern-description': 'may only contain numbers and periods', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'rpcuser': { + 'name': 'RPC Username', + 'type': 'string', + 'description': 'rpc username', + 'nullable': false, + 'default': 'defaultrpcusername', + 'pattern': '^[a-zA-Z]+$', + 'pattern-description': 'must contain only letters.', + 'masked': false, + 'copyable': true, + }, + 'rpcpass': { + 'name': 'RPC User Password', + 'type': 'string', + 'description': 'rpc password', + 'nullable': false, + 'default': { + 'charset': 'a-z,A-Z,2-9', + 'len': 20, + }, + 'masked': true, + 'copyable': true, + }, + }, + }, + 'advanced': { + 'name': 'Advanced', + 'type': 'object', + 'unique-by': null, + 'description': 'Advanced settings', + 'spec': { + 'notifications': { + 'name': 'Notification Preferences', + 'type': 'list', + 'subtype': 'enum', + 'description': 'how you want to be notified', + 'range': '[1,3]', + 'default': [ + 'email', + ], + 'spec': { + 'value-names': { + 'email': 'EEEEmail', + 'text': 'Texxxt', + 'call': 'Ccccall', + 'push': 'PuuuusH', + 'webhook': 'WebHooookkeee', + }, + 'values': [ + 'email', + 'text', + 'call', + 'push', + 'webhook', + ], + }, + }, + }, + }, + 'bitcoin-node': { + 'name': 'Bitcoin Node Settings', + 'type': 'union', + 'unique-by': null, + 'description': 'The node settings', + 'default': 'internal', + 'warning': 'Careful changing this', + 'tag': { + 'id': 'type', + 'name': 'Type', + 'variant-names': { + 'internal': 'Internal', + 'external': 'External', + }, + }, + 'variants': { + 'internal': { + 'lan-address': { + 'name': 'LAN Address', + 'type': 'pointer', + 'subtype': 'app', + 'target': 'lan-address', + 'app-id': 'bitcoind', + 'description': 'the lan address', + }, + }, + 'external': { + 'public-domain': { + 'name': 'Public Domain', + 'type': 'string', + 'description': 'the public address of the node', + 'nullable': false, + 'default': 'bitcoinnode.com', + 'pattern': '.*', + 'pattern-description': 'anything', + 'masked': false, + 'copyable': true, + }, + }, + }, + }, + 'port': { + 'name': 'Port', + 'type': 'number', + 'integral': true, + 'description': 'the default port for your Bitcoin node. default: 8333, testnet: 18333, regtest: 18444', + 'nullable': false, + 'default': 8333, + 'range': '(0, 9998]', + }, + 'favorite-slogan': { + 'name': 'Favorite Slogan', + 'type': 'string', + 'description': 'You most favorite slogan in the whole world, used for paying you.', + 'nullable': true, + 'masked': true, + 'copyable': true, + }, + 'rpcallowip': { + 'name': 'RPC Allowed IPs', + 'type': 'list', + 'subtype': 'string', + 'description': 'external ip addresses that are authorized to access your Bitcoin node', + 'warning': 'Any IP you allow here will have RPC access to your Bitcoin node.', + 'range': '[1,10]', + 'default': [ + '192.168.1.1', + ], + 'spec': { + 'masked': false, + 'copyable': false, + 'pattern': '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|((^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]).){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$)|(^[a-z2-7]{16}\\.onion$)|(^([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$))', + 'pattern-description': 'must be a valid ipv4, ipv6, or domain name', + }, + }, + 'rpcauth': { + 'name': 'RPC Auth', + 'type': 'list', + 'subtype': 'string', + 'description': 'api keys that are authorized to access your Bitcoin node.', + 'range': '[0,*)', + 'default': [], + 'spec': { + 'masked': false, + 'copyable': false, }, - 'bitcoin-node': undefined, - port: 5959, - rpcallowip: undefined, - rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], }, } - export const mockCupsDependentConfig = { - 'random-enum': 'option1', + export const MockConfig = { testnet: false, - 'favorite-number': 8, - 'secondary-numbers': [13, 58, 20], - 'object-list': [], - 'union-list': [], + 'object-list': [ + { + 'first-name': 'First', + 'last-name': 'Last', + 'age': 30, + }, + { + 'first-name': 'First2', + 'last-name': 'Last2', + 'age': 40, + }, + ], + 'union-list': undefined, + 'random-enum': 'option1', + 'favorite-number': null, rpcsettings: { - laws: null, + laws: { + law1: 'The first law', + law2: 'The second law', + }, rpcpass: null, rpcuser: '123', rulemakers: [], }, advanced: { - notifications: [], + notifications: ['email', 'text'], }, - 'bitcoin-Node': { type: 'internal' }, + 'bitcoin-node': undefined, port: 5959, - rpcallowip: [], + rpcallowip: undefined, rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], } + export const MockDependencyConfig = { + testnet: true, + 'object-list': [ + { + 'first-name': 'First', + 'last-name': 'Last', + 'age': 30, + }, + { + 'first-name': 'First2', + 'last-name': 'Last2', + 'age': 40, + }, + { + 'first-name': 'First3', + 'last-name': 'Last3', + 'age': 60, + }, + ], + 'union-list': undefined, + 'random-enum': 'option2', + 'favorite-number': null, + rpcsettings: { + laws: { + law1: 'The first law Amended', + law2: 'The second law', + }, + rpcpass: null, + rpcuser: '123', + rulemakers: [], + }, + advanced: { + notifications: ['email', 'text', 'push'], + }, + 'bitcoin-node': undefined, + port: 20, + rpcallowip: undefined, + rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], + } + + export const Patch: Operation[] = [ + { + op: 'replace', + path: '/testnet', + value: true, + }, + { + op: 'add', + path: '/advanced/notifications/1', + value: 'text', + }, + ] + export const bitcoind: PackageDataEntry = { state: PackageState.Installed, 'static-files': { diff --git a/ui/src/app/services/api/embassy-mock-api.service.ts b/ui/src/app/services/api/embassy-mock-api.service.ts index 52dbb2e10..709546acf 100644 --- a/ui/src/app/services/api/embassy-mock-api.service.ts +++ b/ui/src/app/services/api/embassy-mock-api.service.ts @@ -3,7 +3,7 @@ import { pauseFor } from '../../util/misc.util' import { ApiService } from './embassy-api.service' import { PatchOp } from 'patch-db-client' import { DependencyErrorType, InstallProgress, PackageDataEntry, PackageMainStatus, PackageState, ServerStatus } from 'src/app/services/patch-db/data-model' -import { RR, WithRevision } from './api.types' +import { Log, RR, WithRevision } from './api.types' import { parsePropertiesPermissive } from 'src/app/util/properties.util' import { Mock } from './api.fixures' import { HttpService } from '../http.service' @@ -75,7 +75,7 @@ export class MockApiService extends ApiService { async getServerLogs (params: RR.GetServerLogsReq): Promise { await pauseFor(2000) - let entries + let entries: Log[] if (Math.random() < .2) { entries = Mock.ServerLogs } else { @@ -390,7 +390,10 @@ export class MockApiService extends ApiService { async getPackageConfig (params: RR.GetPackageConfigReq): Promise { await pauseFor(2000) - return Mock.PackageConfig + return { + config: Mock.MockConfig, + spec: Mock.ConfigSpec, + } } async drySetPackageConfig (params: RR.DrySetPackageConfigReq): Promise { @@ -542,32 +545,9 @@ export class MockApiService extends ApiService { async dryConfigureDependency (params: RR.DryConfigureDependencyReq): Promise { await pauseFor(2000) return { - 'old-config': Mock.PackageConfig.config, - spec: Mock.PackageConfig.spec, - 'new-config': { - testnet: true, - // objectList: [], - // unionList: [], - randomEnum: 'option2', - favoriteNumber: 9, - secondaryNumbers: [2, 3, 5, 6], - rpcsettings: { - laws: { - law1: 'The 1st law', - law2: 'The 2nd law', - }, - rpcpass: null, - rpcuser: '123', - rulemakers: [], - }, - advanced: { - notifications: ['call', 'text'], - }, - // bitcoinNode: undefined, - port: 22, - // rpcallowip: undefined, - // rpcauth: ['matt: 8273gr8qwoidm1uid91jeh8y23gdio1kskmwejkdnm'], - }, + 'old-config': Mock.MockConfig, + 'new-config': Mock.MockDependencyConfig, + spec: Mock.ConfigSpec, } } diff --git a/ui/src/app/services/form.service.ts b/ui/src/app/services/form.service.ts index c8cc08bc1..87007c145 100644 --- a/ui/src/app/services/form.service.ts +++ b/ui/src/app/services/form.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core' import { AbstractControl, FormArray, FormBuilder, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators } from '@angular/forms' -import { ConfigSpec, isValueSpecListOf, ListValueSpecNumber, ListValueSpecObject, ListValueSpecString, ListValueSpecUnion, UniqueBy, ValueSpec, ValueSpecEnum, ValueSpecList, ValueSpecListOf, ValueSpecNumber, ValueSpecObject, ValueSpecString, ValueSpecUnion } from '../pkg-config/config-types' +import { ConfigSpec, isValueSpecListOf, ListValueSpecNumber, ListValueSpecObject, ListValueSpecOf, ListValueSpecString, ListValueSpecUnion, UniqueBy, ValueSpec, ValueSpecEnum, ValueSpecList, ValueSpecNumber, ValueSpecObject, ValueSpecString, ValueSpecUnion } from '../pkg-config/config-types' import { getDefaultString, Range } from '../pkg-config/config-utilities' const Mustache = require('mustache') @@ -13,8 +13,8 @@ export class FormService { private readonly formBuilder: FormBuilder, ) { } - createForm (config: ConfigSpec, current: { [key: string]: any } = { }): FormGroup { - return this.getFormGroup(config, [], current) + createForm (spec: ConfigSpec, current: { [key: string]: any } = { }): FormGroup { + return this.getFormGroup(spec, [], current) } getUnionObject (spec: ValueSpecUnion | ListValueSpecUnion, selection: string, current?: { [key: string]: any }): FormGroup { @@ -60,12 +60,12 @@ export class FormService { let group = { } Object.entries(config).map(([key, spec]) => { if (spec.type === 'pointer') return - group[key] = this.getFormEntry(key, spec, current ? current[key] : { }) + group[key] = this.getFormEntry(spec, current ? current[key] : undefined) }) return this.formBuilder.group(group, { validators } ) } - private getFormEntry (key: string, spec: ValueSpec, currentValue: any): FormGroup | FormArray | FormControl { + private getFormEntry (spec: ValueSpec, currentValue?: any): FormGroup | FormArray | FormControl { let validators: ValidatorFn[] let value: any switch (spec.type) { @@ -89,7 +89,7 @@ export class FormService { return this.getFormGroup(spec.spec, [], currentValue) case 'list': validators = this.listValidators(spec) - const mapped = (Array.isArray(currentValue) ? currentValue : spec.default as any[]).map((entry: any, index) => { + const mapped = (Array.isArray(currentValue) ? currentValue : spec.default as any[]).map(entry => { return this.getListItem(spec, entry) }) return this.formBuilder.array(mapped, validators) @@ -139,6 +139,8 @@ export class FormService { validators.push(listInRange(spec.range)) + validators.push(listItemIssue()) + if (!isValueSpecListOf(spec, 'enum')) { validators.push(listUnique(spec)) } @@ -181,29 +183,40 @@ export function isInteger (): ValidatorFn { } export function listInRange (stringRange: string): ValidatorFn { - return (control: AbstractControl): ValidationErrors | null => { + return (control: FormArray): ValidationErrors | null => { try { Range.from(stringRange).checkIncludes(control.value.length) return null } catch (e) { - return { numberNotInRange: { value: `List must be ${e.message}` } } + return { listNotInRange: { value: `List must be ${e.message}` } } + } + } +} + +export function listItemIssue (): ValidatorFn { + return (parentControl: FormArray): ValidationErrors | null => { + const problemChild = parentControl.controls.find(c => c.invalid) + if (problemChild) { + return { listItemIssue: { value: 'Invalid entries' } } + } else { + return null } } } export function listUnique (spec: ValueSpecList): ValidatorFn { - return (control: AbstractControl): ValidationErrors | null => { - for (let idx = 0; idx < control.value.length; idx++) { - for (let idx2 = idx + 1; idx2 < control.value.length; idx2++) { - if (listItemEquals(spec, control.value[idx], control.value[idx2])) { + return (control: FormArray): ValidationErrors | null => { + const list = control.value + for (let idx = 0; idx < list.length; idx++) { + for (let idx2 = idx + 1; idx2 < list.length; idx2++) { + if (listItemEquals(spec, list[idx], list[idx2])) { let display1: string let display2: string - let uniqueMessage = isObjectOrUnion(spec.spec) ? uniqueByMessageWrapper(spec.spec['unique-by'], spec.spec, control.value[idx]) : '' - + let uniqueMessage = isObjectOrUnion(spec.spec) ? uniqueByMessageWrapper(spec.spec['unique-by'], spec.spec, list[idx]) : '' if (isObjectOrUnion(spec.spec) && spec.spec['display-as']) { - display1 = `"${(Mustache as any).render(spec.spec['display-as'], control.value[idx])}"` - display2 = `"${(Mustache as any).render(spec.spec['display-as'], control.value[idx2])}"` + display1 = `"${(Mustache as any).render(spec.spec['display-as'], list[idx])}"` + display2 = `"${(Mustache as any).render(spec.spec['display-as'], list[idx2])}"` } else { display1 = `Entry ${idx + 1}` display2 = `Entry ${idx2 + 1}` @@ -367,7 +380,7 @@ function uniqueByMessage (uniqueBy: UniqueBy, configSpec: ConfigSpec, outermost return outermost || subSpecs.filter(ss => ss).length === 1 ? ret : '(' + ret + ')' } -function isObjectOrUnion (spec: any): spec is ListValueSpecObject | ListValueSpecUnion { +function isObjectOrUnion (spec: ListValueSpecOf): spec is ListValueSpecObject | ListValueSpecUnion { // only lists of objects and unions have unique-by return spec['unique-by'] !== undefined } diff --git a/ui/src/app/util/misc.util.ts b/ui/src/app/util/misc.util.ts index 74e737eb3..92cbf11ca 100644 --- a/ui/src/app/util/misc.util.ts +++ b/ui/src/app/util/misc.util.ts @@ -5,11 +5,9 @@ import { DriveInfo, PartitionInfo } from '../services/api/api.types' export type Omit = Pick> export type PromiseRes = { result: 'resolve', value: T } | { result: 'reject', value: Error } -export type Recommendation = { - dependentId: string - dependentTitle: string - dependentIcon: string, - description: string +export interface DependentInfo { + id: string + title: string version?: string } diff --git a/ui/src/app/util/properties.util.ts b/ui/src/app/util/properties.util.ts index 4da425c71..f8e2c85ab 100644 --- a/ui/src/app/util/properties.util.ts +++ b/ui/src/app/util/properties.util.ts @@ -1,5 +1,5 @@ import * as Ajv from 'ajv' -import { JsonPointer } from 'jsonpointerx' +import { applyOperation } from 'fast-json-patch' const ajv = new Ajv({ jsonPointers: true, allErrors: true, nullable: true }) const ajvWithDefaults = new Ajv({ jsonPointers: true, allErrors: true, useDefaults: true, nullable: true, removeAdditional: 'failing' }) @@ -88,7 +88,7 @@ function parsePropertiesV2Permissive (properties: PackagePropertiesV2, errorCall for (let err of schemaV2Compiled.errors) { errorCallback(new Error(`/data/${idx}${err.dataPath}: ${err.message}`)) if (err.dataPath) { - JsonPointer.set(value, err.dataPath, undefined) + applyOperation(value, { op: 'replace', path: err.dataPath, value: undefined }) } } if (!schemaV2CompiledWithDefaults(value)) {