diff --git a/angular.json b/angular.json index 9eca6b2..b1bcb73 100644 --- a/angular.json +++ b/angular.json @@ -1,5 +1,8 @@ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, "version": 1, "newProjectRoot": "projects", "projects": { diff --git a/package-lock.json b/package-lock.json index c921f8a..7b4dc11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,12 +50,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.2.tgz", - "integrity": "sha512-v8e6OF80Ezo5MTHtFcq1AZJH+Wq+hN9pMZ1iLGkODIfKIW9zx6aPhx0JY0b7sZkfNVL8ay8JA8f339eBMnOE9A==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.3.tgz", + "integrity": "sha512-fFSevgYGZHCybYoyTkZ9b1YCSthBmoi77alwWjqMhYXUNXx7yx50zJZ6Ur2v3YpctVjU6eoGc5FDFyVHwXT0Iw==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "rxjs": "6.6.7" }, "engines": { @@ -83,15 +83,15 @@ "dev": true }, "node_modules/@angular-devkit/build-angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.2.tgz", - "integrity": "sha512-0FeDqfjWJjgIU42T3136RNYb7Yv2as6Z8rAnfUlX6RjRGZf98+6ZQZ80yREgrLkm7L8G1qWJc1sn3NyVMDwf9A==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.3.tgz", + "integrity": "sha512-C5Qv8aGmpGbETG4Mawly/5LnkRwfJAzANL5BtYJn8ZaDlZKCkhvAaRXHpm4Mdqg5idACAT8hgYqPQvqyEBaVDA==", "dev": true, "dependencies": { "@ampproject/remapping": "1.0.2", - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/build-webpack": "0.1301.2", - "@angular-devkit/core": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/build-webpack": "0.1301.3", + "@angular-devkit/core": "13.1.3", "@babel/core": "7.16.0", "@babel/generator": "7.16.0", "@babel/helper-annotate-as-pure": "7.16.0", @@ -102,7 +102,7 @@ "@babel/runtime": "7.16.3", "@babel/template": "7.16.0", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.1.2", + "@ngtools/webpack": "13.1.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -111,9 +111,9 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "10.0.0", "core-js": "3.19.3", - "critters": "0.0.15", + "critters": "0.0.16", "css-loader": "6.5.1", - "esbuild-wasm": "0.14.2", + "esbuild-wasm": "0.14.11", "glob": "7.2.0", "https-proxy-agent": "5.0.0", "inquirer": "8.2.0", @@ -159,7 +159,7 @@ "yarn": ">= 1.13.0" }, "optionalDependencies": { - "esbuild": "0.14.2" + "esbuild": "0.14.11" }, "peerDependencies": { "@angular/compiler-cli": "^13.0.0 || ^13.1.0-next", @@ -211,12 +211,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.2.tgz", - "integrity": "sha512-Xk0k0tMcLOy2HI1/YrfWeLUrtKvk7/E7fhG3XoozT/pXBQgiZGoPuCt34HNPDkx3WNSedzvh5DNv8kPlILfjIw==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.3.tgz", + "integrity": "sha512-FFwKdhq5n0lrqkiJRZoWKy21gERtvupkk0BpIVPTbRqyiqB2htiGM995uBBjpeDngytDLx+BwPFipVfQ+WIi9w==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1301.2", + "@angular-devkit/architect": "0.1301.3", "rxjs": "6.6.7" }, "engines": { @@ -248,9 +248,9 @@ "dev": true }, "node_modules/@angular-devkit/core": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz", - "integrity": "sha512-uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.3.tgz", + "integrity": "sha512-o14jGDk4h14dVYYQafOn+2rq9CDmDMbDV6logqKYCLzTDRlK8gccDnqJM/QKAlfWCzbllZqcHDmg6FyoRLO9RQ==", "dev": true, "dependencies": { "ajv": "8.8.2", @@ -293,12 +293,12 @@ "dev": true }, "node_modules/@angular-devkit/schematics": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.2.tgz", - "integrity": "sha512-ayYbHGU8QpMGx8ZyhKOBupz+Zfv/2H1pNQErahYV3qg7hA9hfjTGmNmDQ4iw0fiT04NajjUxuomlKsCsg7oXDw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.3.tgz", + "integrity": "sha512-TvjThB/pFXNFM0j0WX5yg0L2/3xNsqawQuWhkDJ05MBDEnSxbgv5hmOzNL8SNIEMgP0VbSTHtSg5kZvmNiH7vg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -329,9 +329,9 @@ "dev": true }, "node_modules/@angular/animations": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.1.tgz", - "integrity": "sha512-6ECC9Dn5gmV4U1cz1pRJ2p5lo0BET2CjG1RbhTaZR8lOsoMsmlV/JdBAp8eyYTiGii3MLS6Q2P/hN/YG2SRGQQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.2.tgz", + "integrity": "sha512-k1eQ8YZq3eelLhJDQjkRCt/4MXxwK2TFeGdtcYJF0G7vFOppE8hlI4PT7Bvmk08lTqvgiqtTI3ZaYmIINLfUMg==", "dependencies": { "tslib": "^2.3.0" }, @@ -339,20 +339,20 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.1.1" + "@angular/core": "13.1.2" } }, "node_modules/@angular/cli": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.2.tgz", - "integrity": "sha512-jEsQWzHgODFpppWGb49jfqlN8YYhphsKY3MPHlrjmd05qWgKItUGSgA46hSoDqjaJKVUN9koUnJBFCc9utERYA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.3.tgz", + "integrity": "sha512-Ju/A8LFnfcv1PC665a5FiIQx9SXqB+3yWYFXPIiVkkRcye95gpfsbV48WW7QV35gzIwbR1m3H907Zg6ptiNv0A==", "dev": true, "hasInstallScript": true, "dependencies": { - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", - "@schematics/angular": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", + "@schematics/angular": "13.1.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -379,9 +379,9 @@ } }, "node_modules/@angular/common": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.1.tgz", - "integrity": "sha512-FQwRZ1XgTH2PbPjBmq2jAZzETVNX9yWQt21MuNGtokC7V4eS0NYlFIDbhy3UPWCzRgd3+P7P4+HdX15VxCjf9g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.2.tgz", + "integrity": "sha512-/8RWYQkZ1KPNvu2FANJM44wXlOMjMyxZVOEIn3llMRgxV2iiYtmluAOJNafTAbKedAuD6wiSpbi++QbioqCyyA==", "dependencies": { "tslib": "^2.3.0" }, @@ -389,14 +389,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/core": "13.1.1", + "@angular/core": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.1.tgz", - "integrity": "sha512-WS+BB4h2LOBAGQ+P+RcKDw43Z7yAB5m1RY2/MAI+qI339V97WlWEQXxSMvBhCuzJnww1SSZfHMADaB54Jdjx2g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.2.tgz", + "integrity": "sha512-xbM3eClhUIHEFR0Et1bVC18Q7+kJx+hNNWWQl63RNYYBxTZnZpXA3mYi6IcEasy7BHkobVW+5teqlibFQY4gfQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -405,9 +405,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.1.tgz", - "integrity": "sha512-ycdXN2urBZepbXn2xx1oxF1i6g0Dq/Rb8ySQeELdL9qr6hiZF9fkvIwd91d8uhFG2PvoM4O8/U/3x4yA2bXzew==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.2.tgz", + "integrity": "sha512-yqM6RLcYtfwIuqBQ7eS7WdksBYY7Dh9sP4rElgLiEhDGIPQf6YE5zeuRThGq5pQ2fvHbNflw8QmTHu/18Y1u/g==", "dev": true, "dependencies": { "@babel/core": "^7.8.6", @@ -431,14 +431,14 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/compiler": "13.1.1", + "@angular/compiler": "13.1.2", "typescript": ">=4.4.2 <4.6" } }, "node_modules/@angular/core": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.1.tgz", - "integrity": "sha512-oLGKgzUbHqte/q7EokOJWUiXAtBjwuZM6c9Or2a7WDJNeImQilxk5qy91RPSbP8FhOBysebqAayrfiCYexlShg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.2.tgz", + "integrity": "sha512-dsb90lUf8BELzdg7MgSMfPc36xzZKsDggOimfXhIvmctgc+H71Zo07KYTy5JVqsscLdT+A/KBvtU1bKk4P+Rfg==", "dependencies": { "tslib": "^2.3.0" }, @@ -451,9 +451,9 @@ } }, "node_modules/@angular/forms": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.1.tgz", - "integrity": "sha512-wtYzRHPv4mf1Vsi4GEal5qcI2wjqUW+lu8Fsd2Aoe8NqkwtY3fq+iWEP/4pnvmH0RlC+3QbNNV/01D5UKolvgg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.2.tgz", + "integrity": "sha512-r5I5cPngk2Erxe/OEL9Hl1j1VcNSAAyVzh7KmtOP8z7RZYCd0MeRISKrmA5CGn5Dh7A5POFLoOpBatmvnc4Z/A==", "dependencies": { "tslib": "^2.3.0" }, @@ -461,16 +461,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.1.tgz", - "integrity": "sha512-jk9MGwnaVc98wmw5dRBicduI/a8dHtUzaAi1dV003fUWldS9a5FBuj/ym7DJubaD5Njl8l79SFbjrP9aAsqM5A==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.2.tgz", + "integrity": "sha512-yBUWtYJHr/1LuK3/YRRav2O82i6RHVPtRoAlZHoeTlh2CYA4u1m3JHq9XBrxIxSXexBX69pMrZENW1xskwKRTQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -478,9 +478,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/animations": "13.1.1", - "@angular/common": "13.1.1", - "@angular/core": "13.1.1" + "@angular/animations": "13.1.2", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2" }, "peerDependenciesMeta": { "@angular/animations": { @@ -489,9 +489,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.1.tgz", - "integrity": "sha512-ujHJMhJk93hjLx/SQ67y7xiGh2UDL+toVi3OlorWvnYGgPR26ufyL+J73BA+RAKHSP2WPiXU+/87vSz8r+BEgA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.2.tgz", + "integrity": "sha512-gABOn8DxGai56WmIt5o+eXtduabiq4Mlprg+6+dv+2PvWV871pLvswV9EGUSgwKXvbhBlDZDuNFU5LgvNDuGFg==", "dependencies": { "tslib": "^2.3.0" }, @@ -499,16 +499,16 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/compiler": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1" + "@angular/common": "13.1.2", + "@angular/compiler": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2" } }, "node_modules/@angular/router": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.1.tgz", - "integrity": "sha512-rlz5BBgNX+G2vVu2Gb5avx3LL08i7R/xZO7zPwh0HhXz/Vp8XFlWwaqAGb6Hgat772K2uCxF1/JBLQCUBY2MNQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.2.tgz", + "integrity": "sha512-5S0De6SdlbERoX9FwOBiTWxINchW7nTPUIH/tdanOqq12cqp6/7NigOr3BZDSvUNIh/6Is+pSQTKGAbhxejN2w==", "dependencies": { "tslib": "^2.3.0" }, @@ -516,9 +516,9 @@ "node": "^12.20.0 || ^14.15.0 || >=16.10.0" }, "peerDependencies": { - "@angular/common": "13.1.1", - "@angular/core": "13.1.1", - "@angular/platform-browser": "13.1.1", + "@angular/common": "13.1.2", + "@angular/core": "13.1.2", + "@angular/platform-browser": "13.1.2", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -541,9 +541,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true, "engines": { "node": ">=6.9.0" @@ -916,14 +916,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1012,15 +1012,15 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1083,9 +1083,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1816,9 +1816,9 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.16.7", @@ -1869,9 +1869,9 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -2250,19 +2250,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2271,12 +2271,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -2294,9 +2294,9 @@ } }, "node_modules/@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -2365,9 +2365,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.2.tgz", - "integrity": "sha512-F/KraxCCUjSn5nWVEQSuyVfnoE9j/bTcpIb+6e38/Hq/saPfsUoNiRjWlTAxCD44vHbMuVkJ/ZRZT6hdICAslw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.3.tgz", + "integrity": "sha512-6Pf52IbChm/dFuegfv0smeBTW2moi0Gdkyjgk/7VWqE6hN35m+YGrCh+XnPp1POJwOKxhAByhV9zs6NWxrK1vA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.15.0 || >=16.10.0", @@ -2516,13 +2516,13 @@ } }, "node_modules/@schematics/angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.2.tgz", - "integrity": "sha512-OMbuOsnzUFjIGeo99NYwIPwjX6udJAiT5Sj5K7QZZYj66HuAqNBMV57J8GPA56edx5mOHZZApWMjXLlOxRXbJA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.3.tgz", + "integrity": "sha512-IixVWAEtN97N74PCxg3T03Ar/ECjGyJBWKAjKTTCrgNSWhm2mKgIc4RyI6cVCnltfJWIo48fcFhlOx/elShaCg==", "dev": true, "dependencies": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", "jsonc-parser": "3.0.0" }, "engines": { @@ -2569,9 +2569,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -3545,9 +3545,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001298", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz", - "integrity": "sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true, "funding": { "type": "opencollective", @@ -3738,9 +3738,9 @@ "dev": true }, "node_modules/colors": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.2.tgz", - "integrity": "sha512-5QhJWPFZqkKIieXJPpCprdOytvH7v0AGWpu9K2jZ4LWkGg3dVBNoYPgGGRpEsc0jb8Boy0ElYrdjH9uXfhRSqw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, "engines": { "node": ">=0.1.90" @@ -4068,13 +4068,13 @@ } }, "node_modules/critters": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz", - "integrity": "sha512-AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "dependencies": { "chalk": "^4.1.0", - "css-select": "^4.1.3", + "css-select": "^4.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", "postcss": "^8.3.7", @@ -4753,9 +4753,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.38", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz", - "integrity": "sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "node_modules/emoji-regex": { @@ -4806,9 +4806,9 @@ } }, "node_modules/engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -4910,9 +4910,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", "dev": true, "hasInstallScript": true, "optional": true, @@ -4920,29 +4920,30 @@ "esbuild": "bin/esbuild" }, "optionalDependencies": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" } }, "node_modules/esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", "cpu": [ "arm64" ], @@ -4953,9 +4954,9 @@ ] }, "node_modules/esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", "cpu": [ "x64" ], @@ -4966,9 +4967,9 @@ ] }, "node_modules/esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", "cpu": [ "arm64" ], @@ -4979,9 +4980,9 @@ ] }, "node_modules/esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", "cpu": [ "x64" ], @@ -4992,9 +4993,9 @@ ] }, "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", "cpu": [ "arm64" ], @@ -5005,9 +5006,9 @@ ] }, "node_modules/esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", "cpu": [ "ia32" ], @@ -5018,9 +5019,9 @@ ] }, "node_modules/esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", "cpu": [ "x64" ], @@ -5031,9 +5032,9 @@ ] }, "node_modules/esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", "cpu": [ "arm" ], @@ -5044,9 +5045,9 @@ ] }, "node_modules/esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", "cpu": [ "arm64" ], @@ -5057,9 +5058,9 @@ ] }, "node_modules/esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", "cpu": [ "mips64el" ], @@ -5070,9 +5071,9 @@ ] }, "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", "cpu": [ "ppc64" ], @@ -5082,10 +5083,23 @@ "linux" ] }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", "cpu": [ "x64" ], @@ -5096,9 +5110,9 @@ ] }, "node_modules/esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", "cpu": [ "x64" ], @@ -5109,9 +5123,9 @@ ] }, "node_modules/esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", "cpu": [ "x64" ], @@ -5122,9 +5136,9 @@ ] }, "node_modules/esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", + "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", "dev": true, "bin": { "esbuild": "bin/esbuild" @@ -5134,9 +5148,9 @@ } }, "node_modules/esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", "cpu": [ "ia32" ], @@ -5147,9 +5161,9 @@ ] }, "node_modules/esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", "cpu": [ "x64" ], @@ -5160,9 +5174,9 @@ ] }, "node_modules/esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", "cpu": [ "arm64" ], @@ -5569,9 +5583,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true, "funding": [ { @@ -6831,15 +6845,15 @@ ] }, "node_modules/karma": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz", - "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==", + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", + "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", "dev": true, "dependencies": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -7672,9 +7686,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -7762,12 +7776,12 @@ "optional": true }, "node_modules/node-forge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.0.tgz", - "integrity": "sha512-M4AsdaP0bGNaSPtatd/+f76asocI0cFaURRdeQVZvrJBrYp2Qohv5hDbGHykuNqCb1BYjWHjdS6HlN50qbztwA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true, "engines": { - "node": ">= 6.13.0" + "node": ">= 6.0.0" } }, "node_modules/node-gyp": { @@ -10781,12 +10795,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.13", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.13.tgz", - "integrity": "sha512-UmLwTKZwNmXYDAlRFhaEdgEg0dp9k5gfJXuO7uKvSqioN1M0+Mgf4V39IlVZMSuqGoCi6h5legkhNXvWy0rFSg==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "dependencies": { - "node-forge": "^1.2.0" + "node-forge": "^0.10.0" } }, "node_modules/semver": { @@ -11158,6 +11172,7 @@ "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==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "dependencies": { "atob": "^2.1.2", @@ -12101,9 +12116,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "engines": { "node": ">=10.13.0" @@ -12378,12 +12393,12 @@ } }, "@angular-devkit/architect": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.2.tgz", - "integrity": "sha512-v8e6OF80Ezo5MTHtFcq1AZJH+Wq+hN9pMZ1iLGkODIfKIW9zx6aPhx0JY0b7sZkfNVL8ay8JA8f339eBMnOE9A==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1301.3.tgz", + "integrity": "sha512-fFSevgYGZHCybYoyTkZ9b1YCSthBmoi77alwWjqMhYXUNXx7yx50zJZ6Ur2v3YpctVjU6eoGc5FDFyVHwXT0Iw==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "rxjs": "6.6.7" }, "dependencies": { @@ -12405,15 +12420,15 @@ } }, "@angular-devkit/build-angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.2.tgz", - "integrity": "sha512-0FeDqfjWJjgIU42T3136RNYb7Yv2as6Z8rAnfUlX6RjRGZf98+6ZQZ80yREgrLkm7L8G1qWJc1sn3NyVMDwf9A==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-13.1.3.tgz", + "integrity": "sha512-C5Qv8aGmpGbETG4Mawly/5LnkRwfJAzANL5BtYJn8ZaDlZKCkhvAaRXHpm4Mdqg5idACAT8hgYqPQvqyEBaVDA==", "dev": true, "requires": { "@ampproject/remapping": "1.0.2", - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/build-webpack": "0.1301.2", - "@angular-devkit/core": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/build-webpack": "0.1301.3", + "@angular-devkit/core": "13.1.3", "@babel/core": "7.16.0", "@babel/generator": "7.16.0", "@babel/helper-annotate-as-pure": "7.16.0", @@ -12424,7 +12439,7 @@ "@babel/runtime": "7.16.3", "@babel/template": "7.16.0", "@discoveryjs/json-ext": "0.5.6", - "@ngtools/webpack": "13.1.2", + "@ngtools/webpack": "13.1.3", "ansi-colors": "4.1.1", "babel-loader": "8.2.3", "babel-plugin-istanbul": "6.1.1", @@ -12433,10 +12448,10 @@ "circular-dependency-plugin": "5.2.2", "copy-webpack-plugin": "10.0.0", "core-js": "3.19.3", - "critters": "0.0.15", + "critters": "0.0.16", "css-loader": "6.5.1", - "esbuild": "0.14.2", - "esbuild-wasm": "0.14.2", + "esbuild": "0.14.11", + "esbuild-wasm": "0.14.11", "glob": "7.2.0", "https-proxy-agent": "5.0.0", "inquirer": "8.2.0", @@ -12497,12 +12512,12 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1301.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.2.tgz", - "integrity": "sha512-Xk0k0tMcLOy2HI1/YrfWeLUrtKvk7/E7fhG3XoozT/pXBQgiZGoPuCt34HNPDkx3WNSedzvh5DNv8kPlILfjIw==", + "version": "0.1301.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1301.3.tgz", + "integrity": "sha512-FFwKdhq5n0lrqkiJRZoWKy21gERtvupkk0BpIVPTbRqyiqB2htiGM995uBBjpeDngytDLx+BwPFipVfQ+WIi9w==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1301.2", + "@angular-devkit/architect": "0.1301.3", "rxjs": "6.6.7" }, "dependencies": { @@ -12524,9 +12539,9 @@ } }, "@angular-devkit/core": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.2.tgz", - "integrity": "sha512-uXVesIRiCL/Nv+RSV8JM4j8IoZiGCGnqV2FOJ1hvH7DPxIjhjPMdG/B54xMydZpeASW3ofuxeORyAXxFIBm8Zg==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-13.1.3.tgz", + "integrity": "sha512-o14jGDk4h14dVYYQafOn+2rq9CDmDMbDV6logqKYCLzTDRlK8gccDnqJM/QKAlfWCzbllZqcHDmg6FyoRLO9RQ==", "dev": true, "requires": { "ajv": "8.8.2", @@ -12555,12 +12570,12 @@ } }, "@angular-devkit/schematics": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.2.tgz", - "integrity": "sha512-ayYbHGU8QpMGx8ZyhKOBupz+Zfv/2H1pNQErahYV3qg7hA9hfjTGmNmDQ4iw0fiT04NajjUxuomlKsCsg7oXDw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-13.1.3.tgz", + "integrity": "sha512-TvjThB/pFXNFM0j0WX5yg0L2/3xNsqawQuWhkDJ05MBDEnSxbgv5hmOzNL8SNIEMgP0VbSTHtSg5kZvmNiH7vg==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", + "@angular-devkit/core": "13.1.3", "jsonc-parser": "3.0.0", "magic-string": "0.25.7", "ora": "5.4.1", @@ -12585,23 +12600,23 @@ } }, "@angular/animations": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.1.tgz", - "integrity": "sha512-6ECC9Dn5gmV4U1cz1pRJ2p5lo0BET2CjG1RbhTaZR8lOsoMsmlV/JdBAp8eyYTiGii3MLS6Q2P/hN/YG2SRGQQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-13.1.2.tgz", + "integrity": "sha512-k1eQ8YZq3eelLhJDQjkRCt/4MXxwK2TFeGdtcYJF0G7vFOppE8hlI4PT7Bvmk08lTqvgiqtTI3ZaYmIINLfUMg==", "requires": { "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.2.tgz", - "integrity": "sha512-jEsQWzHgODFpppWGb49jfqlN8YYhphsKY3MPHlrjmd05qWgKItUGSgA46hSoDqjaJKVUN9koUnJBFCc9utERYA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-13.1.3.tgz", + "integrity": "sha512-Ju/A8LFnfcv1PC665a5FiIQx9SXqB+3yWYFXPIiVkkRcye95gpfsbV48WW7QV35gzIwbR1m3H907Zg6ptiNv0A==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1301.2", - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", - "@schematics/angular": "13.1.2", + "@angular-devkit/architect": "0.1301.3", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", + "@schematics/angular": "13.1.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.1", "debug": "4.3.3", @@ -12620,25 +12635,25 @@ } }, "@angular/common": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.1.tgz", - "integrity": "sha512-FQwRZ1XgTH2PbPjBmq2jAZzETVNX9yWQt21MuNGtokC7V4eS0NYlFIDbhy3UPWCzRgd3+P7P4+HdX15VxCjf9g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-13.1.2.tgz", + "integrity": "sha512-/8RWYQkZ1KPNvu2FANJM44wXlOMjMyxZVOEIn3llMRgxV2iiYtmluAOJNafTAbKedAuD6wiSpbi++QbioqCyyA==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.1.tgz", - "integrity": "sha512-WS+BB4h2LOBAGQ+P+RcKDw43Z7yAB5m1RY2/MAI+qI339V97WlWEQXxSMvBhCuzJnww1SSZfHMADaB54Jdjx2g==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-13.1.2.tgz", + "integrity": "sha512-xbM3eClhUIHEFR0Et1bVC18Q7+kJx+hNNWWQl63RNYYBxTZnZpXA3mYi6IcEasy7BHkobVW+5teqlibFQY4gfQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.1.tgz", - "integrity": "sha512-ycdXN2urBZepbXn2xx1oxF1i6g0Dq/Rb8ySQeELdL9qr6hiZF9fkvIwd91d8uhFG2PvoM4O8/U/3x4yA2bXzew==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-13.1.2.tgz", + "integrity": "sha512-yqM6RLcYtfwIuqBQ7eS7WdksBYY7Dh9sP4rElgLiEhDGIPQf6YE5zeuRThGq5pQ2fvHbNflw8QmTHu/18Y1u/g==", "dev": true, "requires": { "@babel/core": "^7.8.6", @@ -12655,41 +12670,41 @@ } }, "@angular/core": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.1.tgz", - "integrity": "sha512-oLGKgzUbHqte/q7EokOJWUiXAtBjwuZM6c9Or2a7WDJNeImQilxk5qy91RPSbP8FhOBysebqAayrfiCYexlShg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-13.1.2.tgz", + "integrity": "sha512-dsb90lUf8BELzdg7MgSMfPc36xzZKsDggOimfXhIvmctgc+H71Zo07KYTy5JVqsscLdT+A/KBvtU1bKk4P+Rfg==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.1.tgz", - "integrity": "sha512-wtYzRHPv4mf1Vsi4GEal5qcI2wjqUW+lu8Fsd2Aoe8NqkwtY3fq+iWEP/4pnvmH0RlC+3QbNNV/01D5UKolvgg==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-13.1.2.tgz", + "integrity": "sha512-r5I5cPngk2Erxe/OEL9Hl1j1VcNSAAyVzh7KmtOP8z7RZYCd0MeRISKrmA5CGn5Dh7A5POFLoOpBatmvnc4Z/A==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.1.tgz", - "integrity": "sha512-jk9MGwnaVc98wmw5dRBicduI/a8dHtUzaAi1dV003fUWldS9a5FBuj/ym7DJubaD5Njl8l79SFbjrP9aAsqM5A==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-13.1.2.tgz", + "integrity": "sha512-yBUWtYJHr/1LuK3/YRRav2O82i6RHVPtRoAlZHoeTlh2CYA4u1m3JHq9XBrxIxSXexBX69pMrZENW1xskwKRTQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.1.tgz", - "integrity": "sha512-ujHJMhJk93hjLx/SQ67y7xiGh2UDL+toVi3OlorWvnYGgPR26ufyL+J73BA+RAKHSP2WPiXU+/87vSz8r+BEgA==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-13.1.2.tgz", + "integrity": "sha512-gABOn8DxGai56WmIt5o+eXtduabiq4Mlprg+6+dv+2PvWV871pLvswV9EGUSgwKXvbhBlDZDuNFU5LgvNDuGFg==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.1.tgz", - "integrity": "sha512-rlz5BBgNX+G2vVu2Gb5avx3LL08i7R/xZO7zPwh0HhXz/Vp8XFlWwaqAGb6Hgat772K2uCxF1/JBLQCUBY2MNQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-13.1.2.tgz", + "integrity": "sha512-5S0De6SdlbERoX9FwOBiTWxINchW7nTPUIH/tdanOqq12cqp6/7NigOr3BZDSvUNIh/6Is+pSQTKGAbhxejN2w==", "requires": { "tslib": "^2.3.0" } @@ -12710,9 +12725,9 @@ } }, "@babel/compat-data": { - "version": "7.16.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.4.tgz", - "integrity": "sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true }, "@babel/core": { @@ -13004,14 +13019,14 @@ "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz", - "integrity": "sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" }, "dependencies": { "@babel/helper-annotate-as-pure": { @@ -13078,15 +13093,15 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz", - "integrity": "sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "dependencies": { "@babel/template": { @@ -13138,9 +13153,9 @@ } }, "@babel/parser": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.7.tgz", - "integrity": "sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.8.tgz", + "integrity": "sha512-i7jDUfrVBWc+7OKcBzEe5n7fbv3i2fWtxKzzCvOjnzSxMfWMigAhtfJ7qzZNGFNMsCCd67+uz553dYKWXPvCKw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -13620,9 +13635,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz", - "integrity": "sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.16.7", @@ -13655,9 +13670,9 @@ } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz", - "integrity": "sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { "@babel/helper-create-regexp-features-plugin": "^7.16.7" @@ -13929,30 +13944,30 @@ } }, "@babel/traverse": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.7.tgz", - "integrity": "sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.8.tgz", + "integrity": "sha512-xe+H7JlvKsDQwXRsBhSnq1/+9c+LlQcCK3Tn/l5sbx02HYns/cn7ibp9+RV1sIUqu7hKg91NWsgHurO9dowITQ==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.7", + "@babel/generator": "^7.16.8", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7", + "@babel/parser": "^7.16.8", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/generator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.7.tgz", - "integrity": "sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.16.7", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -13966,9 +13981,9 @@ } }, "@babel/types": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.7.tgz", - "integrity": "sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -14019,9 +14034,9 @@ "dev": true }, "@ngtools/webpack": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.2.tgz", - "integrity": "sha512-F/KraxCCUjSn5nWVEQSuyVfnoE9j/bTcpIb+6e38/Hq/saPfsUoNiRjWlTAxCD44vHbMuVkJ/ZRZT6hdICAslw==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-13.1.3.tgz", + "integrity": "sha512-6Pf52IbChm/dFuegfv0smeBTW2moi0Gdkyjgk/7VWqE6hN35m+YGrCh+XnPp1POJwOKxhAByhV9zs6NWxrK1vA==", "dev": true, "requires": {} }, @@ -14136,13 +14151,13 @@ } }, "@schematics/angular": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.2.tgz", - "integrity": "sha512-OMbuOsnzUFjIGeo99NYwIPwjX6udJAiT5Sj5K7QZZYj66HuAqNBMV57J8GPA56edx5mOHZZApWMjXLlOxRXbJA==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-13.1.3.tgz", + "integrity": "sha512-IixVWAEtN97N74PCxg3T03Ar/ECjGyJBWKAjKTTCrgNSWhm2mKgIc4RyI6cVCnltfJWIo48fcFhlOx/elShaCg==", "dev": true, "requires": { - "@angular-devkit/core": "13.1.2", - "@angular-devkit/schematics": "13.1.2", + "@angular-devkit/core": "13.1.3", + "@angular-devkit/schematics": "13.1.3", "jsonc-parser": "3.0.0" } }, @@ -14181,9 +14196,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", - "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", @@ -14971,9 +14986,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001298", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001298.tgz", - "integrity": "sha512-AcKqikjMLlvghZL/vfTHorlQsLDhGRalYf1+GmWCf5SCMziSGjRYQW/JEksj14NaYHIR6KIhrFAy0HV5C25UzQ==", + "version": "1.0.30001299", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001299.tgz", + "integrity": "sha512-iujN4+x7QzqA2NCSrS5VUy+4gLmRd4xv6vbBBsmfVqTx8bLAD8097euLqQgKxSVLvxjSDcvF1T/i9ocgnUFexw==", "dev": true }, "canonical-path": { @@ -15117,9 +15132,9 @@ "dev": true }, "colors": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.2.tgz", - "integrity": "sha512-5QhJWPFZqkKIieXJPpCprdOytvH7v0AGWpu9K2jZ4LWkGg3dVBNoYPgGGRpEsc0jb8Boy0ElYrdjH9uXfhRSqw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true }, "commander": { @@ -15378,13 +15393,13 @@ } }, "critters": { - "version": "0.0.15", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.15.tgz", - "integrity": "sha512-AE7hkXb3eZUbEvS1SKZa+OU4o2kUOXtzVeE/2E/mjU/0mV1wpBT1HfUCWVRS4zwvkBNJ0AQYsVjAoFm+kIhfdw==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", "dev": true, "requires": { "chalk": "^4.1.0", - "css-select": "^4.1.3", + "css-select": "^4.2.0", "parse5": "^6.0.1", "parse5-htmlparser2-tree-adapter": "^6.0.1", "postcss": "^8.3.7", @@ -15891,9 +15906,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.38", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.38.tgz", - "integrity": "sha512-WhHt3sZazKj0KK/UpgsbGQnUUoFeAHVishzHFExMxagpZgjiGYSC9S0ZlbhCfSH2L2i+2A1yyqOIliTctMx7KQ==", + "version": "1.4.44", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.44.tgz", + "integrity": "sha512-tHGWiUUmY7GABK8+DNcr474cnZDTzD8x1736SlDosVH8+/vRJeqfaIBAEHFtMjddz/0T4rKKYsxEc8BwQRdBpw==", "dev": true }, "emoji-regex": { @@ -15937,9 +15952,9 @@ } }, "engine.io": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.0.tgz", - "integrity": "sha512-ErhZOVu2xweCjEfYcTdkCnEYUiZgkAcBBAhW4jbIvNG8SLU3orAqoJCiytZjYF7eTpVmmCrLDjLIEaPlUAs1uw==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.1.1.tgz", + "integrity": "sha512-AyMc20q8JUUdvKd46+thc9o7yCZ6iC6MoBCChG5Z1XmFMpp+2+y/oKvwpZTUJB0KCjxScw1dV9c2h5pjiYBLuQ==", "dev": true, "requires": { "@types/cookie": "^0.4.1", @@ -16023,153 +16038,161 @@ "dev": true }, "esbuild": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz", - "integrity": "sha512-l076A6o/PIgcyM24s0dWmDI/b8RQf41uWoJu9I0M71CtW/YSw5T5NUeXxs5lo2tFQD+O4CW4nBHJXx3OY5NpXg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.11.tgz", + "integrity": "sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg==", "dev": true, "optional": true, "requires": { - "esbuild-android-arm64": "0.14.2", - "esbuild-darwin-64": "0.14.2", - "esbuild-darwin-arm64": "0.14.2", - "esbuild-freebsd-64": "0.14.2", - "esbuild-freebsd-arm64": "0.14.2", - "esbuild-linux-32": "0.14.2", - "esbuild-linux-64": "0.14.2", - "esbuild-linux-arm": "0.14.2", - "esbuild-linux-arm64": "0.14.2", - "esbuild-linux-mips64le": "0.14.2", - "esbuild-linux-ppc64le": "0.14.2", - "esbuild-netbsd-64": "0.14.2", - "esbuild-openbsd-64": "0.14.2", - "esbuild-sunos-64": "0.14.2", - "esbuild-windows-32": "0.14.2", - "esbuild-windows-64": "0.14.2", - "esbuild-windows-arm64": "0.14.2" + "esbuild-android-arm64": "0.14.11", + "esbuild-darwin-64": "0.14.11", + "esbuild-darwin-arm64": "0.14.11", + "esbuild-freebsd-64": "0.14.11", + "esbuild-freebsd-arm64": "0.14.11", + "esbuild-linux-32": "0.14.11", + "esbuild-linux-64": "0.14.11", + "esbuild-linux-arm": "0.14.11", + "esbuild-linux-arm64": "0.14.11", + "esbuild-linux-mips64le": "0.14.11", + "esbuild-linux-ppc64le": "0.14.11", + "esbuild-linux-s390x": "0.14.11", + "esbuild-netbsd-64": "0.14.11", + "esbuild-openbsd-64": "0.14.11", + "esbuild-sunos-64": "0.14.11", + "esbuild-windows-32": "0.14.11", + "esbuild-windows-64": "0.14.11", + "esbuild-windows-arm64": "0.14.11" } }, "esbuild-android-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz", - "integrity": "sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz", + "integrity": "sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw==", "dev": true, "optional": true }, "esbuild-darwin-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz", - "integrity": "sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz", + "integrity": "sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ==", "dev": true, "optional": true }, "esbuild-darwin-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz", - "integrity": "sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz", + "integrity": "sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg==", "dev": true, "optional": true }, "esbuild-freebsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz", - "integrity": "sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz", + "integrity": "sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA==", "dev": true, "optional": true }, "esbuild-freebsd-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz", - "integrity": "sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz", + "integrity": "sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w==", "dev": true, "optional": true }, "esbuild-linux-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz", - "integrity": "sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz", + "integrity": "sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg==", "dev": true, "optional": true }, "esbuild-linux-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz", - "integrity": "sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz", + "integrity": "sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg==", "dev": true, "optional": true }, "esbuild-linux-arm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz", - "integrity": "sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz", + "integrity": "sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ==", "dev": true, "optional": true }, "esbuild-linux-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz", - "integrity": "sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz", + "integrity": "sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg==", "dev": true, "optional": true }, "esbuild-linux-mips64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz", - "integrity": "sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz", + "integrity": "sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw==", "dev": true, "optional": true }, "esbuild-linux-ppc64le": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz", - "integrity": "sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz", + "integrity": "sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ==", + "dev": true, + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz", + "integrity": "sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw==", "dev": true, "optional": true }, "esbuild-netbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz", - "integrity": "sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz", + "integrity": "sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw==", "dev": true, "optional": true }, "esbuild-openbsd-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz", - "integrity": "sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz", + "integrity": "sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q==", "dev": true, "optional": true }, "esbuild-sunos-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz", - "integrity": "sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz", + "integrity": "sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg==", "dev": true, "optional": true }, "esbuild-wasm": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.2.tgz", - "integrity": "sha512-Rs8NjWoo1UdsVjhxT2o6kLCX9Sh65pyd3/h4XeJ3jjQNM6NgL+/CSowuJgvOIjDAXMLXpc6fdGnyZQDil9IUJA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz", + "integrity": "sha512-9e1R6hv0hiU+BkJI2edqUuWfXUbOP2Mox+Ijl/uY1vLLlSsunkrcADqD/4Rz+VCEDzw6ecscJM+uJqR2fRmEUg==", "dev": true }, "esbuild-windows-32": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz", - "integrity": "sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz", + "integrity": "sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ==", "dev": true, "optional": true }, "esbuild-windows-64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz", - "integrity": "sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz", + "integrity": "sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg==", "dev": true, "optional": true }, "esbuild-windows-arm64": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz", - "integrity": "sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==", + "version": "0.14.11", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz", + "integrity": "sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ==", "dev": true, "optional": true }, @@ -16488,9 +16511,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.6.tgz", - "integrity": "sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "forwarded": { @@ -17430,15 +17453,15 @@ "dev": true }, "karma": { - "version": "6.3.10", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.10.tgz", - "integrity": "sha512-Ofv+sgrkT8Czo6bzzQCvrwVyRSG8/3e7RbawEuxjfsINony+IR/S2csNRUFgPNfmWvju+dqi/MzQGOJ2LnlmfQ==", + "version": "6.3.11", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.11.tgz", + "integrity": "sha512-QGUh4yXgizzDNPLB5nWTvP+wysKexngbyLVWFOyikB661hpa2RZLf5anZQzqliWtAQuYVep0ot0D1U7UQKpsxQ==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", "chokidar": "^3.5.1", - "colors": "^1.4.0", + "colors": "1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", @@ -18059,9 +18082,9 @@ "dev": true }, "nanoid": { - "version": "3.1.30", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "version": "3.1.32", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.32.tgz", + "integrity": "sha512-F8mf7R3iT9bvThBoW4tGXhXFHCctyCiUUPrWF8WaTqa3h96d9QybkSeba43XVOOE3oiLfkVDe4bT8MeGmkrTxw==", "dev": true }, "needle": { @@ -18127,9 +18150,9 @@ "optional": true }, "node-forge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.0.tgz", - "integrity": "sha512-M4AsdaP0bGNaSPtatd/+f76asocI0cFaURRdeQVZvrJBrYp2Qohv5hDbGHykuNqCb1BYjWHjdS6HlN50qbztwA==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-gyp": { @@ -20382,12 +20405,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.13", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.13.tgz", - "integrity": "sha512-UmLwTKZwNmXYDAlRFhaEdgEg0dp9k5gfJXuO7uKvSqioN1M0+Mgf4V39IlVZMSuqGoCi6h5legkhNXvWy0rFSg==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { - "node-forge": "^1.2.0" + "node-forge": "^0.10.0" } }, "semver": { @@ -21414,9 +21437,9 @@ } }, "webpack-sources": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", - "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, "webpack-subresource-integrity": { diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 6973633..2c8ed2c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,25 +1,42 @@ +import { PendingComponent } from './book/pending/pending.component'; +import { BoardAdminComponent } from './user/board-admin/board-admin.component'; +import { BoardUserComponent } from './user/board-user/board-user.component'; +import { ProfileComponent } from './user/profile/profile.component'; +import { RegisterComponent } from './auth/register/register.component'; +import { LoginComponent } from './auth/login/login.component'; +import { NoteComponent } from './note/note.component'; +import { NoteFormComponent } from './note/note-form/note-form.component'; import { BookFormComponent } from './book/book-form/book-form.component'; import { BookComponent } from './book/book.component'; -import { RegistrationComponent } from './user/registration/registration.component'; -import { UserComponent } from './user/user.component'; +import { HomeComponent } from './home/home.component'; import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule, Routes } from '@angular/router'; +import { SiteInDevelopmentComponent } from './site-in-development/site-in-development.component'; const routes: Routes = [ - {path:'', redirectTo:'/book', pathMatch:'full'}, + {path:'', redirectTo:'/home', pathMatch:'full'}, + {path: 'home', component: HomeComponent }, + {path: 'login', component: LoginComponent}, + {path: 'register', component: RegisterComponent}, + {path: 'profile', component: ProfileComponent}, + {path: 'user', component: BoardUserComponent}, + {path: 'admin', component: BoardAdminComponent}, { path: 'book', component: BookComponent, children: [ {path:'book-form', component: BookFormComponent} + ] }, - { - path: 'user', component: UserComponent, + {path: 'pending', component: PendingComponent}, + { + path: 'note', component: NoteComponent, children: [ - {path: 'registration', component: RegistrationComponent} + {path: 'note-form', component: NoteFormComponent} ] - } + }, + {path:'site-in-development', component: SiteInDevelopmentComponent} ]; @NgModule({ diff --git a/src/app/app.component.html b/src/app/app.component.html index d14cb93..f8c9346 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,3 +1,104 @@ -
- -
\ No newline at end of file + + + + + +
+ + +
\ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 8d5111a..df21271 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,10 +1,37 @@ -import { Component } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; +import { TokenStorageService } from './shared/token-storage.service'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) -export class AppComponent { +export class AppComponent implements OnInit { title = 'BookStoreApp'; -} + private roles: string[] = []; + isLoggedIn = false; + showAdminBoard = false; + showModeratorBoard = false; + username?: string; + + constructor(private tokenStorageService: TokenStorageService) { } + + ngOnInit(): void { + this.isLoggedIn = !!this.tokenStorageService.getToken(); + + if (this.isLoggedIn) { + const user = this.tokenStorageService.getUser(); + this.roles = user.roles; + + this.showAdminBoard = this.roles.includes('ROLE_ADMIN'); + this.showModeratorBoard = this.roles.includes('ROLE_MODERATOR'); + + this.username = user.username; + } + } + + logout(): void { + this.tokenStorageService.signOut(); + window.location.reload(); + } +} \ No newline at end of file diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8c4c152..044c312 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,4 +1,8 @@ -import { UserService } from './shared/user.service'; +import { ProfileComponent } from './user/profile/profile.component'; +import { BoardUserComponent } from './user/board-user/board-user.component'; +import { BoardAdminComponent } from './user/board-admin/board-admin.component'; +import { LoginComponent } from './auth/login/login.component'; +import { RegisterComponent } from './auth/register/register.component'; import { HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @@ -8,18 +12,27 @@ import { ToastrModule } from 'ngx-toastr'; import { AppComponent } from './app.component'; import { BookComponent } from './book/book.component'; import { BookFormComponent } from './book/book-form/book-form.component'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; -import { UserComponent } from './user/user.component'; -import { RegistrationComponent } from './user/registration/registration.component'; +import { NoteComponent } from './note/note.component'; +import { NoteFormComponent } from './note/note-form/note-form.component'; +import { HomeComponent } from './home/home.component'; +import { FormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; +import {authInterceptorProviders} from './auth/helpers/auth.interceptor'; + @NgModule({ declarations: [ AppComponent, BookComponent, BookFormComponent, - UserComponent, - RegistrationComponent + NoteComponent, + NoteFormComponent, + HomeComponent, + RegisterComponent, + LoginComponent, + BoardAdminComponent, + BoardUserComponent, + ProfileComponent ], imports: [ BrowserModule, @@ -27,10 +40,9 @@ import { AppRoutingModule } from './app-routing.module'; HttpClientModule, BrowserAnimationsModule, ToastrModule.forRoot(), - AppRoutingModule, - ReactiveFormsModule + AppRoutingModule ], - providers: [UserService], + providers: [], bootstrap: [AppComponent] }) export class AppModule { } diff --git a/src/app/auth/helpers/auth.interceptor.ts b/src/app/auth/helpers/auth.interceptor.ts new file mode 100644 index 0000000..40fe410 --- /dev/null +++ b/src/app/auth/helpers/auth.interceptor.ts @@ -0,0 +1,26 @@ +import { HTTP_INTERCEPTORS, HttpEvent } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http'; + +import { TokenStorageService } from '../../shared/token-storage.service'; +import { Observable } from 'rxjs'; + +const TOKEN_HEADER_KEY = 'Authorization'; // for Spring Boot back-end + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + constructor(private token: TokenStorageService) { } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + let authReq = req; + const token = this.token.getToken(); + if (token != null) { + authReq = req.clone({ headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token) }); + } + return next.handle(authReq); + } +} + +export const authInterceptorProviders = [ + { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true } +]; \ No newline at end of file diff --git a/src/app/auth/login/login.component.html b/src/app/auth/login/login.component.html new file mode 100644 index 0000000..1d503af --- /dev/null +++ b/src/app/auth/login/login.component.html @@ -0,0 +1,75 @@ +
+
+ +
+
+ + + +
+
+ + + +
+
+ +
+
+ +
+
+ +
+ Zalogowano jako {{ roles }}. +
+
+
\ No newline at end of file diff --git a/src/app/auth/login/login.component.ts b/src/app/auth/login/login.component.ts new file mode 100644 index 0000000..2f3f759 --- /dev/null +++ b/src/app/auth/login/login.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthService } from '../../shared/auth.service'; +import { TokenStorageService } from '../../shared/token-storage.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html' +}) +export class LoginComponent implements OnInit { + form: any = { + email: null, + password: null + }; + isLoggedIn = false; + isLoginFailed = false; + errorMessage = ''; + roles: string[] = []; + + constructor(private authService: AuthService, private tokenStorage: TokenStorageService) { } + + ngOnInit(): void { + if (this.tokenStorage.getToken()) { + this.isLoggedIn = true; + this.roles = this.tokenStorage.getUser().roles; + } + } + + onSubmit(): void { + const { email, password } = this.form; + + this.authService.login(email, password).subscribe( + data => { + this.tokenStorage.saveToken(data.accessToken); + this.tokenStorage.saveUser(data); + + this.isLoginFailed = false; + this.isLoggedIn = true; + this.roles = this.tokenStorage.getUser().roles; + this.reloadPage(); + }, + err => { + this.errorMessage = err.error.message; + this.isLoginFailed = true; + } + ); + } + + reloadPage(): void { + window.location.reload(); + } +} \ No newline at end of file diff --git a/src/app/auth/register/register.component.html b/src/app/auth/register/register.component.html new file mode 100644 index 0000000..783cb70 --- /dev/null +++ b/src/app/auth/register/register.component.html @@ -0,0 +1,86 @@ +
+
+ +
+
+ + +
+
Nazwa użytkownika jest wymagana
+
+ Nazwa użytkownika musi mieć co najmniej 3 znaki +
+
+ Nazwa użytkownika może mieć maksymalnie 20 znaków +
+
+
+
+ + +
+
E-mail jest wymagany
+
+ Wpisz poprawny adres E-mail +
+
+
+
+ + +
+
Hasło jest wymagane
+
+ Hasło musi miec co najmniej 4 znaki +
+
+
+
+ +
+ +
+ Nieudana rejestracja!
{{ errorMessage }} +
+
+ +
+ Pomyślnie zarejestrowano! +
+
+
\ No newline at end of file diff --git a/src/app/auth/register/register.component.ts b/src/app/auth/register/register.component.ts new file mode 100644 index 0000000..4b347b1 --- /dev/null +++ b/src/app/auth/register/register.component.ts @@ -0,0 +1,39 @@ +import { Component, OnInit } from '@angular/core'; +import { AuthService } from '../../shared/auth.service'; + +@Component({ + selector: 'app-register', + templateUrl: './register.component.html' +}) + +export class RegisterComponent implements OnInit { + form: any = { + username: null, + email: null, + password: null + }; + isSuccessful = false; + isSignUpFailed = false; + errorMessage = ''; + + constructor(private authService: AuthService) { } + + ngOnInit(): void { + } + + onSubmit(): void { + const { username, email, password } = this.form; + + this.authService.register(username, email, password).subscribe( + data => { + console.log(data); + this.isSuccessful = true; + this.isSignUpFailed = false; + }, + err => { + this.errorMessage = err.error.message; + this.isSignUpFailed = true; + } + ); + } +} \ No newline at end of file diff --git a/src/app/book/book-form/book-form.component.html b/src/app/book/book-form/book-form.component.html index ecce027..271be3f 100644 --- a/src/app/book/book-form/book-form.component.html +++ b/src/app/book/book-form/book-form.component.html @@ -1,22 +1,21 @@
- +
- - Tytuł +
- - Autor +
- - Opis +
- +
diff --git a/src/app/book/book.component.html b/src/app/book/book.component.html index 81fa4de..edebd91 100644 --- a/src/app/book/book.component.html +++ b/src/app/book/book.component.html @@ -1,23 +1,27 @@ -
-

List Of Books

+
+

Lista oficjalnych tytułów:

-
+
-
+
+
+
- - - + + + + - + + diff --git a/src/app/book/pending/pending.component.html b/src/app/book/pending/pending.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/book/pending/pending.component.ts b/src/app/book/pending/pending.component.ts new file mode 100644 index 0000000..efc8f97 --- /dev/null +++ b/src/app/book/pending/pending.component.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from "@angular/core"; +import { BookService } from "src/app/shared/book.service"; + +@Component({ + selector: 'app-note', + templateUrl: './pending.component.html', + styles: [ + + ] +}) + +export class PendingComponent implements OnInit { + content?: string; + + constructor(private service: BookService) { } + + + ngOnInit(): void { + this.service.refreshList(); + } + + } \ No newline at end of file diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html new file mode 100644 index 0000000..3625234 --- /dev/null +++ b/src/app/home/home.component.html @@ -0,0 +1,8 @@ +

Welcome to BookStoreApp

+ + + \ No newline at end of file diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts new file mode 100644 index 0000000..a118a7f --- /dev/null +++ b/src/app/home/home.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from "@angular/core"; +import { UserService } from "../shared/user.service"; + +@Component({ + selector: 'app-note', + templateUrl: './home.component.html', + styles: [ + + ] +}) + +export class HomeComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getPublicContent().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } + } \ No newline at end of file diff --git a/src/app/note/note-form/note-form.component.html b/src/app/note/note-form/note-form.component.html new file mode 100644 index 0000000..cb3fcc2 --- /dev/null +++ b/src/app/note/note-form/note-form.component.html @@ -0,0 +1,16 @@ + + +
+ + +
+
+ + +
+
+ +
+ diff --git a/src/app/note/note-form/note-form.component.ts b/src/app/note/note-form/note-form.component.ts new file mode 100644 index 0000000..f166ace --- /dev/null +++ b/src/app/note/note-form/note-form.component.ts @@ -0,0 +1,54 @@ +import { BookService } from './../../shared/book.service'; +import { ToastrService } from 'ngx-toastr'; +import { NoteService } from './../../shared/note.service'; +import { Component, OnInit } from '@angular/core'; +import { NgForm } from '@angular/forms'; +import { Note } from 'src/app/shared/note.model'; + +@Component({ + selector: 'app-note-form', + templateUrl: './note-form.component.html', + styles: [ + ] +}) +export class NoteFormComponent implements OnInit { + + constructor(public service:NoteService,public bookService:BookService, + private toastr:ToastrService) { } + + ngOnInit(): void { + } + + onSubmitNote(form:NgForm){ + if(this.service.formData.noteId==0) this.insertRecord(form); + else + this.updateRecord(form); + } + + insertRecord(form:NgForm){ + this.service.postNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.success('Added successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + updateRecord(form: NgForm){ + this.service.putNote().subscribe( + res => { + this.resetForm(form); + this.service.refreshList(); + this.toastr.info('Updated successfully',"Add Note Register") + }, + err => { console.log(err)} + ); + } + + resetForm(form:NgForm){ + form.form.reset(); + this.service.formData = new Note(); + } +} diff --git a/src/app/note/note.component.html b/src/app/note/note.component.html new file mode 100644 index 0000000..d16962e --- /dev/null +++ b/src/app/note/note.component.html @@ -0,0 +1,55 @@ + +

Twoja lista ulubionych książek:

+ + +
+
+ +
+
+
+
+
TitleAuthorDescriptionNumerTytułAutorOpis
{{b.id}} {{b.title}} {{b.author}} {{b.description}}
+ + + + + + + + + + + + + + + + +
TytułAutorKomentarz
{{book.title}}{{book.author}}{{note.comment}} + +
+
+ + diff --git a/src/app/note/note.component.ts b/src/app/note/note.component.ts new file mode 100644 index 0000000..b656463 --- /dev/null +++ b/src/app/note/note.component.ts @@ -0,0 +1,44 @@ +import { ToastrService } from 'ngx-toastr'; +import { Component, OnInit } from "@angular/core"; +import { Note } from 'src/app/shared/note.model'; +import { NoteFormComponent } from './note-form/note-form.component'; +import { NoteService } from 'src/app/shared/note.service'; +import { Book } from 'src/app/shared/book.model'; +import { BookService } from 'src/app/shared/book.service'; +import { NgForm } from '@angular/forms'; +@Component({ + selector: 'app-note', + templateUrl: './note.component.html', + styles: [ + + ] +}) + +export class NoteComponent implements OnInit { + + constructor(public service: NoteService, + private toastr:ToastrService, public bookService:BookService) { } + + ngOnInit(): void { + this.service.refreshList(); + this.bookService.refreshList(); + } + + populateForm(selectedRecord:Note){ + this.service.formData = Object.assign({},selectedRecord) ; + } + + onDelete(id:number){ + if(confirm('Are you sure to delete this note?')) + { + this.service.deleteNote(id) + .subscribe( + res=>{ + this.service.refreshList(); + this.toastr.error("Deleted successfully","Note delete") + }, + err=>{console.log(err)} + ) + } + } +} diff --git a/src/app/shared/auth.service.ts b/src/app/shared/auth.service.ts new file mode 100644 index 0000000..8a01a63 --- /dev/null +++ b/src/app/shared/auth.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +const AUTH_API = 'http://localhost:44340/api/Access/'; + +const httpOptions = { + headers: new HttpHeaders({ 'Content-Type': 'application/json' }) +}; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + constructor(private http: HttpClient) { } + + login(username: string, password: string): Observable { + return this.http.post(AUTH_API + 'Login', { + username, + password + }); + } + + register(username: string, email: string, password: string): Observable { + return this.http.post(AUTH_API + 'Registration', { + username, + email, + password + }, httpOptions); + } +} \ No newline at end of file diff --git a/src/app/shared/note.model.ts b/src/app/shared/note.model.ts new file mode 100644 index 0000000..c97fa56 --- /dev/null +++ b/src/app/shared/note.model.ts @@ -0,0 +1,6 @@ +export class Note { + noteId:number = 0; + userId:string = ""; + bookId:number; + comment:string = ""; +} \ No newline at end of file diff --git a/src/app/shared/note.service.ts b/src/app/shared/note.service.ts new file mode 100644 index 0000000..2145c38 --- /dev/null +++ b/src/app/shared/note.service.ts @@ -0,0 +1,44 @@ +import { Note } from './note.model'; +import { Injectable } from '@angular/core'; +import { HttpClient} from "@angular/common/http" + +@Injectable({ + providedIn: 'root' +}) +export class NoteService { + + constructor(private http: HttpClient) { } + + formData: Note = new Note(); + readonly baseURL = `https://localhost:44340/api/Note`; + + list: Note[]; + + listOfNotes: []; + + postNote(){ + return this.http.post(this.baseURL,this.formData); + } + + putNote(){ + return this.http.put(`${this.baseURL}/${this.formData.noteId}`,this.formData); + } + + deleteNote(id:number){ + return this.http.delete(`${this.baseURL}/${id}`); + } + + getBookByNoteId(id:number){ + return this.http.get(`${this.baseURL}/GetBookByNoteId/${id}`); + } + + refreshListOfNotes(){ + + } + + refreshList(){ + this.http.get(this.baseURL) + .toPromise() + .then(res => this.list = res as Note[]); + } +} \ No newline at end of file diff --git a/src/app/shared/token-storage.service.ts b/src/app/shared/token-storage.service.ts new file mode 100644 index 0000000..1486728 --- /dev/null +++ b/src/app/shared/token-storage.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; + +const TOKEN_KEY = 'auth-token'; +const USER_KEY = 'auth-user'; + +@Injectable({ + providedIn: 'root' +}) +export class TokenStorageService { + constructor() { } + + signOut(): void { + window.sessionStorage.clear(); + } + + public saveToken(token: string): void { + window.sessionStorage.removeItem(TOKEN_KEY); + window.sessionStorage.setItem(TOKEN_KEY, token); + } + + public getToken(): string | null { + return window.sessionStorage.getItem(TOKEN_KEY); + } + + public saveUser(user: any): void { + window.sessionStorage.removeItem(USER_KEY); + window.sessionStorage.setItem(USER_KEY, JSON.stringify(user)); + } + + public getUser(): any { + const user = window.sessionStorage.getItem(USER_KEY); + if (user) { + return JSON.parse(user); + } + + return {}; + } +} \ No newline at end of file diff --git a/src/app/shared/user.model.ts b/src/app/shared/user.model.ts new file mode 100644 index 0000000..c975a65 --- /dev/null +++ b/src/app/shared/user.model.ts @@ -0,0 +1,2 @@ +export class User { +} diff --git a/src/app/shared/user.service.ts b/src/app/shared/user.service.ts index 8b56d02..6497ba7 100644 --- a/src/app/shared/user.service.ts +++ b/src/app/shared/user.service.ts @@ -1,21 +1,28 @@ import { Injectable } from '@angular/core'; -import { FormBuilder } from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +const API_URL = 'http://localhost:44340/api/.../'; @Injectable({ providedIn: 'root' }) export class UserService { + constructor(private http: HttpClient) { } + + getPublicContent(): Observable { + return this.http.get(API_URL + 'all', { responseType: 'text' }); + } - constructor(private fb:FormBuilder) { } + getUserBoard(): Observable { + return this.http.get(API_URL + 'user', { responseType: 'text' }); + } + getModeratorBoard(): Observable { + return this.http.get(API_URL + 'mod', { responseType: 'text' }); + } - formModel = this.fb.group({ - UserName: [''], - Email: [''], - FullName: [''], - Passwords : this.fb.group({ - Password: [''], - ConfirmPassword: [''] - }) - }) -} + getAdminBoard(): Observable { + return this.http.get(API_URL + 'admin', { responseType: 'text' }); + } +} \ No newline at end of file diff --git a/src/app/site-in-development/site-in-development.component.html b/src/app/site-in-development/site-in-development.component.html new file mode 100644 index 0000000..7efc5f8 --- /dev/null +++ b/src/app/site-in-development/site-in-development.component.html @@ -0,0 +1,13 @@ +
+
+
+

Ta strona jest w trakcie tworzenia...

+
+
+
+
+ +
+
+
diff --git a/src/app/site-in-development/site-in-development.component.ts b/src/app/site-in-development/site-in-development.component.ts new file mode 100644 index 0000000..3e721b7 --- /dev/null +++ b/src/app/site-in-development/site-in-development.component.ts @@ -0,0 +1,27 @@ +import { Component, OnInit } from "@angular/core"; +import { UserService } from "../shared/user.service"; + +@Component({ + selector: 'app-note', + templateUrl: './site-in-development.component.html', + styles: [ + + ] +}) + +export class SiteInDevelopmentComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getPublicContent().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } + } \ No newline at end of file diff --git a/src/app/user/board-admin/board-admin.component.html b/src/app/user/board-admin/board-admin.component.html new file mode 100644 index 0000000..df77501 --- /dev/null +++ b/src/app/user/board-admin/board-admin.component.html @@ -0,0 +1,5 @@ +
+
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/app/user/board-admin/board-admin.component.ts b/src/app/user/board-admin/board-admin.component.ts new file mode 100644 index 0000000..aa73ec5 --- /dev/null +++ b/src/app/user/board-admin/board-admin.component.ts @@ -0,0 +1,23 @@ +import { Component, OnInit } from '@angular/core'; +import { UserService } from '../../shared/user.service'; + +@Component({ + selector: 'app-board-admin', + templateUrl: './board-admin.component.html' +}) +export class BoardAdminComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getAdminBoard().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } +} \ No newline at end of file diff --git a/src/app/user/board-user/board-user.component.html b/src/app/user/board-user/board-user.component.html new file mode 100644 index 0000000..df77501 --- /dev/null +++ b/src/app/user/board-user/board-user.component.html @@ -0,0 +1,5 @@ +
+
+

{{ content }}

+
+
\ No newline at end of file diff --git a/src/app/user/board-user/board-user.component.ts b/src/app/user/board-user/board-user.component.ts new file mode 100644 index 0000000..bbcd88f --- /dev/null +++ b/src/app/user/board-user/board-user.component.ts @@ -0,0 +1,26 @@ +import { Component, OnInit } from '@angular/core'; +import { UserService } from '../../shared/user.service'; + +@Component({ + selector: 'app-board-user', + templateUrl: './board-user.component.html', + styles: [ + ] +}) +export class BoardUserComponent implements OnInit { + content?: string; + + constructor(private userService: UserService) { } + + ngOnInit(): void { + this.userService.getAdminBoard().subscribe( + data => { + this.content = data; + }, + err => { + this.content = JSON.parse(err.error).message; + } + ); + } + +} diff --git a/src/app/user/profile/profile.component.html b/src/app/user/profile/profile.component.html new file mode 100644 index 0000000..f8fc6fa --- /dev/null +++ b/src/app/user/profile/profile.component.html @@ -0,0 +1,26 @@ +
+
+

+ {{ currentUser.username }} Profile +

+
+

+ Token: + {{ currentUser.accessToken.substring(0, 20) }} ... + {{ currentUser.accessToken.substr(currentUser.accessToken.length - 20) }} +

+

+ Email: + {{ currentUser.email }} +

+ Roles: +
    +
  • + {{ role }} +
  • +
+
+ + + Please login. + \ No newline at end of file diff --git a/src/app/user/profile/profile.component.ts b/src/app/user/profile/profile.component.ts new file mode 100644 index 0000000..45f74d3 --- /dev/null +++ b/src/app/user/profile/profile.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit } from '@angular/core'; +import { TokenStorageService } from '../../shared/token-storage.service'; + +@Component({ + selector: 'app-profile', + templateUrl: './profile.component.html' +}) +export class ProfileComponent implements OnInit { + currentUser: any; + + constructor(private token: TokenStorageService) { } + + ngOnInit(): void { + this.currentUser = this.token.getUser(); + } +} \ No newline at end of file diff --git a/src/app/user/registration/registration.component.html b/src/app/user/registration/registration.component.html deleted file mode 100644 index fe9829d..0000000 --- a/src/app/user/registration/registration.component.html +++ /dev/null @@ -1,45 +0,0 @@ -
-
-
-
- -

User Registration

-

-Using Asp.Net Core Web API and Angular

-
-
-
-
-
-
- - -
-
- - -
-
- - -
-
-
- - -
-
- - -
-
- -
-
- -
-
-
-
-
diff --git a/src/app/user/registration/registration.component.ts b/src/app/user/registration/registration.component.ts deleted file mode 100644 index 9298237..0000000 --- a/src/app/user/registration/registration.component.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { UserService } from './../../shared/user.service'; -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-registration', - templateUrl: './registration.component.html', - styles: [ - ] -}) -export class RegistrationComponent implements OnInit { - - constructor(public service: UserService) { } - - ngOnInit(): void { - } - -} diff --git a/src/app/user/user.component.html b/src/app/user/user.component.html deleted file mode 100644 index 1d97ef8..0000000 --- a/src/app/user/user.component.html +++ /dev/null @@ -1,5 +0,0 @@ -
-
- -
-
diff --git a/src/app/user/user.component.ts b/src/app/user/user.component.ts deleted file mode 100644 index d969c2d..0000000 --- a/src/app/user/user.component.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-user', - templateUrl: './user.component.html', - styles: [ - ] -}) -export class UserComponent implements OnInit { - - constructor() { } - - ngOnInit(): void { - } - -} diff --git a/src/assets/img/flying-books.png b/src/assets/img/flying-books.png new file mode 100644 index 0000000..da2d93c Binary files /dev/null and b/src/assets/img/flying-books.png differ diff --git a/src/index.html b/src/index.html index de6fc68..bf61d6a 100644 --- a/src/index.html +++ b/src/index.html @@ -1,15 +1,33 @@ + BookStoreApp - - + + + + + + + + - + + \ No newline at end of file diff --git a/src/styles.css b/src/styles.css index a975633..194531c 100644 --- a/src/styles.css +++ b/src/styles.css @@ -1,16 +1,111 @@ -/* You can add global styles to this file, and also import other style files */ -.form-group label { - color: grey; +body { + margin: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', + 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + sans-serif; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + + code { + font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + monospace; + } + .App{ + font-size: 24px; } +.MyContainer{ + margin-top: 40px; +} + +.MyTitle{ + font-size: 40px; +} + +.MyTitleGreen{ + font-size: 40px; + color: seagreen; +} + +.MyFormControl{ + margin-top: 10px; + margin-bottom: 10px; +} + +.MyTableButton{ + margin-top: 5px; + margin-bottom: 5px; + margin-left: 10px; + margin-right: 10px; +} + +.MyMarginTop{ + margin-top: 50px; +} + +.MyLogin{ + min-width: 400px; + max-width: 500px; + margin-left: auto; + margin-right: auto; + margin-top: 200px; + border: #303030 solid 5px; + border-radius: 50px; + padding: 50px; +} + +.MyLoginInfo{ + font-size: 40px; + text-align: center; +} + +.MyLoginRememberMe{ + font-size: 18px; +} + +.MyLoginRememberMe > label{ + margin-left: 10px; +} + +.MyCenter{ + margin-left: auto; + margin-right: auto; + width: 100px; +} + +.MyRegisterLink { + text-align: right; + font-size: 14px; +} + +table{ + background-color: transparent !important; + border: none; + box-shadow: none; +} +thead{ + background-color: transparent !important; + + border-bottom: 2px solid black !important; +} +tr{ + border-color: transparent; + border: none; +} +th{ + background-color: transparent !important; + border: 0 !important; + + +} .form-group input { font-weight: 500; } .form-group input::placeholder { - color: #c0bdbd; font-weight: 300; -} +} */ thead th{ font-weight: 400; @@ -25,22 +120,20 @@ input.invalid { border-color: red; } -body{ - background-color: #ffc107; -} input.form-control, input.forom-control:focus{ - background-color: #ffc107; color: black; border-color: black; - border-radius: 0px; border-width: 2px; } button[type=submit].btn{ - border-radius: 20px; - background-color: #000; + + background-color: #207935; color: #fff; + border-color: var(--button-color); + margin-top: 10px; + opacity: 1; } .div.form-group.required>label:first-child::after{ @@ -59,4 +152,24 @@ form{ .div.side header{ border: 3px solid black; -} \ No newline at end of file +} + +.bg-transparent{ + background-color: transparent; +} + +.jumbotron{ + background-color: var(--main-color); + } +/* +table{ + border-radius: var(--border-rad); +} +.thead-light{ + background-color: var(--accent-color) !important; +} + +th{ + border-collapse: separate !important; + background-color: transparent !important; +} */ \ No newline at end of file